數據包如何流經核心
當談到包過濾/管理時,我從來不知道核心內部發生了什麼。有很多不同的工具作用於數據包,無論是來自使用者空間(修改核心空間子系統)還是直接在核心空間。
每個工具是否有任何地方記錄與其他工具的互動,或者它們在哪裡起作用。我覺得應該在某個地方有一個圖表,說明技術不夠的人去閱讀核心程式碼的情況。
所以這是我的例子:
在我的一個網路介面上收到一個數據包,我有:
- UFW
- iptables
- IPv4 子系統(路由)
- IPV
- eBPF
好的,所以我知道 UFW 是 iptables 的前端,而 iptables 是 Netfiler 的前端。所以現在我們在核心空間,我們的工具是 Netfiler、IPV、IPv4 和 eBPF。
同樣,Netfilter 和 IPv4 子系統之間的互動很容易找到,因為這些都是非常舊的(不是壞的)子系統,所以缺少文件會很奇怪。此圖是互動的概述:
但是 IPV 和 eBPF 呢?當這兩個在核心中時,核心子系統對數據包起作用的實際順序是什麼?
我總能找到一些了不起的人,他們試圖深入內心並幫助他人理解,例如,http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.filter_rules.html
但這不應該以更正式的方式記錄嗎?我不是在這裡尋找關於這些子模組如何互動的解釋,我知道我可以通過搜尋自己找到它。我的問題更籠統,為什麼沒有官方文件實際上試圖解釋這些核心子系統內部發生的事情。它是否記錄在我不知道的某個地方?有什麼理由不嘗試解釋這些工具嗎?
如果我沒有任何意義,我道歉。我剛開始學習這些東西。
我認識的大多數使用 Linux 網路堆棧的人都使用下圖(您可以在 Wikipedia上找到CC BY-SA 3.0 許可)。
如您所見,除了 netfilter 掛鉤之外,它還記錄了 XFRM 處理點和一些eBPF 掛鉤點。tc eBPF 程序將作為入口和出口 qdiscs 的一部分執行。此處未記錄除 XDP 和 tc 之外的 BPF 網路連接點(例如,在套接字級別)。
據我所知,IPVS 是建立在 netfilter 之上的,所以它不會出現在這裡。