Como o Linux impede que os aplicativos enviem mais pacotes do que o link pode manipular sem eliminar pacotes?

1

Eu não pude deixar a pergunta mais clara, então aqui está um cenário de exemplo:

Considerando uma máquina Linux conectada a uma rede IP por meio de uma interface física de largura de banda de 10 Mbps (ou uma interface de velocidade mais alta com um filtro de token de intervalo tc para limitar a taxa a 10 Mbps).

Em uma máquina remota (com velocidade igual ou link mais rápido) inicie um servidor UDP iperf:

iperf -s -u -i 1

Na máquina local, inicie um cliente iperf com bw = 20Mbps:

iperf -c <server ip> -u -i 1 -b 20M

Observação : o remetente nunca excede a taxa de 10 Mbps (definida na camada de enlace no hardware ou no qdisc tc).

Eu esperava ver o remetente enviando 20 Mbits de pacotes por segundo, fazendo com que a fila tx da interface se acumulasse e as perdas de pacotes começassem a acontecer. Mas este não é o caso. Por quê?

Eu tentei pesquisar na pasta net / sched para o kernel do Linux, mas não consigo encontrar a origem desse comportamento.

Aprecie sua ajuda. Também fique à vontade para sugerir alterações no título para torná-lo mais relevante.

    
por Rango 28.02.2015 / 00:49

1 resposta

1

Isso se deve a um procedimento chamado Autonegotiation , que acontece no camada física . No que diz respeito ao kernel, esse link (conexão) só pode manipular uma largura de banda de 10 Mbps, e o iperf presumivelmente respeita a velocidade máxima de conexão.

O bom pessoal do link provavelmente pode entrar em mais detalhes se você tiver mais dúvidas sobre essa interação.

    
por 28.02.2015 / 01:03