在 Linux 內核的網絡協議棧中,數據包的高效處理依賴于一系列精心設計的數據結構。這些結構體不僅需要存儲網絡數據的元信息,還需支持復雜的協議邏輯(如路由、分片、安全策略等)。本文聚焦兩個核心結構體 struct inet_skb_parm
和 struct ip_options
,解析它們的設計原理、功能場景及其在協議棧中的協同作用。
一、inet_skb_parm
:IPv4 數據包處理的元數據中心
1. 設計背景
在 Linux 內核中,每個網絡數據包均通過 sk_buff
(Socket Buffer)結構體表示。sk_buff
的 Control Buffer(skb->cb
) 是各協議層(如 L2/L3/L4)存儲私有數據的區域。inet_skb_parm
作為 IPv4 層的控制緩沖區,用于記錄數據包處理過程中的關鍵狀態和元數據。
2. 核心成員解析
-
iif
(Input Interface Index)
記錄數據包到達的物理或虛