5

私は、パケット キャプチャ/処理とホスト スタックに関する多くの技術文書を調べて、すべてを理解しようとしましたが、問題を抱えている領域がいくつかあります。誰かが助けてくれることを願っています。

tcpdump を実行していると仮定します。パケットが NIC のリング バッファ (物理 NIC メモリですよね?) からコピーされた後、すぐに mbuf に格納されますか? 次に、BPF は mbufからパケットのコピーを取得し、それが BPF バッファに格納されるため、同時に 2 つのコピーがメモリに存在しますか? 私は正確なプロセスを理解しようとしています。

それとも、より似ていますか: パケットは NIC から mbuf (ホストスタック処理用) と BPF の両方に擬似的に同時にコピーされますか?

パケットが場所として mbuf を取得する (mbuf を指す) ip/tcp 入力関数によってホスト スタック処理を通過すると、つまり、パケットがシステムに対してアドレス指定されていない場合、パケットは mbuf に格納されます。たとえば、ハブ経由でトラフィックを監視することによって受信されます。または SPAN/モニタ ポートである場合、パケットは破棄され、ホスト スタックに到達することはありません。

カーネルの「ボックス」内の NIC リング バッファー (RX/TX) を示す図/ユーザー空間から分離する図に出くわしたようです。 NIC。

リング バッファが NIC の物理メモリを参照すると仮定すると、デバイス ドライバが NIC リング バッファのサイズを決定し、物理的な制限を脇に置くのは正しいですか? たとえば、ドライバーを変更してバッファーを縮小できますか?

ありがとう!

4

1 に答える 1

2

ETHER_BPF_MTAP マクロは、mbuf 形式のパケットを除く bpf_mtap() を呼び出し、bpf はこの mbuf から内部バッファーにデータをコピーします。

ただし、mbufs は外部ストレージを使用できるため、NIC リング バッファーから mbuf へのコピーがある場合とない場合があります。Mbufs は、実際にパケット データを格納することも、受信バッファを参照するヘッダーとして機能することもできます。

また、現在の NIC は小さな (128/96/... Kb) オンボード メモリを FIFO にのみ使用し、すべてのデータをメイン メモリのリング バッファに即座に転送します。したがって、デバイスドライバーでバッファーサイズを実際に調整できます。

于 2011-09-26T10:30:15.753 に答える