sk_buff经过协议栈时的变化---从TCP层向下到链路层

原创 2013年12月03日 21:48:04

   近来开始结合linux源码看TCP/IP,看到sk_buff时被其各个数据成员弄得有些糊涂,靠死记硬背显然是不行的。最终,结合书本(Understanding LINUX Network Internals)把sk_buff中主要的几个数据成员的变化情况画了出来。这种学习方法我一直在用,效果挺好。

transport layer:

   首先,看看通过alloc_skb创建的sk_buff的内存布局:


   最初创建sk_buff时,len成员的值是0。该字段应该是表示buffer内有效数据的大小,buffer的大小显然是通过end-head来表示的。最初创建时,head = data = tail。

   接下来,我们看看TCP层是如何把数据和HEADER放到buffer中的。


   这里,先为TCP、IP、Data Link层的HEADER预留空间,大小为MAX_TCP_HEADER。该大小考虑所有情况下的最大值,所以其定义略复杂。(include/net/tcp.h)预留空间的操作用的是函数skb_reserve,会改变data和tail的值。由于这时buffer中还是没有有效数据的,所以len=0。

   为HEADER预留空间后,把app层传给TCP的数据放到data处:


   显然,这时buffer内是有有效数据了,len=L1。至于tail是否一定equal to end,我觉得不一定,有待进一步研究。接下来,肯定就是把TCP HEADER填上了:


   相应的,len字段更新为L2。

   再往下走,规律基本一样,就是为每层加HEADER:

network layer:


data link layer:



   由于本人正处于学习阶段,错误之处望不吝赐教,谢谢!



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Linux TCP/IP 协议栈的关键数据结构Socket Buffer(sk_buff )

sk_buff结构可能是linux网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息。它在中定义,并包含很多成员变量供网络代码中的各子系统使用。  这个结构在linux内核的发展过程中改动...

LINUX TCP/IP 协议栈的关键数据结构SOCKET BUFFER(SK_BUFF )

sk_buff结构可能是linux网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息。它在中定义,并包含很多成员变量供网络代码中的各子系统使用。 这个结构在linux内核的发展过程中改...

Linux TCP/IP 协议栈的关键数据结构Socket Buffer(sk_buff )

sk_buff结构可能是linux网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息。它在中定义,并包含很多成员变量供网络代码中的各子系统使用。 这个结构在linux内核的发展过程中改动...

TCP/IP协议栈 -----链路层

这节说一下链路层和ARP RARP协议链路层: 在协议栈中链路层的目的有三个:1. 为IP模块发送或接受数据包 2.为ARP模块发送或接受ARP请求 3. 为RARP模块发送或接受RARP请求。 让...

TCP/IP协议栈之四---------链路层

4.1接收帧  由硬件驱动在中断处理程序中直接调用netif_rx  netif_rx(skb)★     (dev.c/core)----将接收到的消息挂在每CPU的输入队列中     if(...

Linux 内核网络协议栈 ------sk_buff 结构体 以及 完全解释 (2.6.16)

sk_buff 结构体详解

【Linux 内核网络协议栈源码剖析】网络栈主要结构介绍(socket、sock、sk_buff,etc)

通过前面的分析,可以发现,网络协议栈中的数据处理,都是基于各类结构体,所有有关于网络栈中数据包的状态,地址,端口等信息都封装在对应的结构中,可以说,了解这些数据结构是理解网络栈源码的基础,这里我们就来...

Linux内核--网络协议栈深入分析(一)--与sk_buff有关的几个重要的数据结构

本文分析基于Linux Kernel 3.2.1  http://blog.csdn.net/yming0221/article/details/7971463 更多请查看专栏http://blo...

网络协议栈设计(六)---链路层以太网代码实现(接收)

//Ethernet.h //这里只为上次的Ethernet.h做一补充 int is_accept_ethernet_packet(u_int8_t *packet_content, int len...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)