日期:2014-05-16 浏览次数:20764 次
本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/11820091
我们之前介绍了sk_buff这个数据结构。
现在来了解一下,对于一个数据包的操作函数。
大家都知道,一个数据包来到内核之后,会经过L3、L4到达用户空间。
对于数据包的设计者而言,他必然会先把数据包设计好,同时把数据包的操作函数设计好(有点类似于类的静态属性和动态属性的概念)。
数据包的操作函数是什么呢?
这里分了四类:
1、分配、释放数据包类函数。
2、数据包内“游标”性函数。
3、克隆复制数据包类函数。
4、数据包链表操作函数。
其中比较关键的是第一、第二、第四类函数。
第一类函数在网卡接收包、用户发送数据包的时候使用非常频繁,也就是我们一提起数据包,就首先想到的类型。
第二类函数是数据包在填充数据,穿越协议栈层“脱壳”时所用,是与用户数据联系最为紧密的部分。
第四类函数是在对大量的数据包进行组织时使用,主要在与sock结构体相关联。
这几类函数是在设计sk_buff的时配套设计好了的,上层的协议栈只是调用,而不做任何修改。