Dimensione del buffer per l'acquisizione di pacchetti nello spazio del kernel?


16

Scorrendo la pagina man di tcpdump, sembra che il kernel possa rilasciare i pacchetti se il buffer è pieno. Mi stavo chiedendo se:

  1. quella dimensione è configurabile e / o
  2. dove posso vedere le dimensioni della mia distribuzione?

Dalla pagina man (per un facile riferimento):

pacchetti `` rilasciati dal kernel '' (questo è il numero di pacchetti che sono stati eliminati, a causa della mancanza di spazio nel buffer, dal meccanismo di acquisizione dei pacchetti nel sistema operativo in cui tcpdump è in esecuzione, se il sistema operativo riporta tali informazioni alle applicazioni; in caso contrario, verrà segnalato come 0).

Risposte:


27

Tcpdump ha l'opzione -Bper impostare la dimensione del buffer di acquisizione. Il valore viene quindi passato a libpcap (libreria utilizzata da tcpdump per eseguire l'acquisizione di pacchetti effettiva) tramite la pcap_set_buffer_size()funzione. Tcpdump manpage non specifica in quale unità la dimensione del buffer è specificata con -B, ma dalla fonte sembra che sia KiB.

la pagina di manuale di pcap_set_buffer_size()non specifica la dimensione del buffer predefinita (che viene usata se questa funzione non viene chiamata), ma di nuovo, dalla sorgente libpcap , questo sembra essere 2 MiB, almeno su Linux (ma molto probabilmente dipende dal sistema).

Per quanto riguarda il buffering e il drop dei pacchetti, dovresti anche prestare attenzione all'impostazione del -sparametro snaplen ( ) di conseguenza. 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.

Ciò significa che con dimensioni fisse del buffer, è possibile aumentare il numero di pacchetti che si adattano al buffer (e quindi non vengono eliminati) diminuendo la dimensione degli snaplen.


2
So che questo è un vecchio thread (e mi piace questa risposta), ma quando citi fonti su GitHub, ti preghiamo di indicare il commit corrente (poiché il ramo master può cambiare), ad esempio: github.com/mcr/tcpdump/blob/ ... .
bruno nery,

@brunonery Questo non è un problema con i siti Stack Exchange, in cui incoraggiamo effettivamente gli utenti a migliorare le risposte, anche se il post stesso è piuttosto vecchio. (A differenza dei forum in cui è disapprovato.)
Léo Lam,

risolti i collegamenti obsoleti
Eli Heady,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.