首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

Linux内核-网络内核兑现分析(一)-与sk_buff有关的几个重要的数据结构

2012-09-19 
Linux内核--网络内核实现分析(一)--与sk_buff有关的几个重要的数据结构本文分析基于Linux Kernel 3.2.1原

Linux内核--网络内核实现分析(一)--与sk_buff有关的几个重要的数据结构

本文分析基于Linux Kernel 3.2.1

原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7971463

更多请查看专栏http://blog.csdn.net/column/details/linux-kernel-net.html


几个月之前做了关于Linux内核版本1.2.13网络栈的结构框架分析并实现了基于Netfilter的包过滤防火墙,这里以内核3.2.1内核为例来进一步分析,更全面的分析网络栈的结构。


1、先说一下sk_buff结构体

这个结构体是套接字的缓冲区,详细记录了一个数据包的组成,时间、网络设备、各层的首部及首部长度和数据的首尾指针。

下面是他的定义,挺长


charcb[48] __aligned(8);中的48个字节是控制字段,配合各层协议工作,为每层存储必要的控制信息。


2、sk_buff_head结构体

#ifdef NET_SKBUFF_DATA_USES_OFFSETstatic inline unsigned char *skb_end_pointer(const struct sk_buff *skb){return skb->head + skb->end;}#elsestatic inline unsigned char *skb_end_pointer(const struct sk_buff *skb){return skb->end;}#endif

可以看到如果用户没有自己使用偏移量,就是skb的end属性指针,也就是该信息存储在缓冲区之后。


下篇将看有关sk_buff的操作函数的实现。


热点排行