在 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)
记录数据包到达的物理或虚