下列两幅图是IP数据报头结构:


在IP数据报头中有三个字段与数据报的分片与重组有很大的关系,分别是标识符、标志和片偏移量。

  1. 标识占16位,用于目的主机将数据报的各个分片重装成原来的数据报。当数据报分片时,该标识字段的值被复制到所有的数据报片的标识字段中。这样,目的就可以正确的将标识字段值相同的各数据报分片重装成原来的数据报。

  2. 其中标志占3位,该字段目前只有后两位有意义,前一位字段保留。
    其中,最低位记为MF(More Fragment),用于把数据报最后一片与前面其它各片区分开来。MF = 1代表片未完,即钙片不是原始数据报的最后一片;MF = 0表示钙片是原始数据报的最后一片。
    次低位DF(Don’t Fragment),用来控制数据报是否允许分片。DF = 1表示该数据报不允许分片;DF = 0允许分片。
    其实,数据报的分片和重组都是由机器自动完成的,因此设置DF位的真正意义在于,程序员可以控制数据报的分片过程,这为程序调试提供了方便和灵活性。

  3. 片偏移占13位,表示本片在原数据报中的偏移,偏移量以8字节为单位。由于各片数据均按照独立数据报方式传输,因此到达目的站的片序是不定的,目的主机在重装数据报时需要该字段提供偏移量

例如:
A: 有一数据报总长度4820字节,首部20字节,数据4800字节。某一网络能传送的数据报的最大长度是1420字节,该如何分片?

B: 有一数据报总长度4500字节,ip报头20字节,考虑到还有一种情况,分片的数据包还可能继续进行分片, 如下截图:

所有片段的数据量: 1480+1000+1480+540 = 4500字节

如何得片段偏移:
A1: 0
A2: 0 + 1480/8 = 185
A3: 185+1000/8 = 310
A4: 310+1480/8 = 495
在分片时,除最后一片外,其他每一片的数据部分必须是8字节的整数倍

  1. 如何重组:
    A1: 每个分段数据首部中,16位标识符 是相同的,接收端可以依靠此标识,来识别是否是同一组数据。
    A2: 3位标志位,用DF来区分是否允许分片,如果为0,继续查看MF,接收端会把MF=1的分组数据放到缓存中,直到把所有16位标识符相同的分段读取完为止。
    (根据网络传输速度,接收端不一定最后收到MF=0的标识分段数据. 而因该是check16位标识符相同的分组,全部放到缓冲区 )
    A3: 然后根据13位偏移量,来重组缓存中的数据(可以通过MF=0来确定最后一段分组数据).
    所以重组前提依据上述三个步骤来确认。缺一不可.

当需要进行分片时,在每个数据报片的首部存放着该数据报的标识、标志位和片偏移,在进行重组时,标识用来分辨该数据报片的原数据报是哪个,标志位中的MF用来分辨这是不是原数据报的最后一片,片偏移用来分辨这个数据报片相对原数据报的位置。通过这几个字段,可以稳定的完成数据报的分片与重组操作

tcp/ip IP数据报头详解相关推荐

  1. TCP,UDP的报头详解

    本博客借鉴谢希仁第六版<计算机网络>的第九章 TCP报头  (1)源端口和目的端口 各占2个字节,分别写入源端口号和目的端口号,TCP的分用功能是通过端口实现的. (2)序号 占4个字节. ...

  2. IP协议及IP数据包详解

    本文转自至:https://blog.csdn.net/super_yc/article/details/72290931 回忆一下网络层的主要功能:通过TCP或者UDP协议绘制网络地图,数据包选取合 ...

  3. 太阳动态ip代理为您详解使用代理ip常见的几个关键点及其解决方案

    一个ip支撑不了整个爬虫项目的运营,因此程序员常需要建立代理ip池或者与第三方代理ip软件打交道.作为优质的代理ip服务商,太阳动态ip代理为您详解使用代理ip常见的几个关键点及其解决方案. IP检验 ...

  4. Aurora ip核的使用详解

    Aurora ip核的使用详解 前言 近期完成了Aurora的光纤传输的单板验证,以及在集成其他模块完成数据从FPGA上通过PCIE传到上位机,对该IP核的使用有一定的了解,在此用自己的经验以简洁的语 ...

  5. Hadoop入门(二)——VMware虚拟网络设置+Windows10的IP地址配置+CentOS7静态IP设置(图文详解步骤2021)

    Hadoop入门(二)--VMware虚拟网络设置+Windows10的IP地址配置+CentOS7静态IP设置(图文详解步骤2021) 之前在上一篇文章中讲述了 CentOS7下载+VM上安装(手动 ...

  6. 一个获取ip地址的命令详解

    今天在看师兄写的一个安装脚本文件,虽然之前学了不少bash知识.不是太熟练,打算练练手,可是这个命令折磨了我好久.索性花点时间把它弄清楚.awk这个工具语言的难度,我是体会到了.写正则表达式的都是什么 ...

  7. PLC通信中的IP地址和子网掩码详解

    PLC通信中的IP地址和子网掩码详解 IP地址是我们在网际层进行数据传输时一种逻辑编址. IPV4协议中,是使用4个字节来进行标识的,每个字节以10进制数进行表示. 主要包含两大类:网络地址和主机地址 ...

  8. 四种以太网数据包详解

    1.1 Ethernet II协议简介 以太网是当今现有局域网采用的最通用的通信协议标准.该标准定义了在局域网中采用的电缆类型和信号处理方法.EthernetII由DEC,Intel和Xerox在19 ...

  9. scapy定制数据包详解

    今天继续给大家介绍渗透测试相关知识,本文主要内容是scapy定制数据包详解. 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 一.scapy介绍 ...

  10. MySQL mysqldump数据导出详解

    MySQL mysqldump数据导出详解 2016-04-07 11:14  pursuer.chen  阅读(357122)  评论(2)  编辑  收藏  举报 介绍 在日常维护工作当中经常会需 ...

最新文章

  1. 基于Go的语义解析开源库FMR,“屠榜”模型外的NLP利器
  2. 江苏开放计算机绘图作业1,江苏开放大学计算机绘图形考.doc
  3. 联想20年的45条成功法则
  4. 【物联网】 Yeelink开发平台注册
  5. Android 动画(二)
  6. pvr波形是什么意思_PVR的完整形式是什么?
  7. unity中怎么做河流_【干货】工作中怎么做工业设计的?(一)
  8. java web 启动时执行_java Web 启动时自动执行代码的几种方式
  9. 51nod 1275 连续子段的差异(twopointer+单调队列)
  10. 前端打印样式乱了_皮具大百科之皮料上的3D打印,连花的阴影都能完美复刻!超美工艺...
  11. android音频框架书籍,Android高级架构师系统学习——Android 音频可视化
  12. 计算机专业面试 英文,计算机专业英文面试自我介绍.doc
  13. 电脑办公 等 无锡计算机培训,无锡锡山区电脑培训计算机培训office办公软件培训...
  14. 如何在 Android 中减小 APK 大小?
  15. java lpad oracle_oracle函数lpad的简单用法
  16. Ramp Number
  17. 基于Labview的瀑布图的生成
  18. BUCK电源芯片做升压电源的方法(1)
  19. 僵尸进程(zombie process)
  20. yoast seo_Yoast SEO vs All in a SEO Pack –最好的WordPress SEO插件是哪个?

热门文章

  1. 【学生信息管理系统】-优化篇1
  2. 【图像去雾】基于Retinex算法实现图像去雾matlab代码
  3. Unity3D学习笔记(2)脚本创建以及执行过程概述
  4. 小夜曲dsd使用foobar2000测试dsd输出
  5. 01背包问题c语言,遗传算法的0-1背包问题(c语言)
  6. 新一配:iPod及其系列产品【转载】
  7. Unity蛮牛教程噩梦射手----代码讲解(1)
  8. 日新测试软件,禁Ping多线程批量检测工具V2.6,功能强大,你值得拥有【2020.05.09日更新】...
  9. 用Wineskin 让Windows 的程序在Mac 上运行
  10. 计算机财务管理期末考试题及答案,计算机财务管理期末考工资部分题目及答案...