- 7
- 0
- 约8.13千字
- 约 11页
- 2019-01-26 发布于福建
- 举报
skbuf正f详解及功能分析
Skb分配和释放流程 2010-12-9 PAGE 4 / NUMPAGES 10
sk_buff
struct sk_buff可能是linux网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息,并包含很多成员变量供网络代码中的各子系统使用。?这个结构被网络的不同层(MAC或者其他二层链路协议,三层的IP,四层的TCP或UDP等)使用,并且其中的成员变量在结构从一层向另一层传递时改变。 L4向L3传递前会添加一个L4的头部,同样,L3向L2传递前,会添加一个L3的头部。添加头部比在不同层之间拷贝数据的效率更高。由于在缓冲区的头部 添加数据意味着要修改指向缓冲区的指针,这是个复杂的操作,所以内核提供了一个函数skb_reserve来完成这个功能。协议栈中的每一层在往下一层传 递缓冲区前,第一件事就是调用skb_reserve在缓冲区的头部给协议头预留一定的空间。??? skb_reserve同样被设备驱动使用来对齐接收到包的包头。如果缓冲区向上层协议传递,旧的协议层的头部信息就没什么用了。例如,L2的头部只有在 网络驱动处理L2的协议时有用,L3是不会关心它的信息的。但是,内核并没有把L2的头部从缓冲区中删除,而是把有效荷载的指针指向L3的头部,这样做, 可以节省CPU时间。???? 有些sk_buff成员变量的作用是方便查找或者是连接数据结构本身。内核可以把sk_buff组织成一个双向链表。当然,这个链表的结构要比常见的双向 链表的结构复杂一点。就像任何一个双向链表一样,sk_buff中有两个指针next和prev,其中,next指向下一个节点,而prev指向上一个节 点。在第一个节点前面会插入另一个结构sk_buff_head,这是一个辅助节点(作为sk_buff双向链表的头),它的定义如下:struct sk_buff_head {??? struct sk_buff?-*next;??? struct sk_buff?-*prev;??? __u32?????????? qlen;??? spinlock_t????? lock;};??? qlen代表链表元素的个数??? lock用于防止对链表的并发访问??? sk_buff和sk_buff_head的前两个元素是一样的:next和prev指针。这使得它们可以放到同一个链表中,尽管 sk_buff_head要比sk_buff小得多。另外,相同的函数可以同样应用于sk_buff和sk_buff_head。sk_buff-sk??? 这是一个指向拥有这个sk_buff的sock结构的指针。这个指针在网络包由本机发出或者由本机进程接收时有效,因为插口相关的信息被L4(TCP或 UDP)或者用户空间程序使用。如果sk_buff只在转发中使用(这意味着,源地址和目的地址都不是本机地址),这个指针是NULLsk_buff-len????表示当前协议数据包的长度。它包括主缓冲区中的数据长度(data指针指向它)和分片中的数据长度。sk_buff-data_len??? 和len不同,data_len只计算分片中数据的长度sk_buff-mac_len??? 这是mac头的长度sk_buff-users??? 这是一个引用计数,用于计算有多少实体引用了这个sk_buff缓冲区。它的主要用途是防止释放sk_buff后,还有其他实体引用这个sk_buff。 因此,每个引用这个缓冲区的实体都必须在适当的时候增加或减小这个变量。这个计数器只保护sk_buff结构本身,而缓冲区的数据部分由类似的计数器 (dataref)来保护.有时可以用atomic_inc和atomic_dec函数来直接增加或减小users,但是,通常还是使用函数 skb_get和kfree_skb来操作这个变量。sk_buff-truesize??? 这是缓冲区的总长度,包括sk_buff结构和数据部分。如果申请一个len字节的缓冲区,alloc_skb函数会把它初始化成len+sizeof(sk_buff)。当skb-len变化时,这个变量也会变化。?sk_buff-headsk_buff-datask_buff-tailsk_buff-end??? 它们表示缓冲区和数据部分的边界。在每一层申请缓冲区时,它会分配比协议头或协议数据大的空间。head和end指向缓冲区的头部和尾部,而data和 tail指向实际数据的头部和尾部。每一层会在head和data之间填充协议头,或者在tail和end之间添加新的协议数据。数据部分会在尾部包含一 个附加的头部。??void (*destructor
您可能关注的文档
- outl正ets商业地产.ppt
- outl石ook应用指南3——联系人管理技巧.doc
- p2p网贷行娜业发展现状分析.ppt
- p3ec管去理方法介绍.ppt
- oyea眼镜品牌策划案forf果ree.ppt
- p020天08乡镇企业家.doc
- outlook应用扮指南4——邮件管理技巧.doc
- p33绿城企业文化系列读本--绿城丹企业文化理念读本.doc
- p98。财务管理职位工作手挠册第2版光.doc
- part6提高无客户满意度.doc
- 全过程工程管理造价咨询工程监理项目服务方案投标方案(技术部分).doc
- 招标代理服务投标技术服务方案(技术方案).doc
- AI大模型与AIGC技术在公安领域的应用解决方案(99页 PPT).pptx
- 工业4.0智能制造数字工厂规划方案.pptx
- 树立社会主义核心价值观.docx
- 三年(2023-2025)中考历史真题分类汇编(全国)专题21 科技文化与社会生活(解析版).docx
- 2025年中考道德与法治真题完全解读(吉林卷).pdf
- 2025年中考道德与法治真题完全解读(安徽卷).pdf
- 三年(2023-2025)中考历史真题分类汇编(全国)专题14 人民解放战争(解析版).pdf
- 三年(2023-2025)广东中考历史真题分类汇编:专题03 中国近代史(八年级上册)(解析版).docx
最近下载
- 广东省深圳市福田区深圳高级中学2023-2024学年八年级上学期期末英语试卷含详解.docx
- 超高层公共建筑 投标方案方案投标文件(技术方案).doc
- 国风水墨PPT模板.pptx VIP
- 脑卒中的康复评定.pptx VIP
- 消防设备项目投标方案投标文件(技术方案).doc
- 甘肃省工会财务核算软件操作手册(网络版).doc VIP
- 2024-2025学年贵州省铜仁市高一上学期期末教学质量监测物理试卷(解析版).docx VIP
- 2023-2024学年河南省南阳市七年级(上)期末数学试卷(含解析).doc VIP
- 江苏省造价管理信息系统(企业端操作手册).pdf VIP
- PEN3电子鼻操作手册.pdf VIP
原创力文档

文档评论(0)