Aller à la recherche

Activité réseau avec sockstat et netstat sous Freebsd

Nous allons voir grâce à 2 outils qui sont sockstat et netstat comment avoir des informations sur les connexions réseaux.

sockstat et netstat : comment observer l’activité réseau sous FreeBSD

sockstat

sockstat est un outil qui permet d’afficher les programmes à l’écoute d’un port ainsi que les connexions activent à un moment donné.

sockstat

USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS      
root     sshd       92701 3  tcp4   192.68.100.80:12543    192.168.100.110:17132
postfix  pickup     92617 6  stream public/pickup
postfix  pickup     92617 7  dgram  -> /var/run/logpriv
www      php-fpm    88096 0  stream /var/run/php-fpm.sock
dovenull imap-login 87113 7  tcp4   *:143                 *:*
dovenull imap-login 87113 8  tcp4   *:993                 *:*
www      nginx      86195 8  tcp4   *:80                  *:*
www      nginx      86195 9  tcp4   192.168.100.80:443     *:*
www      nginx      86195 10 stream -> ??
root     nginx      86194 3  stream -> ??
root     nginx      86194 8  tcp4   *:80                  *:*
root     nginx      86194 9  tcp4   192.168.100.80:443     *:*
root     nginx      86194 10 stream -> ??
www      php-fpm    85923 0  stream /var/run/php-fpm.sock

la sortie de sockstat nous présente les informations sous forme de colonne

  • USER : Il s’agit de l’utilisateur qui a lancé la commande
  • COMMAND : nom de la commande
  • PID : l’identifiant du programme
  • FD : L’identifiant dans le descripteur de fichier.
  • PROTO : Le protocole de transport utilisé
  • LOCAL ADRESSE : L’adresse ip suivi du port local
  • FOREIGN ADRESSE : L’adresse ip et le port distant

Nous pouvons voir que le daemon "sshd" a été lancée avec l’utilisateur root et écoute sur le port 12543 via TCP / IP v4. Nous voyons aussi php-fpm qui cette fois-ci tourne sous l’utilisateur www et qu’il s’agit pas de tcp/ip mais d'un stream (socket unix de type stream), nous avons aussi la commande pickup lancé par l’utilisateur postfix avec un socket de type dgram.

Il est possible de passer des options à sockstat afin d’affiner les résultats N’afficher que les ports ouverts pour TCP/IP v4 sockstat -4

Afficher que les ports qui sont en écoute ainsi que les connexions en cours sockstat -4l

Afficher que les sockets connectés cette fois sockstat -4c

Afficher que les scockets qui écoutent sur un port spécifique sockstat -4 -p 80

netstat

netstat est un outil de gestion de réseau plus complet et capable d’afficher énormément d’informations sur l’activité réseau de la machine.

États des connexions

Nous allons commencer par obtenir à peu près la même chose que ce que fournie sockstat. netstat -f inet -na

  • -a : Affiche les ports ouverts
  • -f inet : Afin de n’obtenir que les connexions de la famille AF_INET (icmp, tcp, udp ...)
  • -n : ne résous pas les noms d’hôte des adresses ip
Proto Recv-Q Send-Q Local Address          Foreign Address        (state)
tcp4       12      0 192.168.100.80.5135     192.168.100.110.37132    ESTABLISHED
tcp4       0      5 192.168.100.80.143      192.168.100.110.45312    ESTABLISHED
tcp4       0      0 192.168.100.80.143      192.168.100.110.45856    ESTABLISHED
tcp4       0      0 192.168.100.80.443      *.*                    LISTEN
tcp4       0      0 *.80                   *.*                    LISTEN
tcp4       0      0 *.993                  *.*                    LISTEN
tcp4       0      0 *.143                  *.*                    LISTEN
tcp4       0      0 *.587                  *.*                    LISTEN
tcp4       0      0 *.25                   *.*                    LISTEN

Nous retrouvons les informations à savoir quel couple ip/port sont en état ‘écoute’ et ‘connecté’ mais nous n’avons ici aucune idée de l’utilisateur sous lequel le programme a été exécuté. Mais nous avons une colonne Recv-Q qui nous renseigne sur le nombre d’octets en attente d’être géré par cette connexion. Un nombre élevé indique que le programme à l’écoute de ce socket a du mal à gérer le flux qui lui arrive. Un nombre élevé dans la colonne Send-Q, lui indiquera que tout ce qui sort de cette connexion a du mal a être géré, soit par le réseau soit par le hôte distant qui reçoit les informations. Ces deux colonnes peuvent nous permettre en les combinant à sockstat de savoir quel programme pourrait être un goulot d’étranglement.

La colonne state peut prendre différent état en voici les principaux

  • LISTEN : Le socket est en mode écoute
  • ESTABLISHED : Le socket est connecté et que sans doute des données transitent
  • SYN_RCVD, ACK, SYN+ACK : Indique qu’une connexion est en cours d’ouverture
  • LAST_ACK, FIN_WAIT1, FIN_WAIT2 : Il s’agit des différentes étapes d’une fermeture

Tout comme sockstat vous pouvez obtenir que les connexions qui sont actuellement connectées netstat -4 -bn

-4 est un raccourci pour -f inet

Etats des interfaces réseaux

netstat permet d’afficher l’état des interfaces réseaux. Pour toutes les interface en IPv4 seulement netstat -i -4 ou pour une interface en particulier netstat -I em0 -4

Name    Mtu Network       Address              Ipkts Ierrs Idrop    Opkts Oerrs  Coll
em0    1500 <Link#1>      52:54:00:12:34:11     9381    24     0     3174     0     0
em0       - 192.168.100.0 192.168.100.80        3833     -     -     3139     -     -

Nous pouvons voir des statistiques cumulatives depuis le dernier démarrage sous forme de colonnes

  • Name : nom de l’interface (un * après le nom indique une interface en état DOWN)
  • Mtu : Maximum transmission unit
  • Network : le réseau sur lequel est la machine
  • Adresse : adresse ip
  • Ipkts : Nombre de paquet reçu
  • Ierrs : Nombre de paquet entrant en erreurs
  • Idrop : Nombre de paquet supprimé
  • Opkts : Nombre de paquet émis
  • Oerrs : Nombre de paquet sortant en erreurs
  • Coll : Nombre de collisions

Nous pouvons grâce à ces informations déterminer, si une carte réseau pourrait être en cause dans un goulot d’étrangement. On peut aussi connaître en plus du nombre de paquet le nombre de bytes envoyé et reçue par interface pour cela nous devons ajouter l’option -b. netstat -I em0 -b

Name    Mtu Network       Address              Ipkts Ierrs Idrop     Ibytes    Opkts Oerrs     Obytes  Coll
em0    1500 <Link#1>      52:54:00:12:34:11    11704    29     0     818648     3648     0     593029     0
em0       - 192.168.100.0 192.168.100.80        4383     -     -     301555     3603     -     540709     -
Ici est ajouté deux colonnes
*Ibytes : pour le nombre d’octet reçu
*Obytes : pour le nombre d’octet envoyé

États des interfaces en live

Avoir les états des connexions depuis le démarrage du système, c’est bien mais peut pratique si on veut mettre en place un test pour déterminer la source du problème. Pour cela nous allons plutôt utiliser l’option -w suivi d’un délai entre chaque rafraîchissement netstat -w 3

          input        (Total)           output
   packets  errs idrops      bytes    packets  errs      bytes colls
         8     0     0        620          6     0        931     0
        11     0     0        949          9     0       1350     0
         8     0     0        637          7     0       1038     0
         4     0     0        323          4     0        601     0

Nous avons ici à peu près les mêmes informations que tout à l’heure concernant les paquets, les bytes, les erreurs et les collisions mais mises à 0 entre chaque affichage.

État des routes réseaux

Une route est un chemin que doit emprunter un paquet afin de pourvoir atteindre sa destination finale. La commande netstat permet d’affichage la table de routage grâce à l’option -r netstat -r -4 -n

Routing tables

Internet:
Destination        Gateway            Flags     Netif Expire
default            192.168.100.145    UGS         em0
127.0.0.1          link#2             UH          lo0
192.168.100.0/24   link#1             U           em0
192.168.100.80     link#1             UHS         lo0

Le retour se fait comme habitude sous forme de colonnes.

  • Destination : Comme on peut le comprendre facilement, il s’agit de la destination finale de cette route
  • Gateway : Le lien à utiliser pour atteindre cette destination
  • Flags : Il s’agit de drapeaux concaténés les uns aux autres, et permettant de définir l’état de la route
    • U : la route est utilisable
    • H : la destination de la route est un hôte (la fin de la route)
    • G : la destination nécessite de passer par une passerelle (Gateway) pour rejoindre un autre monde...
    • S : la route a été ajoutée manuellement
    • B : blackhole ne fait que rejeter le paquet
    • b : il s’agit d’une route de broadcast
    • D : route ajoutée de façon dynamique
    • W : la route a été clonée à partir d’une route pour le réseau local
  • Netif : Corresponds à l’interface à utiliser pour envoyer le paquet.
  • Expire : n’est utilisé que pour les paquets avec le flags W et indique leur durée de vie.

Les Statistiques avec netstat

netstat fournis énormément de statistique sur l’utilisation des différents interfaces, nous allons ici nous contenter des statistiques concernant le protocole tcp netstat -s -p tcp

Deux options intéressantes sont -z et -ss qui permettent pour le z de réinitialiser les compteurs et le double s de ne pas afficher les statistiques ayant pour valeur 0. netstat -s -z -p tcp

tcp

netstat -ss -p tcp

tcp:
	25 packets sent
		25 data packets (1700 bytes)
	38 packets received
		24 acks (for 1700 bytes)
		17 packets (708 bytes) received in-sequence
	24 segments updated rtt (of 18 attempts)
	17 correct ACK header predictions
	12 correct data packet header predictions

netstat et la mémoire

Netstat permet aussi l’affichage de la mémoire allouée et utilisée par le réseau.

1086/3039/4125 mbufs in use (current/cache/total)
1085/1541/2626/125050 mbuf clusters in use (current/cache/total/max)
1085/1518 mbuf+clusters out of packet secondary zone in use (current/cache)
0/98/98/62524 4k (page size) jumbo clusters in use (current/cache/total/max)
0/0/0/18525 9k jumbo clusters in use (current/cache/total/max)
0/0/0/10420 16k jumbo clusters in use (current/cache/total/max)
2441K/4233K/6675K bytes allocated to network (current/cache/total)
0/0/0 requests for mbufs denied (mbufs/clusters/mbuf+clusters)
0/0/0 requests for mbufs delayed (mbufs/clusters/mbuf+clusters)
0/0/0 requests for jumbo clusters delayed (4k/9k/16k)
0/0/0 requests for jumbo clusters denied (4k/9k/16k)
0 requests for sfbufs denied
0 requests for sfbufs delayed
270 requests for I/O initiated by sendfile

Ici netstat nous donne deux types d’informations

  • la quantité de mémoire utilisée
  • la quantité de requêtes qui ont échoué

Ici nous devons faire attention à la valeur du max et du current, qui doit absolument rester très inférieur à la valeur max, dans le cas contraire on est sans doute dans le cas d’un manque de mémoire qui pourrait créer un goulot d’étranglement.

Ici nous avons le nombre de mbuf clusters en cours d’utilisation à 1085 pour un maximum de 125050.

La deuxième chose à laquelle nous devons faire attention est le nombre de requêtes refusé ou différé qui doit rester strictement à 0 dans le cas contraire cela veut dire, que nous manquons de mémoire.

Ici nous n’avons aucun refus de création de mbufs supplémentaire

Voilà, la commande netstat permet d’avoir beaucoup d’informations. J’espère que ce billet vous aidera à comprendre un peu plus les différentes options et les sorties de ce programme.

La discussion continue ailleurs

URL de rétrolien : https://www.binsp.net/?trackback/41

Fil des commentaires de ce billet

Page top