私は、パケット キャプチャ/処理とホスト スタックに関する多くの技術文書を調べて、すべてを理解しようとしましたが、問題を抱えている領域がいくつかあります。誰かが助けてくれることを願っています。
tcpdump を実行していると仮定します。パケットが NIC のリング バッファ (物理 NIC メモリですよね?) からコピーされた後、すぐに mbuf に格納されますか? 次に、BPF は mbufからパケットのコピーを取得し、それが BPF バッファに格納されるため、同時に 2 つのコピーがメモリに存在しますか? 私は正確なプロセスを理解しようとしています。
それとも、より似ていますか: パケットは NIC から mbuf (ホストスタック処理用) と BPF の両方に擬似的に同時にコピーされますか?
パケットが場所として mbuf を取得する (mbuf を指す) ip/tcp 入力関数によってホスト スタック処理を通過すると、つまり、パケットがシステムに対してアドレス指定されていない場合、パケットは mbuf に格納されます。たとえば、ハブ経由でトラフィックを監視することによって受信されます。または SPAN/モニタ ポートである場合、パケットは破棄され、ホスト スタックに到達することはありません。
カーネルの「ボックス」内の NIC リング バッファー (RX/TX) を示す図/ユーザー空間から分離する図に出くわしたようです。 NIC。
リング バッファが NIC の物理メモリを参照すると仮定すると、デバイス ドライバが NIC リング バッファのサイズを決定し、物理的な制限を脇に置くのは正しいですか? たとえば、ドライバーを変更してバッファーを縮小できますか?
ありがとう!