¿Por qué tcpdump tiene 262144 como tamaño de captura predeterminado?

¿Por qué tcpdump tiene 262144 como tamaño de captura predeterminado?

Me preguntaba por qué tcpdump tiene un número mágico 262144como longitud de instantánea predeterminada.

--snapshot-length=snaplen Snarf captura bytes de datos de cada paquete en lugar del valor predeterminado de 262144 bytes. Los paquetes truncados debido a una instantánea limitada se indican en la salida con ``[|proto]'', donde proto es el nombre del nivel de protocolo en el que se produjo el truncamiento. Tenga en cuenta que tomar instantáneas más grandes aumenta la cantidad de tiempo que lleva procesar los paquetes y, efectivamente, disminuye la cantidad de almacenamiento en búfer de los paquetes. Esto puede provocar la pérdida de paquetes. Tenga en cuenta también que tomar instantáneas más pequeñas descartará datos de protocolos por encima de la capa de transporte, lo que perderá información que puede ser importante. Las solicitudes y respuestas de NFS y AFS, por ejemplo, son muy grandes y muchos de los detalles no estarán disponibles si se selecciona una instantánea de longitud demasiado corta. Si necesita reducir el tamaño de la instantánea por debajo del valor predeterminado, debe limitar Snaplen al número más pequeño que capture la información del protocolo que le interesa. Configurar Snaplen en 0 lo establece en el valor predeterminado de 262144, para compatibilidad con versiones anteriores recientes. versiones de tcpdump.

Referencia:página de manual

Respuesta1

https://github.com/the-tcpdump-group/tcpdump/blob/tcpdump-4.9/netdissect.h

/*
 * Maximum snapshot length.  This should be enough to capture the full
 * packet on most network interfaces.
 *
 *
 * Somewhat arbitrary, but chosen to be:
 *
 *    1) big enough for maximum-size Linux loopback packets (65549)
 *       and some USB packets captured with USBPcap:
 *
 *           http://desowin.org/usbpcap/
 *
 *       (> 131072, < 262144)
 *
 * and
 *
 *    2) small enough not to cause attempts to allocate huge amounts of
 *       memory; some applications might use the snapshot length in a
 *       savefile header to control the size of the buffer they allocate,
 *       so a size of, say, 2^31-1 might not work well.
 *
 * XXX - does it need to be bigger still?
 */
#define MAXIMUM_SNAPLEN 262144

No mucho. El loopback de Linux no está limitado por marcos de hardware y por eso tiene un tamaño máximo bastante grande de 64k. Otros paquetes pueden ser incluso más grandes, por lo que pueden aumentar un par de potencias de dos a 256 k.

información relacionada