カーネル空間でキャプチャされたパケットのバッファサイズは何ですか?

カーネル空間でキャプチャされたパケットのバッファサイズは何ですか?

マニュアルページを参照すると、tcpdumpバッファがいっぱいになるとカーネルがパケットを破棄できるようです。次のことを知りたいです。

  1. サイズは設定可能です。
  2. 展開規模はどこで確認できますか?

マニュアルページで(参照しやすいように):

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

ベストアンサー1

Tcpdump はオプションで-Bキャプチャバッファサイズを設定できます。その後、この値はこの関数を介してlibpcap(実際のパケットキャプチャを実行するためにtcpdumpによって使用されるライブラリ)に渡されます  pcap_set_buffer_size()。  tcpdump(1)(tcpdumpのマニュアルページ)は、キャプチャバッファサイズがKiB(1024バイト)で指定されていることを示しています。 源泉これを確認しているようです。

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

-sパケットのバッファリングと廃棄に関連してsnaplen()パラメータを適切に設定するように注意する必要があります。 ~からtcpdump(1):

-s snaplen
--snapshot-length=snaplen

    スナフスナッププレンデフォルトの65535 1バイトではなく、パケットあたりのデータバイト数。制限されたスナップショットのため、切り捨てられたパケットは出力に「[]」と表示されます。|protoproto切り捨てが発生するプロトコルレベルの名前。

     

    より大きなスナップショットを撮ると、パケットを処理するのに必要な時間が増えるだけでなく、パケットバッファリングの量も効果的に減少します。これにより、パケット損失が発生する可能性があります。
               ︙
            ...制限する必要がありますスナッププレン関心のあるプロトコル情報をキャプチャできる最小数で表示されます。設定スナッププレン0に設定すると、以前のバージョンとの互換性のためにデフォルトの65535 1tcpdumpに設定されます。

    ________________
    1  最新版のマニュアルページには、65535の代わりに262144があります(2つの場所)。

つまり、固定バッファサイズを使用すると、バッファサイズを減らしてバッファに収まる(したがって廃棄されない)パケット数を増やすことができます。 snaplenサイズ。

おすすめ記事