回答:
tcpdumpのマニュアルから:
パケットが「カーネルによってドロップ」(これは、OSがアプリケーションにその情報を報告する場合、tcpdumpが実行されているOSのパケットキャプチャメカニズムによって、バッファスペースの不足によりドロップされたパケットの数です。そうでない場合は、0として報告されます。
ちょっとした説明:
tcpdump
ネットワークインタフェースを通過キャプチャ生のパケット。パケットは、コマンドラインで指定されたルールに従って解析およびフィルタリングする必要があり、時間がかかるため、着信パケットは処理のためにバッファリング(キュー)する必要があります。パケットが多すぎてバッファに保存されることもありますが、処理よりも速く保存されるため、最終的にバッファの空き容量がなくなるため、カーネルはバッファに空き領域ができるまでパケットをすべて削除します。
次のように-B
(--buffer-size
)オプションを使用して、バッファサイズを増やすことができます。
tcpdump -B 4096 ....
サイズはキロバイト単位で指定されるため、上記の行はバッファーサイズを4MBに設定します。
tcpdump -B 4096
。
によるとman tcpdump
:
カーネルによってドロップされたパケット(これは、tcpdumpが実行されているOSのパケットキャプチャメカニズムにより、OSがその情報をアプリケーションに報告する場合、バッファースペースの不足によりドロップされたパケットの数です。そうでない場合は、 0として報告されます。
カーネルは、キャプチャしたパケットを固定サイズのキャプチャバッファに入れます。場合はtcpdump
十分にすぐにそのバッファを空にしない、カーネルがバッファ内の古いパケットを上書きし、それに応じてインクリメントを開始しますドロップカウンターを。そのカウンターの値は、「カーネルによるドロップ」として表示されるものです。
ところで、あなたはすることができますキャプチャバッファのサイズを変更:渡しKiBのサイズのオプションを選択します。tcpdump
-B
マニュアルページの説明に加えて、パケットがカーネルによってドロップされる可能性がある追加の理由があるようです。tcpdump
ネットワーク上の唯一のトラフィックが1秒あたりPRBSの512Bパケット1つであった場所から、100%のパケットドロップが発生していました。明らかに、バッファスペースの説明はここでは意味をなしません-カーネルは0.5kiB / sを処理できると思います。
私のディストリビューション(Ubuntu 14.04)に付属していたものは、テストパケットが気に入らなかったリンクレイヤーで何らかのスマートフィルタリングを行っていた可能性があります。私の回避策は、次のように新しいネットワーク名前空間を作成することでした。
sudo -i
ip netns add debug
ip link set dev eth0 netns debug
ip netns exec debug bash
ifconfig eth0 1.2.3.4 up
インナーnetns
シェルでは、以前に問題を引き起こしていたOSプロセスtcpdump
はすべて見えなくなり、予想されるすべてのパケットが表示されます。