我一直在經歷很多關於數據包捕獲/處理和主機堆棧的技術文檔,這些文檔試圖理解這一切,希望有幾個地方我很困擾有人可以幫忙。FreeBSD:有關NIC環形緩衝區,mbufs和bpf緩衝區的問題
假設您正在運行tcpdump: 從NIC的環形緩衝區(物理網卡內存權限?) 中複製數據包後,它是否會立即存儲到mbuf中?然後BPF從 mbuf獲得數據包的副本,然後將其存儲在BPF緩衝區中,因此同時在內存中有兩個副本?我試圖瞭解確切的過程。
還是更像是:數據包從網卡複製到mbuf(用於主機堆棧處理)和僞同步?
一旦數據包通過以mbuf作爲位置(指向mbuf)的ip/tcp輸入函數經過主機堆棧處理,即數據包存儲在mbuf中,如果數據包未針對系統尋址,通過集線器或SPAN/Monitor端口監控流量,數據包將被丟棄,並永遠不會進入主機堆棧。
我似乎遇到過在內核「盒子」/從用戶空間中分離它的NIC環形緩衝區(RX/TX)的圖表,這讓我第二次猜測環形緩衝區是否實際分配的系統內存不同於NIC上的物理內存。
假設環形緩衝區是指NIC的物理內存,設備驅動程序確定NIC環形緩衝區的大小是否正確,是否將物理限制放在一邊呢?例如我可以通過修改驅動程序來縮小緩衝區嗎?
謝謝!