Linux 内核中 skb_orphan 的深度解析:从版本差异到核心机制
引言
在 Linux 内核网络子系统中,struct sk_buff
(简称 skb
)是管理网络数据包的核心数据结构。skb_orphan
作为其生命周期管理的关键函数,负责切断 skb
与所属 socket 的关联,确保数据包在复杂处理流程中的独立性。本文将从代码实现、版本差异、使用场景等多个维度,深入解析 skb_orphan
的设计与作用。
一、skb_orphan
的核心功能
skb_orphan
的核心目标是 解除 skb
与原 socket 的所有权关系,使其成为“孤儿”。其行为可概括为:
-
释放 socket 所有权:将
skb->sk
置为NULL
。 -
触发资源释放:调用
skb->destructor
回调(如存在),更新 socket 的内存计数。 -
确保独立性:避免后续操作因残留的 socket 引用导致错误。