web-dev-qa-db-fra.com

Comment surveiller passivement la perte de paquets TCP? (Linux)

Comment puis-je surveiller passivement la perte de paquets sur les connexions TCP vers/depuis ma machine?

Fondamentalement, je voudrais un outil qui se trouve en arrière-plan et regarde TCP ack/nak/re-transmits pour générer un rapport sur lequel les adresses IP des pairs "semblent" subir de lourdes pertes.

La plupart des questions comme celle-ci que je trouve sur SF suggèrent d'utiliser des outils comme iperf. Mais, je dois surveiller les connexions vers/depuis une application réelle sur ma machine.

Est-ce que ces données sont juste là dans la pile Linux TCP?

65
nonot1

Pour avoir une idée générale de l'ampleur de votre problème netstat -s suivra votre nombre total de retransmissions.

# netstat -s | grep retransmitted
     368644 segments retransmitted

Vous pouvez également utiliser grep pour segments pour obtenir une vue plus détaillée:

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

Pour une plongée plus profonde, vous voudrez probablement lancer Wireshark.

Dans Wireshark, définissez votre filtre sur tcp.analysis.retransmission pour voir les retransmissions par flux.

C'est la meilleure option que je puisse trouver.

Autres impasses explorées:

  • les outils netfilter/conntrack ne semblent pas garder les retransmissions
  • stracing netstat -s a montré qu'il ne faisait qu'imprimer /proc/net/netstat
  • la colonne 9 dans/proc/net/tcp semblait prometteuse, mais elle semble malheureusement inutilisée.
53
Joel K

Ces statistiques sont dans/proc/net/netstat et collectl les surveillera de manière interactive ou écrites sur le disque pour une lecture ultérieure:

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

Bien sûr, si vous souhaitez voir côte à côte le trafic réseau, incluez simplement n avec -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
12
Mark Seger

Vous pouvez utiliser l'outil ss pour obtenir des statistiques détaillées TCP:

$ /sbin/ss -ti

Sous Debian, utilisez apt-get install iproute pour obtenir le binaire.

6
otmar

Il semble que certains gars de l'Université de Caroline du Nord (UNC) aient construit un utilitaire pour enquêter exactement sur ceci:

Méthodologie

TCP est un exemple classique d'un protocole hérité soumis à des modifications. Malheureusement, l'évaluation de quelque chose d'aussi fondamental que le mécanisme de détection/récupération de perte de TCP n'est pas complète. Notre objectif est de réaliser une évaluation réaliste complète des pertes de TCP et de son impact sur les performances de TCP.

Je me fie à l'analyse passive des connexions réelles TCP connexions pour atteindre le niveau de détail et de réalisme requis dans mon analyse.

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

Outil

Le but de l'outil est de fournir des résultats plus complets et plus précis pour l'identification et la caractérisation des segments hors séquence que ceux fournis par les outils antérieurs tels que tcpanaly, tcpflows, LEAST et Mystery. Notre méthodologie classe chaque segment qui apparaît hors séquence (OOS) dans une trace de paquet dans l'une des catégories suivantes: réorganisation du réseau ou TCP retransmission déclenchée par l'un des délais d'expiration, ACK en double, partiel ACK, ACK sélectifs ou récupération implicite De plus, chaque retransmission est également évaluée pour déterminer si elle était nécessaire ou non.

Je ne dirai pas que c'est la qualité de la production. Auparavant, j'ai créé des scripts Perl rapides pour stocker les tuples ip/port/ack en mémoire, puis signaler les données dupliquées provenant de la sortie de l'analyse PCAP, il semble que cela fournit une analyse plus approfondie.

3
polynomial

Vous voudrez peut-être regarder l'utilitaire dropwatch .

3
spreadlinux

Apparemment, le bon vieux sar peut recueillir la retransmission (et d'autres statistiques tcp), ainsi que toutes sortes d'autres statistiques système qui pourraient également être intéressantes si vous étudiez un problème comme le processeur, la mémoire, les E/S disque, etc. .

Vous devrez peut-être installer un package: sysstat et activer ce type particulier de statistiques avec le commutateur -S SNMP, sur RHEL/OracleLinux, c'est configurer dans /etc/cron.d/sysstat où/usr/lib64/sa/sa1 est appelé toutes les 5 minutes par défaut, mais cela peut également être réglé.

Pour l'analyse de ces données, utilisez:

  • sar (ligne de commande, basé sur le texte)
  • sadf crée un SVG selon http://sebastien.godard.pagesperso-orange.fr/matrix.html
  • ksar (qui peut tracer de jolis graphiques et fonctionne sur Java - il y a plusieurs clones différents parmi lesquels choisir sur sf.net et github si je me souviens bien)
  • http://www.sargraph.com (basé sur PHP, avec lequel je n'ai aucune expérience du tout - faites attention à l'application, pas au langage de programmation ????)
0
JohannesB