Excessivo 'TCP Dup ACK' e 'TCP Fast Retransmission' causando problemas na rede. O que está causando isso?

6

Estou recebendo TCP Dup ACK e TCP Fast Retransmission excessivos em nossa rede quando transfiro arquivos pelo link MetroEthernet. Os dois sites estão conectados por um roteador sonicwall, então os sites estão a apenas um salto de distância.

Aqui é uma captura de tela de wireshark e aqui é a captura inteira. Nesta captura, o cliente é 192.168.2.153 e o servidor é 192.168.1.101 Aqui está um traceroute do meu sistema para o servidor (os tempos de ping geralmente são constantes abaixo de 10 ms):

user@pc567:~$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:e0:b8:c8:0c:7e  
          inet addr:192.168.2.153  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::2e0:b8ff:fec8:c7e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:244994 errors:0 dropped:0 overruns:0 frame:0
          TX packets:149148 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:319571991 (319.5 MB)  TX bytes:12322180 (12.3 MB)
          Interrupt:16 

user@pc567:~$ traceroute -n 192.168.1.101
traceroute to 192.168.1.101 (192.168.1.101), 30 hops max, 60 byte packets
 1  192.168.2.254  0.747 ms  0.706 ms  0.806 ms
 2  192.168.1.101  8.995 ms  9.217 ms  9.477 ms
user@pc567:~$

Qualquer ajuda sobre o que está causando isso seria útil! Eu posso postar mais detalhes necessários.

ATUALIZAÇÃO: Desde que isto começou, substituí a sonicwall por um roteador 1800 cisco. A captura de pacotes com ele instalada teve os mesmos resultados. Como é um circuito de ethernet de metrô, nenhum roteador é necessário. Por isso, também tentei conectar os laptops diretamente ao equipamento dos provedores de serviços em ambos os sites e colocá-los na mesma sub-rede. A captura de pacotes parece a mesma, fazendo assim. Isso me leva a acreditar que há um problema com o circuito ethernet do metrô, mesmo que eles continuem dizendo que nada está errado e tudo está ok.

    
por Ingram 26.07.2013 / 20:35

3 respostas

3

Agora postando o que descobri. O provedor MetroEthernet saiu em um sábado para o nosso escritório principal. Eles desconectaram a rede e também tinham alguém em uma agência próxima. Eles conectaram equipamentos de teste de rede em ambas as extremidades e foram capazes de determinar rapidamente que havia de fato um problema. Várias horas depois, eles conseguiram isolar o problema. Foi um problema com as linhas de cobre da central de provedores, para o nosso escritório principal. Eles disseram que os quadros estavam caindo como loucos, o que estava causando as retransmissões. Eles corrigiram o problema com o fio de cobre em seu escritório central (eles disseram que tinham que separar cada fio, um de cada vez. Soa como BS para mim), mas depois que eles fizeram isso em seu escritório central, o problema foi resolvido. / p>     

por 13.01.2014 / 02:40
3

Eu percebo que esta resposta é simplificada, e não tão explícita quanto gostaria, então se você tiver perguntas sobre um passo, por favor, pergunte!

Rolando um pouco depois de abrir este arquivo no Wireshark, vemos alguns quadros em cores diferentes. Parece muito ruim, certo? Bem, não é tão ruim assim. Espere, vamos chegar lá.

Verificando o pacote SYN (frame 37), vemos SACK e Window Scaling nas opções TCP. Boa. Mesma coisa na escala SYN / ACK (frame 38), SACK e Windows. Impressionante. Não vejo nada de estranho em relação ao SACK.

Uma estimativa do RTT descarregado é o tempo entre o pacote SYN e o primeiro ACK (frame 39). São cerca de 9,3 ms, o que corresponde às suas descobertas. Observe que o tempo entre SYN / ACK e ACK (quadros 38 e 39) é muito menor do que entre SYN e SYN / ACK (37 e 38). Isso significa que esse arquivo de captura é levado para o receptor e, para ver por que isso não é ideal, teremos que voltar para a escola.

Entre o remetente e o receptor, há uma parte do caminho da rede que é a menor, o que limita a largura de banda. A estimativa de RTT que recebemos do handshake nos fornece uma estimativa da duração desse caminho de rede. Uma medida de quantos pacotes podemos encaixar neste tubo é a Capacidade de tubulação ou o produto de retardo de largura de banda - PC [ bits] = R [bits / s] * RTT [s], onde R é a menor largura de banda. A capacidade do tubo é então uma medida de volume.

Imagine uma mangueira de jardim. Seu volume medido é definido pelo seu comprimento e sua largura da mesma maneira, certo? Para obter o máximo de água, é necessário que ele seja completamente preenchido com água, caso contrário, haverá lacunas de ar que limitam o fluxo de água. Caso consigamos preenchê-lo completamente, ele pode transbordar. Podemos usar um balde para não molharmos o chão e se o balde transbordar que não afeta o fluxo de água.

Acontece que é exatamente o mesmo no caminho da rede. Precisamos encher o tubo ... Em outras palavras, a capacidade do tubo é o menor número de bytes em vôo (a quantidade de água que temos no tubo + balde) entre o emissor e o receptor que utiliza a menor largura de banda (não causa lacunas de ar). Então, se os bytes em vôo > PC, então estamos bem!

Olhando para o traço TCP Estatísticas - > TCP StreamGraph - > Gráfico de Seqüência de Tempo (tcptrace) podemos ver os bytes no eixo Y e o tempo no eixo X. A derivada dessa curva é de bytes / segundo ou taxa de transferência. Observe como a "linha" preta é plana, o que significa que a taxa de transferência é estável! Ele é interrompido por linhas azuis algumas vezes (esses são os intervalos de SACK nos ACKs duplicados), mas como pode ser visto, ele não afeta o throughput.

Veja como a linha sólida cinza inferior direita (zoom em um pouco, as ACKs) está realmente próxima dos segmentos TCP pretos? O tempo entre o segmento TCP e o ACK é o RTT, aqui está quase 0! Isso significa que não há muitos segmentos em vôo que passaram por esse ponto de captura. Isso, por sua vez, significa que não podemos usar isso para estimar os bytes em vôo, e é por isso que uma captura de pacotes do lado do remetente é muito melhor.

Os pacotes aqui são naturalmente perdidos antes do ponto de captura. Cada segmento de dados que estava em andamento no momento da perda aciona um ACK duplicado. Portanto, podemos usar o número de ACKs duplicados para estimar os bytes em vôo no momento da perda de pacotes. Aqui vemos cerca de 9, 16 e 23 segmentos. Cada segmento tem 1448 bytes de dados, o que nos dá um byte entre 13k e 33k. O throughput aqui era de mais de 3 Mbit / s (do gráfico IO ) e com o RTT medimos antes de obtermos uma capacidade de tubo menor que 3e6 [bits / s] * 10e-3 [s] / 8 bytes = 3750 bytes ou menos de 3 segmentos.

Como os bytes em vôo no momento dessas perdas não são realmente os mesmos (difícil dizer aqui com tão poucas amostras), não posso dizer se são perdas aleatórias (que são ruins, más) ou que ocorrem perdas porque um queue / bucket estourou, mas eles estão ocorrendo quando bytes em flight > A taxa de transferência do PC não é afetada.

Sua resposta parece indicar que eles eram de fato aleatórios, mas não tantos para causar baixa produtividade.

    
por 08.02.2014 / 21:52
2

Olhando para a captura que você forneceu (obrigado por fazer isso!) Eu posso ver um padrão de retransmissão bem clássico no começo. Você pode vê-lo em torno do pacote 50. Há um pacote ausente entre 51 e 52. O que está acontecendo é isto:

  1. - > Dados do pacote 50
  2. < - Packet 51 pacote ACK 50.
  3. - > Pacote 52 Dados
  4. < - Packet 53 Pacote ACK 50.
  5. - > Pacotes 54 Dados
  6. < - Packet 55 pacote ACK 50.

Um pacote de dados foi descartado, e o receptor está indicando isso, continuando a ACK o pacote até o que foi visto até agora. O que é interessante aqui é que ambos os lados tinham TCP SACK Permitted Option = True set quando negociaram a conexão, então o pacote 55 deve ter um cabeçalho SACK e não. Reconhecimentos seletivos permitem que um receptor indique "Eu já vi tudo até 51, mas também 53-55", o que reduz a quantidade de retransmissões necessárias para que as coisas voltem à velocidade máxima.

O que está acontecendo desde que não pode usar o SACK é que ele recai no método padrão de retransmissão TCP de "Eu já vi até 50" até que o outro lado descubra e retransmita tudo 50 e mais tarde.

Existe uma retransmissão no pacote 66, que é imediatamente seguido por um ACK até o pacote 56. Após a segunda retransmissão (pacote 72), a conexão está de volta aos trilhos.

Em primeiro lugar, parece provável que os cabeçalhos SACK estejam sendo removidos pelas paredes sonoras, o que está impedindo que as retransmissões se recuperem tão rapidamente quanto foram negociadas. Pessoalmente, sou da opinião de que a retirada do SACK é inútil, mas outras podem discordar.

Pelo que eu posso dizer sobre essa captura, você está vendo uma perda ocasional de pacotes, o que está fazendo com que as conexões TCP passem por protocolos de retransmissão normais. Os firewalls estão atrapalhando como um método de retransmissão dos dois lados negociados não está sendo permitido.

    
por 26.07.2013 / 21:14