¿Tamaño de búfer para capturar paquetes en el espacio del kernel?

16

Al pasar por la página de manual de tcpdump, parece que el núcleo puede descartar los paquetes si el búfer está lleno. Me preguntaba si:

  1. ese tamaño es configurable y / o
  2. ¿Dónde puedo ver el tamaño de mi distribución?

Desde la página de manual (para referencia fácil):

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 se está ejecutando tcpdump, si el sistema operativo informa esa información a las aplicaciones; si no, se informará como 0).

Luego
fuente

Respuestas:

27

Tcpdump tiene la opción -Bde establecer el tamaño del búfer de captura. El valor se pasa a libpcap (biblioteca utilizada por tcpdump para realizar la captura de paquetes real) a través de la pcap_set_buffer_size()función. La página de manual de Tcpdump no especifica en qué unidades se especifica el tamaño del búfer con -B, pero desde el origen parece que es KiB.

la página del manual pcap_set_buffer_size()no especifica el tamaño predeterminado del búfer (que se usa si no se llama a esta función), pero nuevamente, desde la fuente libpcap , esto parece ser 2 MiB, al menos en Linux (pero probablemente dependa del sistema).

Con respecto al almacenamiento en búfer y la caída de paquetes, también debe prestar atención a la configuración del parámetro snaplen ( -s) en consecuencia. man tcpdump:

-s     Snarf  snaplen bytes of data from each packet rather than the
default of 65535 bytes.  Packets truncated because of a limited snapshot
are indicated in the output with ``[|proto]'', where proto is the name of
the protocol level at which the truncation has occurred. Note that  taking
larger  snapshots both increases the amount of time it  takes  to
process packets and, effectively, decreases the amount of packet buffering.
This may cause packets to be lost. You should limit snaplen to the
smallest number that will capture the protocol information you're
interested in. Setting snaplen to 0 sets it to the default of 65535, for
back-wards compatibility with recent older versions of tcpdump.

Esto significa que con un tamaño de búfer fijo, puede aumentar la cantidad de paquetes que caben en el búfer (y, por lo tanto, no se descartan) disminuyendo el tamaño de la instantánea.

Petr Uzel
fuente
2
Sé que este es un hilo antiguo (y me gusta esta respuesta), pero cuando cites fuentes en GitHub, señala la confirmación actual (ya que la rama maestra puede cambiar), por ejemplo: github.com/mcr/tcpdump/blob/ ... .
bruno nery
@brunonery Eso no es un problema con los sitios de Stack Exchange, donde en realidad alentamos a los usuarios a mejorar las respuestas, incluso si la publicación en sí es bastante antigua. (A diferencia de los foros donde está mal visto).
Léo Lam
reparó los enlaces obsoletos
Eli Heady