首页 理论教育 零点起步:sk_buff数据结构解析

零点起步:sk_buff数据结构解析

时间:2023-10-31 理论教育 版权反馈
【摘要】:Linux网络各层之间的数据传送都是通过sk_buff数据结构进行的。sk_buff数据结构如图8-6所示。每个sk_buff均包含一个数据块、4个数据指针以及两个长度字段。sk_buff和相关的数据块在分配之后,该指针的值是固定的。和data指针一样,该指针的值也随当前拥有sk_buff的协议层的变化而变化。sk_buff组织成双向链表的形式,根据网络应用的特点,对链表的操作主要是删除链表头的元素和添加到链表尾。sk_buff的控制方法都很简单,以尽量减少系统的负担。

零点起步:sk_buff数据结构解析

Linux网络各层之间的数据传送都是通过sk_buff数据结构进行的。sk_buff提供了一套管理缓冲区的方法,是系统网络高效运行的关键。该结构在内核中处于网络子系统的核心地位。每个sk_buff都包括一些控制方法和一块数据缓冲区,这个区域存放了网络传输的数据包。

978-7-111-33316-6-Chapter08-34.jpg

978-7-111-33316-6-Chapter08-35.jpg

sk_buff数据结构如图8-6所示。

每个sk_buff均包含一个数据块、4个数据指针以及两个长度字段。利用4个数据指针,各协议层可操纵和管理套接字缓冲区的数据。这4个指针的用途是

head:指向内存中数据区的起始地址。sk_buff和相关的数据块在分配之后,该指针的值是固定的。

data:指向协议数据的当前起始地址。该指针的值随当前拥有sk_buff的协议层的变化而变化。(www.xing528.com)

tail:指向协议数据的当前结尾地址。和data指针一样,该指针的值也随当前拥有sk_buff的协议层的变化而变化。

end:指向内存中数据区的结尾。和head指针一样,sk_buff被分配之后,该指针的值也固定不变。

978-7-111-33316-6-Chapter08-36.jpg

图8-6 sk_buff数据结构

sk_buff有两个非常重要的长度字段len和truesize,分别描述当前协议数据包的长度和数据缓冲区的实际长度。

对sk_buff的控制方法按功能可分为两种类型:一种是控制整个链的方法;另一种是控制数据缓冲区的方法。sk_buff组织成双向链表的形式,根据网络应用的特点,对链表的操作主要是删除链表头的元素和添加到链表尾。sk_buff的控制方法都很简单,以尽量减少系统的负担。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈