Resumindo: sim, muita latência pode diminuir sua largura de banda total , e o efeito é mais pronunciado em conexões do tipo serial - ou seja: conexão que não pode transferir mais dados até um ACK para transmissão anterior é recebida.
A correlação de latência / largura de banda se torna um problema somente quando os dois valores estão muito separados, por exemplo, tendo um link muito "amplo", mas de alta latência (ou vice-versa - um link muito baixo de latência mas extremamente "estreito" ).
Deixe-me fazer um exemplo usando algo tão simples quanto um ping de 32 bytes em uma conexão WAN com aproximadamente 50 ms de latência (100 ms RTT). Com essa conexão, você pode enviar no máximo 10x 32b pings, para um total de 320b / s somente em cada direção! Não é uma surpresa que inundações de ping explicitamente não esperem pela confirmação da outra parte, ou a inundação seria inexistente.
Se você não pode diminuir a latência, como você pode contornar o problema? Principalmente usando duas maneiras:
- enviando pacotes maiores (por exemplo: usando pings com tamanho de 1400 bytes);
- enviando mais pacotes antes de esperar pela confirmação.
TCP usa ambos os sistemas: depois que uma conexão de streaming é estabelecida (por exemplo: um download é iniciado), ambos aumentam o tamanho do pacote até o valor máximo (o MSS - tamanho máximo do segmento) e número de pacotes enviados sem esperar por qualquer confirmação / confirmação - conhecido como escalonamento da janela TCP . Muito trabalho foi gasto na criação de uma pilha de rede capaz de ajustar dinamicamente o dimensionamento da janela TCP, de modo que isso raramente precisa ser ajustado manualmente nos dias de hoje. No entanto, em algum momento, um driver de rede ruim e / ou um caso de canto estranho podem impedir o dimensionamento correto, levando a uma largura de banda reduzida.
Protocolos que não implementam nativamente um escalonamento de janela (ie: IP e UDP) são mais sensíveis ao problema de largura de banda e geralmente necessitam de assistência do aplicativo de nível superior (quando possível) ou ajuste específico do sistema (por exemplo, aumentando o máximo tamanho do pacote, conhecido como MTU).
Claramente, as conexões WAN são, devido à sua latência mais intrínseca, mais propensas ao problema. No entanto, até mesmo conexões locais muito rápidas podem ser afetadas.
Casos em questão:
- em uma rede ethernet de 10 Gb / s, com RTT de ping na faixa de 0,05 ms, inicialmente consegui apenas cerca de 30-40% da largura de banda total disponível. Aumentar a interface MTU para 9000 bytes (acima dos 1500 bytes padrão) resolveu completamente o problema;
- em uma conexão Gigabit ethernet, um driver de interface Athereos interagia com a pilha de rede Linux de uma maneira que impedia que a janela TCP "abrisse" seu valor máximo, reduzindo o desempenho. Definir manualmente uma janela TCP resolveu o problema.