Puffergröße für die Erfassung von Paketen im Kernelraum?

16

Beim Durchblättern der Manpage von tcpdumpscheint der Kernel die Pakete verwerfen zu können, wenn der Puffer voll ist. Ich habe mich gefragt, ob:

  1. Diese Größe ist konfigurierbar und / oder
  2. wo kann ich die größe für meine distro sehen?

Auf der Manpage (zum einfachen Nachschlagen):

Pakete, die vom Kernel verworfen wurden (dies ist die Anzahl der Pakete, die aufgrund des fehlenden Pufferspeichers vom Paketerfassungsmechanismus im Betriebssystem, auf dem tcpdump ausgeführt wird, verworfen wurden, wenn das Betriebssystem diese Informationen an Anwendungen meldet). wenn nicht, wird es als 0) gemeldet.

Anon
quelle

Antworten:

27

Tcpdump hat die Option -B, die Größe des Erfassungspuffers festzulegen. Der Wert wird dann per pcap_set_buffer_size()Funktion an libpcap (Bibliothek, die von tcpdump für die eigentliche Paketerfassung verwendet wird) übergeben . Die Manpage Tcpdump gibt nicht an, in welchen Einheiten die Puffergröße mit -B angegeben wird, aber aus der Quelle geht hervor, dass es sich um KiB handelt.

Die manuelle Seite von pcap_set_buffer_size()gibt keine Standardpuffergröße an (die verwendet wird, wenn diese Funktion nicht aufgerufen wird), aber aus der libpcap-Quelle scheint dies, zumindest unter Linux, 2 MiB zu sein (dies ist jedoch höchstwahrscheinlich systemabhängig).

Im Hinblick auf das Puffern und Löschen von Paketen sollten Sie auch darauf achten, den -sParameter snaplen ( ) entsprechend einzustellen . 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.

Dies bedeutet, dass Sie mit einer festen Puffergröße die Anzahl der Pakete erhöhen können, die in den Puffer passen (und daher nicht verworfen werden), indem Sie die Snaplen-Größe verringern.

Petr Uzel
quelle
2
Ich weiß, dass dies ein alter Thread ist (und diese Antwort gefällt mir), aber wenn Sie Quellen auf GitHub zitieren, verweisen Sie bitte auf das aktuelle Commit (da sich der Master-Zweig ändern kann), zB: github.com/mcr/tcpdump/blob/ ... .
Bruno Nery
@brunonery Das ist kein Problem bei Stack Exchange-Sites, bei denen wir Benutzer dazu ermutigen, die Antworten zu verbessern, auch wenn der Beitrag selbst ziemlich alt ist. (Im Gegensatz zu Foren, in denen es verpönt ist.)
Léo Lam
Eli Heady am