J'ai interrompu tcpdump
avec Ctrl+ Cet obtenu ce résumé total:
579204 packets captured
579346 packets received by filter
142 packets dropped by kernel
Quels sont les "paquets abandonnés par le noyau"? Pourquoi cela se produit-il?
J'ai interrompu tcpdump
avec Ctrl+ Cet obtenu ce résumé total:
579204 packets captured
579346 packets received by filter
142 packets dropped by kernel
Quels sont les "paquets abandonnés par le noyau"? Pourquoi cela se produit-il?
Réponses:
Du manuel de tcpdump:
paquets `` abandonnés par le noyau '' (c'est le nombre de paquets qui ont été abandonnés, en raison d'un manque d'espace tampon, par le mécanisme de capture de paquets dans le système d'exploitation sur lequel tcpdump s'exécute, si le système d'exploitation communique ces informations aux applications; sinon, il sera signalé comme 0).
Un peu d'explication:
Les tcpdump
paquets bruts capturés transitant par une interface réseau. Les paquets doivent être analysés et filtrés selon les règles que vous avez spécifiées dans la ligne de commande, ce qui prend un certain temps. Par conséquent, les paquets entrants doivent être mis en mémoire tampon (en file d'attente) pour être traités. Parfois, il y a trop de paquets, ils sont sauvegardés dans un tampon, mais ils sont sauvegardés plus rapidement qu'ils ne sont traités, de sorte que le tampon finit par manquer d'espace. Le noyau supprime tous les paquets supplémentaires jusqu'à ce qu'il y ait un peu d'espace libre dans le tampon.
Vous pouvez augmenter la taille de la mémoire tampon avec l' option -B
( --buffer-size
) comme ceci:
tcpdump -B 4096 ....
Notez que la taille est spécifiée en kilo-octets. La ligne ci-dessus définit donc la taille de la mémoire tampon à 4 Mo.
tcpdump -B 4096
.
Une autre chose à considérer / essayer est la tcpdump
possibilité de passer beaucoup de temps à faire des requêtes DNS pour résoudre les adresses IP en noms de domaine. Si vous n'en avez pas besoin, essayez de lancer l' -n
indicateur (pas de recherche). par exemple:
tcpdump -n port 80
-nn -B 4096
m'a permis d'obtenir0 packets dropped by kernel
Selon man tcpdump
:
paquets abandonnés par le noyau (c'est le nombre de paquets qui ont été abandonnés, en raison d'un manque d'espace tampon, par le mécanisme de capture de paquets du système d'exploitation sur lequel tcpdump s'exécute, si le système d'exploitation communique ces informations aux applications; sinon, sera signalé comme 0).
Le noyau place les paquets capturés dans un tampon de capture de taille fixe . S'il tcpdump
ne vide pas assez rapidement le tampon, le noyau commence à écraser les anciens paquets dans le tampon et à incrémenter le compteur supprimé . La valeur de ce compteur correspond à ce que vous voyez comme "supprimé par le noyau".
Soit dit en passant, vous pouvez redimensionner le tampon de capture : Passez tcpdump
l’ -B
option avec une taille KiB.
Outre ce que dit la page de manuel, il semble exister une raison supplémentaire pour laquelle des paquets peuvent être supprimés par le noyau. Je tcpdump
subissais une perte de paquets de 100%, alors que le seul trafic sur le réseau consistait en un paquet de 512 Go de PRBS par seconde. Il est clair que l'explication de l'espace tampon n'a pas de sens ici - je pense que le noyau peut gérer 0,5 ko / s.
Quelque chose qui est venu avec ma distribution (Ubuntu 14.04) a peut-être fait une sorte de filtrage intelligent au niveau de la couche liaison qui n'aimait pas mes paquets de test. Ma solution de contournement consistait à créer un nouvel espace de noms réseau, comme suit:
sudo -i
ip netns add debug
ip link set dev eth0 netns debug
ip netns exec debug bash
ifconfig eth0 1.2.3.4 up
Dans la netns
coque interne , tous les processus de système d'exploitation qui posaient problème auparavant sont absents et tcpdump
me montrent tous les paquets que je m'attends à voir.