カーネルスペースでパケットをキャプチャするためのバッファサイズ


16

のmanページをtcpdump見ると、バッファがいっぱいになるとカーネルがパケットをドロップする可能性があります。私は疑問に思っていた:

  1. そのサイズは構成可能および/または
  2. ディストリビューションのサイズはどこで確認できますか?

manページから(簡単に参照できるように):

パケットが「カーネルによってドロップ」(これは、OSがアプリケーションにその情報を報告する場合、tcpdumpが実行されているOSのパケットキャプチャメカニズムによって、バッファスペースの不足によりドロップされたパケットの数です。そうでない場合は、0として報告されます。

回答:


27

Tcpdumpには、-Bキャプチャバッファサイズを設定するオプションがあります。次に、値はpcap_set_buffer_size()関数を介してlibpcap(実際のパケットキャプチャを行うためにtcpdumpで使用されるライブラリ)に渡されます。Tcpdumpのマンページでは、-Bでバッファサイズを指定する単位を指定していませんが、ソースからはKiBのようです。

のマニュアルページでpcap_set_buffer_size()はデフォルトのバッファサイズ(この関数が呼び出されない場合に使用されます)は指定されていませんが、libpcap sourceからは、少なくともLinuxでは2 MiBのようです(ただし、システムに依存している可能性が高い)。

パケットのバッファリングとドロップに関しては、-sそれに応じてsnaplen()パラメータを設定することにも注意する必要があります。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.

これは、バッファサイズが固定されている場合、snaplenサイズを小さくすることで、バッファに収まる(したがってドロップされない)パケット数を増やすことができることを意味します。


2
私はこれが古いスレッドであることを知っています(そして私はこの答えが好きです)が、GitHubでソースを引用するときは、現在のコミットを指してください(マスターブランチが変更される可能性があるため)、例えば:github.com/mcr/tcpdump/blob/ …
ブルーノネリー

@brunonery Stack Exchangeサイトでは問題ではありません。実際には、投稿自体がかなり古い場合でも、ユーザーが回答を改善することを推奨しています。(眉をひそめているフォーラムとは異なります。)
レオラム

古くなったリンクを修正
Eli Heady
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.