Interrumpí tcpdump
con Ctrl+ Cy obtuve este resumen total:
579204 packets captured
579346 packets received by filter
142 packets dropped by kernel
¿Qué son los "paquetes descartados por el núcleo"? ¿Por qué pasa eso?
Interrumpí tcpdump
con Ctrl+ Cy obtuve este resumen total:
579204 packets captured
579346 packets received by filter
142 packets dropped by kernel
¿Qué son los "paquetes descartados por el núcleo"? ¿Por qué pasa eso?
Respuestas:
Del manual de tcpdump:
paquetes `` descartados por el núcleo '' (este es el número de paquetes que fueron descartados, debido a la falta de espacio en el búfer, por el mecanismo de captura de paquetes en el sistema operativo en el que tcpdump se está ejecutando, si el sistema operativo informa esa información a las aplicaciones; si no, se informará como 0).
Un poco de explicación:
Los tcpdump
captura paquetes primas que pasan a través de una interfaz de red. Los paquetes deben analizarse y filtrarse de acuerdo con las reglas especificadas por usted en la línea de comando, y eso lleva algo de tiempo, por lo que los paquetes entrantes deben almacenarse (en cola) para su procesamiento. A veces hay demasiados paquetes, se guardan en un búfer, pero se guardan más rápido de lo procesado, por lo que finalmente el búfer se queda sin espacio, por lo que el núcleo descarta todos los paquetes adicionales hasta que queda algo de espacio libre en el búfer.
Puede aumentar el tamaño del búfer con la opción -B
( --buffer-size
) de esta manera:
tcpdump -B 4096 ....
Tenga en cuenta que el tamaño se especifica en kilobytes, por lo que la línea anterior establece el tamaño del búfer en 4 MB.
tcpdump -B 4096
.
Una cosa más a tener en cuenta / probar es que tcpdump
puede pasar mucho tiempo haciendo consultas DNS para resolver las direcciones IP de los nombres de dominio. Si no los necesita, intente -n
colocar la bandera (sin búsquedas). p.ej:
tcpdump -n port 80
-nn -B 4096
me permitió llegar0 packets dropped by kernel
De acuerdo a man tcpdump
:
paquetes descartados por el núcleo (este es el número de paquetes que fueron descartados, debido a la falta de espacio en el búfer, por el mecanismo de captura de paquetes en el sistema operativo en el que tcpdump se está ejecutando, si el sistema operativo informa esa información a las aplicaciones; si no, será reportado como 0).
El núcleo coloca los paquetes capturados en un búfer de captura de tamaño fijo . Si tcpdump
no vacía ese búfer lo suficientemente rápido, el núcleo comenzará a sobrescribir los paquetes antiguos en el búfer e incrementará correspondientemente el contador descartado . El valor de ese contador es lo que ves como "eliminado por el núcleo".
Por cierto, puede cambiar el tamaño del búfer de captura : pase tcpdump
la -B
opción con un tamaño KiB.
Además de lo que dice la página del manual, parece haber alguna razón adicional por la cual el núcleo puede descartar los paquetes. Estaba experimentando una caída del paquete del 100% desde tcpdump
donde el único tráfico en la red era un paquete de 512B de PRBS por segundo. Claramente, la explicación del espacio del búfer no tiene sentido aquí: creo que el núcleo puede manejar 0.5kiB / s.
Algo que vino junto con mi distribución (Ubuntu 14.04) puede haber estado haciendo algún tipo de filtrado inteligente en la capa de enlace que no le gustaba a mis paquetes de prueba. Mi solución fue crear un nuevo espacio de nombres de red de la siguiente manera:
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
En el netns
shell interno , los procesos del sistema operativo que antes causaban problemas están fuera de la imagen y tcpdump
me muestran todos los paquetes que espero ver.