linux tcpip协议栈分析.doc

linux tcpip协议栈分析.doc

ID:49199888

大小:531.50 KB

页数:22页

时间:2020-03-01

linux tcpip协议栈分析.doc_第1页
linux tcpip协议栈分析.doc_第2页
linux tcpip协议栈分析.doc_第3页
linux tcpip协议栈分析.doc_第4页
linux tcpip协议栈分析.doc_第5页
资源描述:

《linux tcpip协议栈分析.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、sk_buff结构可能是linux网络代码中最逍要的数据结构,它表示接收或发送数据包的包头信息。它在中定义,并包含很多成员变量供网络代码中的各子系统使用。这个结构在linux内核的发展过程屮改动过很多次,或者是增加新的选项,或者是乖新组织已存在的成员变最以使得成员变最的布局更加清晰。它的成员变量可以大致分为以下几类:•Layout布局•General通用•Feature-specific功能相关•Managementfunctions管理函数这个结构被不同的网络层(MAC或者其他二层链路协议,三层的IP,四层的TCP或

2、UDP等)使用,并且其中的成员变最在结构从一层向另一层传递时改变。L4向L3传递前会添加一个L4的头部,同样,L3向L2传递前,会添加一个L3的头部。添加头部比在不同层之间拷贝数据的效率更高。山于在缓冲区的头部添加数据意味着要修改指向缓冲区的指针,这是个复杂的操作,所以内核提供了一个函数skb.reserve(在后面的章节中描述)來完成这个功能。协议栈中的毎一层在往下一层传递缓冲区前,第一件申就是调用skb_reserve在缓冲区的头部给协议头预留一定的空间。skb_reserve同样被设备驱动使用來对齐接收到包的包头。如果缓冲区向上层协议传递,I口的协议层的头部信

3、息就没什么用了。例如,L2的头部只有在网络驱动处理L2的协议时有用,L3是不会关心它的信息的。但是,内核并没有把L2的头部从缓冲区中删除,而是把有效荷载的指针指向L3的头部,这样做,可以节省CPU时间。1.网络参数和内核数据结构就像你在浏览TCP/1P规范或者配置内核时所看到的一样,网络代码提供了很多有用的功能,但是这些功能并不是必须的,比如说,防火墙,多播,还有其他一些功能。大部分的功能都需要在内核数据结构中添加自己的成员变量。因此,sk.buff里面包含了很多像#ifdef这样的预编译指令。例如,在sk_buff结构的最后,你可以找到:structskbuff{

4、ttifdefCONFIGNETSCHEDu32tcindex;#ifdefC07FIG_NET_CLS_ACTu32tcverd;u32tc_classid;ttendifttendif}sk_buff结构可能是linux网络代码中最逍要的数据结构,它表示接收或发送数据包的包头信息。它在中定义,并包含很多成员变量供网络代码中的各子系统使用。这个结构在linux内核的发展过程屮改动过很多次,或者是增加新的选项,或者是乖新组织已存在的成员变最以使得成员变最的布局更加清晰。它的成员变量可以大致分为以下几类:•Layout布

5、局•General通用•Feature-specific功能相关•Managementfunctions管理函数这个结构被不同的网络层(MAC或者其他二层链路协议,三层的IP,四层的TCP或UDP等)使用,并且其中的成员变最在结构从一层向另一层传递时改变。L4向L3传递前会添加一个L4的头部,同样,L3向L2传递前,会添加一个L3的头部。添加头部比在不同层之间拷贝数据的效率更高。山于在缓冲区的头部添加数据意味着要修改指向缓冲区的指针,这是个复杂的操作,所以内核提供了一个函数skb.reserve(在后面的章节中描述)來完成这个功能。协议栈中的毎一层在往下一层传递缓冲

6、区前,第一件申就是调用skb_reserve在缓冲区的头部给协议头预留一定的空间。skb_reserve同样被设备驱动使用來对齐接收到包的包头。如果缓冲区向上层协议传递,I口的协议层的头部信息就没什么用了。例如,L2的头部只有在网络驱动处理L2的协议时有用,L3是不会关心它的信息的。但是,内核并没有把L2的头部从缓冲区中删除,而是把有效荷载的指针指向L3的头部,这样做,可以节省CPU时间。1.网络参数和内核数据结构就像你在浏览TCP/1P规范或者配置内核时所看到的一样,网络代码提供了很多有用的功能,但是这些功能并不是必须的,比如说,防火墙,多播,还有其他一些功能。大

7、部分的功能都需要在内核数据结构中添加自己的成员变量。因此,sk.buff里面包含了很多像#ifdef这样的预编译指令。例如,在sk_buff结构的最后,你可以找到:structskbuff{ttifdefCONFIGNETSCHEDu32tcindex;#ifdefC07FIG_NET_CLS_ACTu32tcverd;u32tc_classid;ttendifttendif}它表明.tcjndex只有在编译时定义了CONFIG_NET_SCHED符号才有效。这个符号可以通过选择特定的编译选项來定义(例如:"DeviceDriversNetworkingsupp

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。