Por que o tcpdump tem 262144 como tamanho de captura padrão?

Por que o tcpdump tem 262144 como tamanho de captura padrão?

Eu queria saber por que o tcpdump tem um número mágico 262144como comprimento padrão do instantâneo?

--snapshot-length=snaplen Snarf snaplen bytes de dados de cada pacote em vez do padrão de 262144 bytes. Pacotes truncados devido a um snapshot limitado são indicados na saída com ``[|proto]'', onde proto é o nome do nível de protocolo no qual o truncamento ocorreu. Observe que tirar instantâneos maiores aumenta o tempo necessário para processar pacotes e, efetivamente, diminui a quantidade de buffer de pacotes. Isso pode causar a perda de pacotes. Observe também que tirar snapshots menores descartará dados de protocolos acima da camada de transporte, o que perderá informações que podem ser importantes. As solicitações e respostas NFS e AFS, por exemplo, são muito grandes e muitos dos detalhes não estarão disponíveis se um tamanho de snapshot muito curto for selecionado. Se precisar reduzir o tamanho do instantâneo abaixo do padrão, você deve limitar o snaplen ao menor número que irá capturar as informações do protocolo de seu interesse. Definir o snaplen como 0 define-o para o padrão de 262144, para compatibilidade com versões anteriores mais recentes. versões do tcpdump.

Referência:página de manual

Responder1

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

Não há muito para isso. O loopback do Linux não é limitado por quadros de hardware e, portanto, tem um tamanho máximo bastante grande de 64k. Outros pacotes podem ser ainda maiores, aumentando algumas potências de dois para 256k.

informação relacionada