¿Cómo monitorear pasivamente la pérdida de paquetes tcp? (Linux)

61

¿Cómo puedo monitorear pasivamente la pérdida de paquetes en las conexiones TCP hacia / desde mi máquina?

Básicamente, me gustaría una herramienta que se encuentre en segundo plano y vea TCP ack / nak / retransmitir para generar un informe sobre qué direcciones IP de pares "parecen" experimentar una gran pérdida.

La mayoría de las preguntas como esta que encuentro sobre SF sugieren usar herramientas como iperf. Pero, necesito monitorear las conexiones hacia / desde una aplicación real en mi máquina.

¿Están estos datos simplemente sentados allí en la pila TCP de Linux?

nonot1
fuente

Respuestas:

50

Para tener una idea general de la escala de su problema netstat -s, rastreará su número total de retransmisiones.

# netstat -s | grep retransmitted
     368644 segments retransmitted

Puede aso grep para segmentsobtener una vista más detallada:

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

Para una inmersión más profunda, probablemente querrás encender Wireshark.

En Wireshark configure su filtro tcp.analysis.retransmissionpara ver retransmisiones por flujo.

Esa es la mejor opción que se me ocurre.

Otros callejones sin salida explorados:

  • Las herramientas netfilter / conntrack no parecen mantener las retransmisiones
  • el estiramiento netstat -sdemostró que solo está imprimiendo/proc/net/netstat
  • la columna 9 en / proc / net / tcp parecía prometedora, pero desafortunadamente parece no usarse.
Joel K
fuente
y puede monitorear los paquetes perdidos con # watch 'netstat -s | grep retransmitido '
ninguno
Esto solo mostraría problemas de salida. "netstat -s | grep segmentos" me parece más razonable.
akostadinov
1
Si está administrando una red de tamaño razonable, entonces recomendaría pastmon sobre wireshark para monitoreo continuo - pastmon.sourceforge.net/Wikka-1.1.6.5/wikka.php?wakka=HomePage
symcbean
44
Por alguna razón, está escrito retransmitedpara mí (Ubuntu Server 14).
sudo
1
¿Cuál es una buena tarifa para retransmisiones vs enviadas o recibidas?
Abourget
12

Estas estadísticas se encuentran en / proc / net / netstat y las collectlsupervisarán de forma interactiva o escritas en el disco para su posterior reproducción:

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

Por supuesto, si desea ver al lado del tráfico de red, solo incluya ncon -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
fuente
7

Puede usar la ssherramienta para obtener estadísticas TCP detalladas:

$ /sbin/ss -ti

Bajo Debian, use apt-get install iproutepara obtener el binario.

otmar
fuente
Tenga en cuenta que la persona que hizo la pregunta estaba buscando una herramienta de la que pudiera ver la salida. Si bien algunos de los comandos mencionados hasta ahora no funcionan de esta manera, todas las respuestas votadas incluyen al menos un método para hacerlo.
Andrew B
2
@ AndrewB: Puedes hacer watch ss -ti.
John Zwinck
3

Parece que algunos muchachos de la Universidad de Carolina del Norte (UNC) construyeron una utilidad para investigar exactamente esto:

Metodología

TCP es un ejemplo clásico de un protocolo heredado que está sujeto a modificaciones. Desafortunadamente, la evaluación de algo tan fundamental como el mecanismo de detección / recuperación de pérdidas de TCP no es exhaustiva. Nuestro objetivo es realizar una evaluación realista completa de las pérdidas de TCP y su impacto en el rendimiento de TCP.

Confío en el análisis pasivo de las conexiones TCP del mundo real para lograr el nivel requerido de detalle y realismo en mi análisis.

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

Herramienta

El propósito de la herramienta es proporcionar resultados más completos y precisos para identificar y caracterizar segmentos fuera de secuencia que los proporcionados por herramientas anteriores como tcpanaly, tcpflows, LEAST y Mystery. Nuestra metodología clasifica cada segmento que aparece fuera de secuencia (OOS) en una traza de paquetes en una de las siguientes categorías: reordenamiento de red o retransmisión TCP activada por uno de tiempo de espera, ACK duplicados, ACK parciales, ACK selectivos o recuperación implícita. Además, cada retransmisión también se evalúa para determinar si era necesaria o no.

No diré que es calidad de producción. Anteriormente, he creado scripts de perl rápidos para almacenar tuplas ip / port / ack en la memoria y luego informar sobre datos duplicados de la salida de escaneo de pcap, esto parece que proporciona un análisis más exhaustivo.

polinomio
fuente
3

Es posible que desee ver la dropwatchutilidad.

spreadlinux
fuente
Solo está disponible como paquete rpm: /
Ricky Robinson
0

Aparentemente, el viejo sar puede recopilar la retransmisión (y otras estadísticas tcp), junto con todo tipo de estadísticas del sistema que también podrían ser interesantes si investiga un problema como CPU, memoria, E / S de disco, etc.

Es posible que necesite instalar un paquete: sysstat y habilitar este tipo particular de estadísticas con el interruptor -S SNMP, en RHEL / OracleLinux, esto se configura en /etc/cron.d/sysstat donde se invoca / usr / lib64 / sa / sa1 cada 5 minutos por defecto, pero eso también se puede ajustar.

Para el análisis de estos datos use:

  • sar (línea de comando, basada en texto)
  • sadf crea SVG de acuerdo con http://sebastien.godard.pagesperso-orange.fr/matrix.html
  • ksar (que puede trazar buenos gráficos y ejecuta en Java, hay varios clones diferentes para elegir en sf.net y github si recuerdo correctamente)
  • http://www.sargraph.com (basado en PHP, con el que no tengo experiencia en absoluto, tenga en cuenta, la aplicación, no el lenguaje de programación 😉)
JohannesB
fuente