Como monitorar passivamente a perda de pacotes tcp? (Linux)

61

Como posso monitorar passivamente a perda de pacotes nas conexões TCP de / para minha máquina?

Basicamente, eu gostaria de uma ferramenta que fica em segundo plano e assiste ao TCP ack / nak / re-transmite para gerar um relatório no qual os endereços IP dos pares "parecem" estar sofrendo grandes perdas.

Muitas perguntas como essa que eu acho sobre o SF sugerem o uso de ferramentas como o iperf. Mas preciso monitorar as conexões de / para um aplicativo real na minha máquina.

Esses dados estão apenas na pilha TCP do Linux?

nonot1
fonte

Respostas:

50

Para uma noção geral da escala do seu problema, netstat -svocê rastreará seu número total de retransmissões.

# netstat -s | grep retransmitted
     368644 segments retransmitted

Você pode solicitar o grep para segmentsobter uma visão mais detalhada:

# netstat -s | grep segments
         149840 segments received
         150373 segments sent out
         161 segments retransmitted
         13 bad segments received

Para um mergulho mais profundo, você provavelmente desejará acionar o Wireshark.

No Wireshark, defina seu filtro tcp.analysis.retransmissionpara ver retransmissões por fluxo.

Essa é a melhor opção que posso encontrar.

Outros becos sem saída explorados:

  • As ferramentas netfilter / conntrack não parecem retransmitir
  • traçado netstat -smostrou que é apenas impressão/proc/net/netstat
  • a coluna 9 em / proc / net / tcp parecia promissora, mas infelizmente parece não ter sido usada.
Joel K
fonte
e você pode monitorar os pacotes perdidos com # watch 'netstat -s | grep retransmitido '
nenhum
Isso mostraria apenas problemas de saída. "netstat -s | segmentos grep" parece mais razoável para mim.
Akostadinov 17/04
11
Se você estiver gerenciando uma rede de tamanho razoável, recomendo o pastmon sobre o wireshark para monitoramento contínuo - pastmon.sourceforge.net/Wikka-1.1.6.5/wikka.php?wakka=HomePage
symcbean
4
Por alguma razão, está escrito retransmitedpara mim (Ubuntu Server 14).
Sudo
11
qual é uma boa taxa de retransmissões versus enviadas ou recebidas?
Abourget
12

Essas estatísticas estão em / proc / net / netstat e as collectlmonitorarão para você interativamente ou gravadas em disco para reprodução posterior:

[root@poker ~]# collectl -st
waiting for 1 second sample...
#<------------TCP------------->
#PureAcks HPAcks   Loss FTrans
        3      0      0      0
        1      0      0      0

Claro, se você gostaria de ver em seguida, lado a lado com o tráfego de rede, basta incluir ncom -s:

[root@poker ~]# collectl -stn
waiting for 1 second sample...
#<----------Network----------><------------TCP------------->
#  KBIn  PktIn  KBOut  PktOut PureAcks HPAcks   Loss FTrans
      0      1      0       1        1      0      0      0
      0      1      0       1        1      0      0      0
Mark Seger
fonte
7

Você pode usar a ssferramenta para obter estatísticas detalhadas do TCP:

$ /sbin/ss -ti

No Debian, use apt-get install iproutepara obter o binário.

otmar
fonte
Observe que a pessoa que estava fazendo a pergunta estava procurando uma ferramenta da qual pudesse assistir a saída. Embora alguns dos comandos mencionados até agora não funcionem dessa maneira, todas as respostas aprovadas incluíram pelo menos um método para fazê-lo.
Andrew B
2
@ AndrewB: Você pode fazer watch ss -ti.
John Zwinck
3

Parece que alguns funcionários da Universidade da Carolina do Norte (UNC) criaram um utilitário para investigar exatamente isso:

Metodologia

O TCP é um exemplo clássico de um protocolo herdado que está sujeito a modificações. Infelizmente, a avaliação de algo tão fundamental quanto o mecanismo de detecção / recuperação de perdas do TCP não é abrangente. Nosso objetivo é realizar uma avaliação realista completa das perdas de TCP e seu impacto no desempenho do TCP.

Confio na análise passiva das conexões TCP do mundo real para atingir o nível de detalhe e realismo necessário em minha análise.

http://www.cs.unc.edu/~jasleen/Research-passivetcp.htm#Tool

Ferramenta

O objetivo da ferramenta é fornecer resultados mais completos e precisos para identificar e caracterizar segmentos fora de sequência do que os fornecidos por ferramentas anteriores, como tcpanaly, tcpflows, LEAST e Mystery. Nossa metodologia classifica cada segmento que aparece fora de sequência (OOS) em um rastreamento de pacote em uma das seguintes categorias: reordenamento da rede ou retransmissão TCP acionada por um tempo limite, ACKs duplicados, ACKs duplicados, ACKs parciais, ACKs seletivos ou recuperação implícita. Além disso, cada retransmissão também é avaliada quanto à necessidade ou não.

Não direi que é qualidade de produção. Anteriormente, eu criei scripts perl rápidos para armazenar tuplas ip / port / ack na memória e, em seguida, relatar dados duplicados da digitalização da saída pcap, isso parece fornecer uma análise mais completa.

polinomial
fonte
3

Você pode querer olhar para o dropwatchutilitário.

spreadlinux
fonte
Está disponível apenas como pacote rpm: /
Ricky Robinson
0

Aparentemente, o bom e velho sar pode coletar retransmissão (e outras estatísticas tcp), juntamente com todos os tipos de outras estatísticas do sistema que também podem ser interessantes se você investigar um problema como CPU, memória, E / S de disco, etc.

Pode ser necessário instalar um pacote: sysstat e ativar esse tipo específico de estatística com o switch -S SNMP, no RHEL / OracleLinux, isto é configurado em /etc/cron.d/sysstat em que / usr / lib64 / sa / sa1 é chamado a cada 5 minutos por padrão, mas isso também pode ser ajustado.

Para análise desses dados, use:

  • sar (linha de comando, com base em texto)
  • sadf cria SVG de acordo com http://sebastien.godard.pagesperso-orange.fr/matrix.html
  • ksar (que pode traçar bons gráficos e roda em Java - existem vários clones diferentes para escolher no sf.net e no github, se bem me lembro)
  • http://www.sargraph.com (baseado em PHP, com o qual não tenho experiência nenhuma - lembre-se de você, do aplicativo e não da linguagem de programação)
JohannesB
fonte