
Ich habe mich gefragt, warum tcpdump eine magische Zahl 262144
als Standard-Snapshot-Länge hat?
--snapshot-length=snaplen Snarf snaplen Bytes an Daten aus jedem Paket anstatt der Standardeinstellung von 262144 Bytes. Pakete, die aufgrund eines begrenzten Snapshots abgeschnitten wurden, werden in der Ausgabe mit „[|proto]“ gekennzeichnet, wobei proto der Name der Protokollebene ist, auf der die Abschneidung erfolgt ist. Beachten Sie, dass das Erstellen größerer Snapshots sowohl die Zeit erhöht, die zum Verarbeiten von Paketen benötigt wird, als auch effektiv die Menge an Paketpufferung verringert. Dies kann dazu führen, dass Pakete verloren gehen. Beachten Sie auch, dass das Erstellen kleinerer Snapshots Daten von Protokollen über der Transportschicht verwirft, wodurch möglicherweise wichtige Informationen verloren gehen. NFS- und AFS-Anfragen und -Antworten sind beispielsweise sehr groß und viele Details sind nicht verfügbar, wenn eine zu kurze Snapshot-Länge ausgewählt wird. Wenn Sie die Snapshot-Größe unter den Standardwert reduzieren müssen, sollten Sie „snaplen“ auf die kleinste Zahl beschränken, mit der die gewünschten Protokollinformationen erfasst werden. Wenn Sie „snaplen“ auf 0 setzen, wird der Standardwert 262144 verwendet, um die Abwärtskompatibilität mit neueren Versionen von „tcpdump“ zu gewährleisten.
Referenz:manpage
Antwort1
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
Nicht viel. Linux-Loopback ist nicht durch Hardware-Frames begrenzt und hat daher eine ziemlich große maximale Größe von 64 KB. Andere Pakete können sogar noch größer sein, also ein paar Zweierpotenzen bis zu 256 KB.