Linux
理解linux中的“前進”
linux的哪個部分負責介面之間的“轉發”流量?
我知道“ /proc/sys/net/ipv4/ip_forward ”,但作業系統、核心或模組的哪個部分實際上正在檢查此設置並決定是否執行轉發?
核心是否坐在那裡並根據路由表將任何接收到的不是發往這台機器的數據包轉發到另一個介面*?*
這是一個非常基本的問題,我一直想深入了解。
linux的哪個部分負責介面之間的“轉發”流量?
IP 網路堆棧。所有 IP 協議——UDP、TCP 等——都使用相同的基本路由工具和行為。IPv6 也是如此,它的實現略有不同,但架構基本相同。
核心是否坐在那裡並根據路由表將任何接收到的不是發往這台機器的數據包轉發到另一個介面?
是的。除了“無意識”部分,您的意思是說“按設計”。
這個過程很簡單:當一台確認 IP 規範的機器收到一個數據包時,它會做出一些非常簡單的決定;基本流程是:
- 驗證這是一個健全的數據包。
- 檢查它是否發往本地IP地址,如果是,則在本地發送。
- 從路由表中查找下一跳。
- 將數據包發送到下一跳,或發送“無法傳遞”錯誤。
該
ip_forward(...)
方法作為整個算法的一部分被呼叫,並且與您想像的一樣簡單。從根本上說,IP 是一個非常非常簡單的協議。