A latência excessiva pode afetar a taxa de transferência? [fechadas]

4

Eu não sei se esta pergunta está no tópico aqui, então, por favor, me redirecione se não.

Tentando entender como o TCP funciona, eu simulei um único link ponto a ponto usando o simulador ns-3. Ao configurar a largura de banda do link para 5 Mbps, uma taxa de erro adequada e o atraso para 5ms, obtive uma carga bruta ao redor de 4,9 Mbps. No entanto, depois de aumentar o link para 50 Mbps, consegui apenas 16 Mbps. Além disso, reduzir o atraso para 1ms leva a taxa de transferência para ~ 40 Mbps.

Alguém por favor pode explicar essa enorme diferença?

EDIT: Eu entendo como a largura de banda e a latência são diferentes. Eu só quero saber se o meu simulador é buggy, ou isso é esperado do TCP.

    
por PulseJet 24.08.2017 / 04:51

3 respostas

4

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.
por 24.08.2017 / 15:29
3

Demasiado muito tempo para um comentário, mas não é uma resposta completa, mas a latência pode afetar o rendimento (a largura de banda é uma propriedade fixa):

Sua pilha de rede TCP precisa manter uma cópia de todos os pacotes transmitidos na memória até que receba a confirmação do destinatário de que o pacote foi recebido, para que os pacotes possam ser retransmitidos em caso de perda de pacotes.

O tamanho mínimo desse buffer é uma multiplicação simples:

<throughput> * <roundtrip time> = <retransmit buffer size> 

i.e. Para suportar o throughput máximo de um NIC gigabit com um tempo de ida e volta (= latência) de 0,2 milissegundos em sua LAN, o buffer de retransmissão necessário seria:

  (1Gigabit/s = 10^9 bit/s) * 0.0002 s = 200000 bits = 25 Kb 

Uma quantia bastante modesta. Uma latência de WAN mais realista de 2 milissegundos e você precisaria de 250 Kb.

A menos que o driver de rede ajuste dinamicamente a quantidade de memória alocada para o tamanho do buffer de retransmissão TCP, esse buffer se tornará efetivamente um limitador da taxa de transferência que seu sistema pode suportar, independentemente da largura de banda disponível na rede:

<max throughput>  = <retransmit buffer size> / <roundtrip time>

E qualquer aumento na latência reduz o rendimento efetivo do seu sistema.

Agora imagine que, em vez de LAN / WAN de baixa latência, o mesmo buffer de 250 Kb está configurado para uma alta latência e alta largura de banda, como, por exemplo, um uplink de satélite com uma latência típica de 500 ms e limitado a:

250 Kb / 0,5 s = 2 000 000 / 0,5 = 4 Mbit/s 

em vez da largura de banda de 1 Gbit que uma conexão de internet via satélite pode realmente suportar (de acordo com Wikipedia )

    
por 24.08.2017 / 10:08
2

Largura de banda = capacidade

Latência = Atraso

Imagine que eu tenho uma piscina de 500 litros e que eu tenho um balde de 1 galão para transportar água e um balde de 5 galões para transportar água. Leva-me 1 minuto para levar um ou outro balde do meu abastecimento de água para a piscina. Se eu usar apenas o balde de 1 galão para encher a piscina, então eu precisarei fazer 500 viagens, totalizando 500 minutos de tempo gasto carregando água do suprimento de água para a piscina. Se eu usar apenas o balde de 5 galões para encher a piscina, então eu preciso apenas fazer 100 viagens, totalizando 100 minutos de tempo gasto carregando água do suprimento de água para a piscina.

O tempo necessário para caminhar até o pool (latência) não afeta a quantidade de água que posso carregar com cada balde (largura de banda) e, por outro lado, o tamanho do balde (largura de banda) não altera o tempo para caminhar até a piscina (latência).

O resultado final é que a piscina irá encher 5 vezes mais rápido quando usar o balde de 5 galões do que quando usar o balde de 1 galão porque o balde de 5 galões é maior, não porque é mais rápido.

    
por 24.08.2017 / 05:46

Tags