76 votes

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 ?

En gros, j'aimerais un outil qui se trouve en arrière-plan et surveille les ack/nak/re-transmissions TCP pour générer un rapport sur les adresses IP des pairs qui "semblent" subir des pertes importantes.

La plupart des questions de ce genre que je trouve sur SF suggèrent d'utiliser des outils comme iperf. Mais, j'ai besoin de surveiller les connexions vers/depuis une application réelle sur ma machine.

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

0voto

JohannesB Points 201

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 enquêtez sur un problème comme le cpu, la mémoire, les E/S de disque, etc.

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

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

  • sar (ligne de commande, texte)
  • sadf crée des SVG en fonction de http://sebastien.godard.pagesperso-orange.fr/matrix.html
  • ksar (qui peut tracer de beaux graphiques et fonctionne en 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 - attention, l'application, pas le langage de programmation )

0voto

Greg Bray Points 5420

On dirait que /proc/net/snmp est l'endroit où les valeurs de netstat -s proviennent d'une source. Voici donc un rapide gawk script pour trouver le % de segments qui sont retransmis :

gawk 'BEGIN {OFS=" "} $1 ~ /Tcp:/ && $2 !~ /RtoAlgorithm/ {print "InSegs\t",$11,"\nOutSegs\t",$12,"\nRetransSegs\t",$13,"\nPctReTrans\t",($13/$12*100)}' /proc/net/snmp

InSegs   8567261339 
OutSegs  9545034903 
RetransSegs  2192165 
PctReTrans   0.0229665

Une instance AWS interne (pas d'IP publique ni de trafic public) que nous soupçonnions d'avoir des problèmes de réseau avec d'autres systèmes dans le VPC a présenté les résultats suivants 0.0229% retransmis, ce qui était plus de 10 fois supérieur à la 0.002% max que nous avons vu sur d'autres nœuds. Une instance vraiment mauvaise a atteint jusqu'à 2.32% de tous les paquets sortants étaient des segments retransmis.

Vous pouvez également voir le taux de retransmissions pendant une fenêtre de temps donnée en utilisant :

FIRST=$(netstat -s | grep -oP \'\d+(?= segments retransmit+ed)\');
sleep 30;
LAST=$(netstat -s | grep -oP \'\d+(?= segments retransmit+ed)\');
expr $LAST - $FIRST;

0voto

voidpointer Points 545

Dans les versions récentes de Linux, netstat a été remplacé par ss y ip . Une autre réponse explique comment utiliser ss . Avec ip vous pouvez obtenir le nombre de paquets abandonnés avec cette commande :

ip -s link show eth0

Voir aussi :

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X