Ukuran penyangga untuk menangkap paket dalam ruang kernel?

16

Memasuki halaman manual tcpdump, tampaknya kernel dapat menjatuhkan paket jika buffer penuh. Saya bertanya-tanya apakah:

  1. ukuran itu dapat dikonfigurasi dan / atau
  2. Di mana saya bisa melihat ukuran untuk distro saya?

Dari halaman manual (untuk referensi mudah):

paket `` Drop by kernel '' (ini adalah jumlah paket yang dijatuhkan, karena kurangnya ruang buffer, oleh mekanisme paket capture di OS di mana tcpdump berjalan, jika OS melaporkan informasi itu ke aplikasi; jika tidak, itu akan dilaporkan sebagai 0).

Segera
sumber

Jawaban:

27

Tcpdump memiliki opsi -Buntuk mengatur ukuran buffer capture. Nilai tersebut kemudian diteruskan ke libpcap (pustaka yang digunakan oleh tcpdump untuk melakukan pengambilan paket aktual) melalui pcap_set_buffer_size()fungsi. Tcpdump manpage tidak menentukan dalam unit apa ukuran buffer ditentukan dengan -B, tetapi dari sumber sepertinya itu adalah KiB.

halaman manual pcap_set_buffer_size()tidak menentukan ukuran buffer standar (yang digunakan jika fungsi ini tidak dipanggil), tetapi sekali lagi, dari sumber libpcap , ini tampaknya 2 MiB, setidaknya di linux (tetapi kemungkinan besar tergantung pada sistem).

Sehubungan dengan buffering dan dropping paket, Anda juga harus memperhatikan pengaturan -sparameter snaplen ( ) yang sesuai. 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.

Ini berarti bahwa dengan ukuran buffer tetap, Anda dapat meningkatkan jumlah paket yang masuk ke buffer (dan dengan demikian tidak dijatuhkan) dengan mengurangi ukuran snaplen.

Petr Uzel
sumber
2
Saya tahu ini adalah utas lama (dan saya suka jawaban ini), tetapi ketika Anda mengutip sumber di GitHub, tunjukkan komit saat ini (karena cabang master dapat berubah), misalnya: github.com/mcr/tcpdump/blob/ ... .
bruno nery
@brunonery Itu bukan masalah dengan situs Stack Exchange, di mana kami benar-benar mendorong pengguna untuk meningkatkan jawaban, bahkan jika posting itu sendiri sudah cukup lama. (Tidak seperti forum di mana ia disukai.)
Léo Lam
memperbaiki tautan yang sudah ketinggalan zaman
Eli Heady