第一范文网 - 专业文章范例文档资料分享平台

SK - BUFF学习笔记

来源:用户分享 时间:2025/5/26 6:34:21 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

上面的图为《深入理解linux网络技术内幕》原文图,显示了sk_buff_head和sk_buff结构体链表。但上面sk_buff结构体是内核2.6.xx.xx比较前的版本的,我现在用的是:内核2.6.32.63版本的。sk_buff结构中没有list这个成员了。

sk_buff结构体数据区:

sk_buff结构体只是网络数据包中的一些配置,真正包含传输内容和传输协议的都是在sk_buff结构体中几个指针所指向的数据区中。这里先简称数据区,数据区的大小是:(skb->end - skb->head);对于每个数据包来说这个大小都是固定的,而且在传输过程中skb->end和skb->head所指向的地址都是不变的。这块数据区是用来存放应用层发下来的数据和各层的协议信息。但在计算数据长度或者操作协议信息时,一般都要和实际的数据存放指针为准。实际数据指针为data和tail,data指向实际数据开始的地方,tail指向实际数据结束的地方。

下面来看下sk_buff结构体中的指针和数据区关系:

讲到了sk_buff结构和其数据区,那么就把包的形成和数据区的变化一起讲下:

(1)sk_buff结构数据区刚被申请好,此时head指针、data指针、tail指针都是指向同一个地方。记住前面讲过的:head指针和end指针指向的位置一直都不变,而对于数据的变化和协议信息的添加都是通过data指针和tail指针的改变来表现的。

(2)开始准备存储应用层下发过来的数据,通过调用函数skb_reserve()来使data指针和tail指针同时向下移动,空出一部分空间来为后期添加协议信息。

(3)开始存储数据了,通过调用函数skb_put()来使tail指针向下移动空出空间来添加数据,此时skb->data和skb->tail之间存放的都是数据信息,无协议信息。

(4)这时就开始调用函数skb_push()来使data指针向上移动,空出空间来添加各层协议信息。直到最后到达二层,添加完帧头然后就开始发包了。

下面来看过程图:(上面提到的这几个操作函数在第二篇博文会详细讲到)

skb_shared_info分片结构体:

本来只是想讲sk_buff结构体不想牵扯太多(因为牵扯越多将要花更多时间去学这些东西),但发现到后面克隆和复制skb时,如果不讲分片结构将很难区分开实现克隆、复制的那几个函数。所以这里就稍微的讲解下这个结构体,但是不对结构体中的各个成员字段过多的解释(因为有些成员字段我也不了解,见谅)。

还是先来看看结构体代码吧:

struct skb_shared_info {

atomic_t

dataref;// 用于数据区的引用计数,克隆一个skb

结构体时,会增加一个引用计数

unsigned short nr_frags;// 表示有多少个分片结构 unsigned short gso_size; dma_addr_t

dma_head;

#ifdef CONFIG_HAS_DMA #endif

/* Warning: this field is not always filled in (UFO)! */ unsigned short gso_segs;

unsigned short gso_type; // 分片的类型 __be32 ip6_frag_id; union skb_shared_tx tx_flags;

struct sk_buff *frag_list; // 这也是一种类型的分配数据 struct skb_shared_hwtstamps hwtstamps; skb_frag_t

frags[MAX_SKB_FRAGS]; // 这是个比较重要的数

组,到讲分片结构数据区时会细讲 #ifdef CONFIG_HAS_DMA };

dma_addr_t

dma_maps[MAX_SKB_FRAGS];

#endif

/* Intermediate layers must ensure that destructor_arg * remains valid until skb destructor */ void *

destructor_arg;

搜索更多关于: SK - BUFF学习笔记 的文档
SK - BUFF学习笔记.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c1c0b03o6cu2p7v440mf6_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top