在linux中 tcp的数据包的封装是在函数tcp_sendmsg开始的,在函数tcp_sendmsg中用到skb = sk_stream_alloc_skb(sk, select_size(sk, sg),sk->sk_allocation);分配了一个SKB(暂且称之为old_skb)

而真正的发送的SKB并不是old_skb,而是在函数tcp_transmit_skb中新分配了一个skb(暂且称之为new_skb

old_skb和new_skb的关系在函数tcp_transmit_skb中体现了

skb(new_skb) = pskb_copy(skb(old_skb), gfp_mask);
或者
skb (new_skb)= skb_clone(skb(old_skb), gfp_mask);

而后再利用

skb_push(skb, tcp_header_size);
skb_reset_transport_header(skb); 等函数来将头部信息加入到new_skb中。

简单的流程图如下:

from :http://blog.csdn.net/scdxmoe/article/details/17679067

转载于:https://www.cnblogs.com/hehehaha/p/6332316.html

linux TCP数据包封装在SKB的过程分析相关推荐

  1. linux tcp 包大小,Linux TCP数据包接收处理 --- 转

    在接收流程一节中可以看到数据包在读取到用户空间前,都要经过tcp_v4_do_rcv处理,从而在receive queue中排队. 在该函数中,我们只分析当连接已经建立后的数据包处理流程,也即tcp_ ...

  2. linux数据包注释,关于 linux中TCP数据包(SKB)序列号的小笔记

    关于  SKB序列号的小笔记 为了修改TCP协议,现在遇到了要改动tcp分组的序列号,但是只是在tcp_sendmsg函数中找到了SKB的end_seq  一直没有找到seq 不清楚在那里初始化了,就 ...

  3. 【案例分析】Linux和Windows在TCP数据包上的差异+网闸兼容问题引发的TCP连接失败故障分析

    1.前言 出于项目保密原因,本文所提及的IP地址并非真实IP地址,其余技术细节均与案例实际环境相同,供学习交流参考. 2.案例背景 我们前段时间接到项目现场工程师电话,对方称他们新上架了一台Linux ...

  4. Linux网络数据包接收处理过程

    因为要对百万.千万.甚至是过亿的用户提供各种网络服务,所以在一线互联网企业里面试和晋升后端开发同学的其中一个重点要求就是要能支撑高并发,要理解性能开销,会进行性能优化.而很多时候,如果你对Linux底 ...

  5. Linux网络数据包的揭秘以及常见的调优方式总结

    Linux网络数据包的揭秘以及常见的调优方式总结 (网易游戏运维平台) 关注我们,获一手游戏运维方案 lott 网易游戏业务 SRE, 专注于业务运维的质量和效率 , 喜欢研究 Linux 系统原理. ...

  6. Android-TCPDump for Android(抓TCP数据包工具)

    如果要抓TCP数据包,我们可以使用TCPdump工具,类似于windows/linux下使用的这个工具一样 具体方法 下载tcpdump,  还有个地址是http://www.strazzere.co ...

  7. TCPDUMP for Android(抓TCP数据包工具)

    2019独角兽企业重金招聘Python工程师标准>>> 如果要抓TCP数据包,我们可以使用TCPdump工具,类似于windows/linux下使用的这个工具一样.具体方法是 下载t ...

  8. c语言sgoto 标志位,如何在Go中设置TCP数据包的“不分段”标志位?(How to set “don't fragment” flag bit for TCP packet in Go?)...

    如何在Go中设置TCP数据包的"不分段"标志位?(How to set "don't fragment" flag bit for TCP packet in ...

  9. Linux网络 - 数据包的接收过程

    Linux网络 - 数据包的接收过程 嵌入式Linux中文站 嵌入式Linux中文站 微信号 emblinux 功能介绍 嵌入式Linux中文站提供专业嵌入式Linux开发技术资讯 Table of ...

最新文章

  1. 数据分析学习03-pandas
  2. 定位低效SQL与不同的Extra类型(转载)
  3. c 富文本html编辑器,富文本HTML编辑器UEditor
  4. 服务器网站显示多协议,解决高防IIS8服务器https协议多个同时访问的解决方法
  5. NHibernate学习之五:三种常见的配置方法。
  6. 朋友圈设置成昨天发的_如何让你的朋友圈骚到脱颖而出?
  7. VMware vCenter Server 的内部版本号和版本 (2143838)
  8. 使用 entrySet 遍历 Map 类集合 KV ,而不是 keySet 方式进行遍历的好处
  9. redis采用序列化方案存对象
  10. 如何把Tomcat 9 的默认8080端口变成80端口
  11. SNE T分布 t-SNE数据降维与可视化
  12. 暴躁的一天从Ubuntu搜狗拼音开始
  13. [附源码]JAVA+ssm计算机毕业设计房屋租赁系统(程序+Lw)
  14. 龙少的Linux配置大全
  15. Android 内存卡 / Micro SD 卡 / TF 卡 / 存储卡 剩余容量 / 剩余内存 / 可用空间、总容量的 2 种获取方式
  16. 学习Python后能找什么工作
  17. 彻底清除SMSS.EXE病毒
  18. 阻塞、非阻塞,同步、异步
  19. php获取访客精确ip,PHP获取访客IP、地区位置等技巧分享
  20. python pass的含义

热门文章

  1. JSP下Forward和Redirect的区别分析
  2. 转载: 快速理解Docker - 容器级虚拟化解决方案
  3. js逻辑训练题_二建冲刺必刷300题!精选历年真题+母子题+模考易错题!
  4. 认证(登录)功能需求分析
  5. SpringAMQP--入门案例的消息发送
  6. Nginx的功能特性及常用功能
  7. 将本地镜像发布到阿里云
  8. Nacos配置中心-多配置文件加载
  9. 茅塞顿开:Spring Aware原理解析
  10. 通过enum实现枚举类