日期:2014-05-16  浏览次数:20764 次

Linux内核源代码解析之——数据包的处理函数

本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/11820091

 

我们之前介绍了sk_buff这个数据结构。

现在来了解一下,对于一个数据包的操作函数。

大家都知道,一个数据包来到内核之后,会经过L3、L4到达用户空间。

对于数据包的设计者而言,他必然会先把数据包设计好,同时把数据包的操作函数设计好(有点类似于类的静态属性和动态属性的概念)。

数据包的操作函数是什么呢?

这里分了四类:

1、分配、释放数据包类函数。

2、数据包内“游标”性函数。

3、克隆复制数据包类函数。

4、数据包链表操作函数。

其中比较关键的是第一、第二、第四类函数。

第一类函数在网卡接收包、用户发送数据包的时候使用非常频繁,也就是我们一提起数据包,就首先想到的类型。

第二类函数是数据包在填充数据,穿越协议栈层“脱壳”时所用,是与用户数据联系最为紧密的部分。

第四类函数是在对大量的数据包进行组织时使用,主要在与sock结构体相关联。

 这几类函数是在设计sk_buff的时配套设计好了的,上层的协议栈只是调用,而不做任何修改。