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:



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



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

TCP/IP四层模型解析

1.TCP/IP四层模型与OSI七层模型的对应关系1.网络接口层(主机-网络层) 网络接口层与OSI参考模型中的物理层和数据链路层相对应。 它负责监视数据在主机和网络之间的交换。 事...
  • leiflyy
  • leiflyy
  • 2015年11月29日 15:20
  • 4713

TCP/IP协议族的四个层次及不同层次的协议

网络通常分不同的层次进行开发,每一层又各自分工不同,负责自己的不同于其他层次的通信功能;TCP/IP协议族分为四个层次: 应用层; 运输层; 网络层; 又名互联网层 链路层; 又...
  • github_33736971
  • github_33736971
  • 2016年03月31日 11:07
  • 4323

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

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

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

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

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

这节说一下链路层和ARP RARP协议链路层: 在协议栈中链路层的目的有三个:1. 为IP模块发送或接受数据包 2.为ARP模块发送或接受ARP请求 3. 为RARP模块发送或接受RARP请求。 让...
  • u012511518
  • u012511518
  • 2017年02月15日 13:05
  • 147

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

4.1接收帧  由硬件驱动在中断处理程序中直接调用netif_rx  netif_rx(skb)★     (dev.c/core)----将接收到的消息挂在每CPU的输入队列中     if(...
  • wojiaowugen
  • wojiaowugen
  • 2016年10月22日 16:03
  • 131

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

本文分析基于Linux Kernel 3.2.1  http://blog.csdn.net/yming0221/article/details/7971463 更多请查看专栏http://blo...
  • chenyijun
  • chenyijun
  • 2016年10月16日 15:40
  • 329

Linux内核--网络协议栈深入分析(二)--sk_buff的操作函数

本文分析基于Linux Kernel 3.2.1 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7972647 更多请查...
  • avrmcu1
  • avrmcu1
  • 2014年06月19日 09:40
  • 518

AFDX端系统协议栈虚拟链路层分析

  • 2013年11月11日 11:09
  • 2.2MB
  • 下载

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

sk_buff 结构体详解
  • shanshanpt
  • shanshanpt
  • 2014年03月13日 21:11
  • 19181
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sk_buff经过协议栈时的变化---从TCP层向下到链路层
举报原因:
原因补充:

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