5.2.5 IP数据报(三)IP数据报的分片与重组

news2025/1/12 20:43:07

5.2.5 IP数据报(三)IP数据报的分片与重组

前面我们在学习IP数据报的格式中,提及了数据报的分片,这里我们要弄明白几个问题

  1. 为什么要分片?

    前面我们已经解释过,如图分片
    因为在数据报传送的过程中如果总长度超出了某个网络的MTU的情况下就会使该IP数据报无法封装到一个完整的数据帧里,所以必须要进行分片

  2. 分片工作是由谁来完成的?

    分片工作通常是由网络互连设备路由器(图中R1)来完成,也就是说路由器会根据实际的需要来完成数据报的分片工作,然后每个数据报片都被封装在单个数据帧中发送,并且作为独立的IP数据报进行传输。

  3. 数据报分片的重组工作由谁来负责?

    与数据报分片相反的就是分片的重组,也就是把若干个分片重新组合成原始的IP数据报,考虑到各个分片在到达目的主机之前还有可能会被再次分片,所以说在沿途路由器上不进行分片的重组,这里我们要注意,对数据报分片的重组工作是由目的主机来完成的。

  4. 如何分片?(这是最重要的问题)

    如图结构
    我们在前面学习IP数据报的格式中曾经说过对IP数据报的分片处理会用到IP数据报首部的三个字段标识、标志、片偏移,下面我们就着重的学习一下这三个字段。

一、标识字段

标识(identification)占16bit,它是一个计数器,是源主机赋予数据的惟一标识符。在分片的时候,该字段会被复制到各个分片首部中的标识字段。

标识字段占了16比特2个字节,是源主机赋予数据报的惟一标识符,比如在源主机的内存中保持了一个全局计数器,每产生一个新的数据报计数器就会加一,因为标识占用16个比特所以计数器可以统计 2 16 2^{16} 216个标识,当达到65535的时候该字段置为全零,总之就是要保证同一主机发出的各个数据报的标识字段在较长时间内是唯一的,一个数据报分片其实是把数据部分进行拆分,因为每个分片都有首部,并且数据报片的首部主要从初始数据报首部中复制,仅做少量修改,也就是说对于标识字段必须不加修改的复制到各个分片的首部中以方便目的主机在重组时能够识别出属于同一初始数据报的所有分片。

二、标志字段

标志字段占3bit,第一个比特不用

第二个比特DF位(Don’t Fragment flag):是否允许被分片(0:允许)当该比特等于1的时候表示数据报不允许被分片,0的时候允许被分片。也就是说如果某数据报太长,路由器必须现对其进行分片才能转发的时候,结果发现该数据报的DF位置为1时路由器会丢弃该数据报,并想源主机发送一个差错报告报文。

第三个比特是MF位(More Fragment flag,简称MF),表示是否有后续分片,MF位=1表示该数据报不是最后一个分片,当该比特位等于零的时候是最后一个分片。

三、片偏移量

片偏移占用13个比特位,该字段指出本数据报片中的数据部分第一个字节相对于原数据报中数据部分的偏移量,请注意:该字段是以8个字节为单位来计算偏移量的。对于未分片的数据报或第一个分片来说该字段等于零。

由于各个分片在传输的过程中是独立的也就是说由于IP协议无法保证这些分片一定按需到达目的主机,所以目的主机能够根据分片中的源主机IP地址、标识、标志字段中的MF位以及偏移量来重装出最初始数据报的完整副本,除非没能收齐所有分片。也就意味着只要有一个分片丢失就无法重组,意味着整个数据报都丢失了,所以在实际的应用中,如果需要分片,总是希望分片的个数越少越好,又因为片偏移量是以8字节为单位,所以除了最后一个分片外,其余分片的数据部分的大小应尽量接近但不超过网络的MTU,并且是8字节的整数倍。

四、示例

我们通过一个例子来介绍有关数据报分片的计算。

如图

示例

图中所示的小型互联网中,主机A向B发送了一个首部20字节,数据部分1400字节长,且DF位为0的IP数据报,请问该数据报会被分片么?如果需要分片,请写出分片结果。

从图中我们可以看到由于主机A发送出去的是总长度为1420字节的IP数据报,要经过一个MTU值是660字节的网络2才能够到达目的网络3,所以在路由器R1处必须要进行分片,此外,该数据报的标志字段中的DF位为0表示可以分片,这里我们要知道所谓的分片其实是将数据部分拆开,因为每个分片都有首部,并且每个分片的数据部分长度要满足的条件是小于等于网络2的MTU660个字节减去首部的长度也就是640个字节,并且数据部分的长度还应该是8字节的整数倍,在这个实例中网络2可传输的数据报长度为640个字节恰巧可以被8整除,所以每个分片的数据部分的长度我们选择六百四十字节即可。所以我们得到如下结果

分片个数= 1400 640 \frac{1400}{640} 6401400,然后向上取整,最终结果是3。其中前面两个分片的数据部分长度都是640个字节,最后一个分片的长度会比较短。如图

分片

如图我们得到的分片结果

第一个分片的数据部分是640字节,其中标志字段的MF位等于1表示有后续分片,因为数据部分第一个字节就是原始数据报中编号为0的那个字节,所以他的片偏移字段的值就是 0 8 \frac{0}{8} 80就是该字段为全零。

第二个分片的数据部分仍然是640个字节,其中标志字段的MF位等于1表示有后续分片,因为其数据部分第一个字节的编号是640,所以他的片偏移字段的值就是 640 8 = 80 \frac{640}{8}=80 8640=80所以片偏移字段的值为0000001010000

第三个分片比较短,它的数据部分长度是 1400 − 2 × 640 = 120 1400-2\times640=120 14002×640=120个字节,因为其是最后一个分片,后没有分片因此其MF字段值为0,同时他的数据部分第一个字节编号是1280,所以他的片偏移字段的值是 1280 8 = 160 \frac{1280}{8}=160 81280=160,字段值是0000010100000

这里需要我们注意的是很多人在计算分片的个数时,习惯用原始数据报的总长度去除每个分片的总长度,这都是错误的,因为每个分片都有首部,这里我们一定要注意分片是吧数据部分拆开了。

这里我们再来思考如果把示例中的网络2的MTU改为600的情况下,每个分片的数据部分长度是580个字节么?欢迎大家留言讨论。

以上就是数据报的分片与重组。我们知道在互联网络层中使用的是IP地址,而前面我们学习知道在实际使用的是网卡的MAC地址进行通信的,这两种地址之间的关系就与我们后面要学到的地址解析协议ARP有关。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/601854.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Sui教育资助计划:共同构建Web3教育的未来

Sui教育资助计划旨在通过与社区成员一起构建公开的教育资料,加速推广Web3,并支持Sui生态系统的发展。 内容类别 包括教程、指南、视频以及文本等形式的教育材料包括学习奖励和其他体验式的教育产品,将学习游戏化可帮助开发人员加快构建速度…

基于matlab使用差分波束成形技术形成线性差分麦克风阵列

一、前言 本示例展示了差分波束成形的基本概念,以及如何使用该技术形成线性差分麦克风阵列。 二、加法与差分麦克风阵列 麦克风阵列已部署在许多音频应用中。根据布局的不同,麦克风阵列可分为两大类:加法麦克风阵列和差分麦克风阵列。附加麦克…

机器视觉陶瓷检测设备稳定性怎么样?不稳定因素有哪些?

机器视觉陶瓷检测设备是一种利用现代计算机视觉技术对陶瓷产品进行快速、高效的缺陷检测的设备。相比传统的人工检测方法,机器视觉陶瓷检测设备具有检测速度快、精度高、可靠性强等优点,可以大大提高陶瓷生产线的生产效率和产品质量。但是,由…

学成在线(视频处理-需求分析:xxl-job)

需求分析 作业分片方案 任务添加成功后,对于要处理的任务,会添加到待处理任务表中,现在启动多个执行器实例去查询这些待处理任务,此时如何保证多个执行器不会重复执行任务?在上一小节的测试中,每个执行器…

VMware ESXi 8.0U1a Unlocker OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版)

VMware ESXi 8.0 Update 1a Unlocker & OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版) 发布 ESXi 8.0U1 集成驱动版,在个人电脑上运行企业级工作负载 请访问原文链接:https://sysin.org/blog/vmware-esxi-8-u1-sysin/,查看最新版。原…

手动上传海豚调度器资源中心的文件,解决dolphinscheduler资源中心上传大一点jar包的bug问题

手动上传海豚调度器资源中心的文件 1. 登录hdfs的任意服务器节点上传文件 注意:切换hdfs用户 su hdfs2. 上传文件资源到ds的资源中心(hdfs上的资源目录) 这里示例目录是:/dolphinscheduler/root/resources/gwmDs/demo-shell 示…

客服端向服务端发布、订阅、取消

这里写目录标题 PUBLISH – 发布消息SUBSCRIBE – 订阅主题SUBACK – 订阅确认UNSUBSCRIBE – 取消订阅 PUBLISH – 发布消息 MQTT客户端一旦连接到服务端,便可以发布消息。 每条发布的MQTT消息必须包含一个主题。MQTT服务器可以通过主题确定将消息转发给哪些客户端…

ES教程:从入门到入土

文章目录 一、环境准备1. ES安装 二、基本概念2.1 节点(Node)Master-eligible nodes与 Master nodeData NodeIngest NodeCoordinating NodeMachine Learning Node 2.2 集群(cluster)2.3 分片(Shard)2.4 副本…

linux0.12-12-fs

[606页] 第12章 文件系统 606–12-1-总体功能 607–12-1-1-MINIX文件系统 611–12-1-2-文件类型、属性和目录项 615–12-1-3-高速缓冲区 616–12-1-4-文件系统底层函数 616–12-1-5-文件中数据的访问操作 618–12-1-6-文件和目录管理系统调用 619–12-1-7-360KB软盘中文件系统…

openGauss DBMind上的多指标关联性分析介绍

背景 随着互联网的发展,今天的数据库系统往往非常庞大且复杂,针对数据库系统的运维工作需要监控大量数据指标来了解数据库的运行状况。数据库指标往往以时间序列的方式出现,当业务层面关键指标出现异常时,运维人员需要迅速定位异…

对大量日志导致Java后端某些类加载错误问题记录

对大量日志产生导致Java后端某些类加载错误问题记录 报错问题: java.lang.IllegalArgumentException: Name for argument type [java.lang.String] not available, and parameter name information not found in class file either. org.springframework.util.Ass…

C语言关键字sizeof 与strlen

sizeof() sizeof操作数所占空间的字节数大小&#xff0c;是一种c中的基本运算符。 可以以类型、指针、数组和函数等作为参数。 返回值类型为unsigned int 运算值在编译的时候就出结果&#xff0c;所以可以用来定义数组维数。 1. #include<stdio.h> 2. // sizeof 关键字…

数据结构的基本概念

数据结构概念 1.数据&#xff1a;所有能输入计算机且能被计算机处理的符号总称 2.数据元素&#xff1a;是数据的基本单位&#xff0c;表示数据集合中的一个个体。 3 .数据项&#xff1a;数据元素中有独立含义的最小单位。 数据结构&#xff1a;相互之间存在一定关系的数据元素的…

YYDS练手 130道python练习题 完整版PDF

近年来&#xff0c;Python在编程语言界里赚足了风头&#xff0c;无论是受欢迎程度&#xff0c;还是薪资待遇&#xff0c;都非常可观&#xff0c;相应的&#xff0c;Python岗位要求也越来越高&#xff0c;无论你是零基础还是老前辈&#xff0c;在Python面试中都不能轻视。 不打…

MPLS-VPN实验

1、拓扑 2、需求&#xff1a; pc1通过vpn访问pc2 3、配置思路 第一步&#xff1a;配置接口地址 第二步&#xff1a;配置ospf 第三步&#xff1a;配置bgp 第四步&#xff1a;配置mpls 第五步&#xff1a;配置VRF -创建VRF -开启 ipv4-family -接口加入VRF -给接口重新配置…

挂在网盘到本地磁盘(以中移动云盘为例)

发现百度网盘速度越来越慢&#xff0c;因此我想怎么讲百度网盘中300多个G的文件同步到移动云中&#xff0c;因此就有了这一步的探索。 利用Alist将中国移动网盘挂载到本地磁盘 解压Alist工具包&#xff0c;运行里面的alist-xxxx.exe文件&#xff0c;启动过程如下&#xff1a; …

图扑虚拟现实 VR 智慧办公室可视化

前言 “虚拟现实”是来自英文“Virtual Reality”&#xff0c;简称 VR 技术&#xff0c;其是通过利用计算机仿真系统模拟外界环境&#xff0c;主要模拟对象有环境、技能、传感设备和感知等&#xff0c;为用户提供多信息、三维动态、交互式的仿真体验。 效果展示 图扑软件基于…

JS - DangerJs运用

JS - DangerJs运用 前言一. 前期准备1.1 创建私有 Token1.2 Git 设置对应的 Token 以及 Host 环境变量1.3 项目安装 dangerJs 二. 测试 前言 在开源社区中&#xff0c;DangerJs可以拿来自动判断每个人提交的代码合并请求&#xff08;github中叫Pull Request&#xff0c;简称PR…

(学习日记)2023.04.24

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

MKS SERVO4257D 闭环步进电机_系列1 产品简述

第1部分 产品概述 1.1 产品介绍 MKS SERVO 28D/35D/42D/57D 系列闭环步进电机是创客基地为满足市场需求而自主研发的一款产品。具备脉冲接口&#xff0c;RS485接口和CAN接口&#xff0c;内置高效FOC矢量算法&#xff0c;采用高精度编码器&#xff0c;通过位置反馈&#xff0c…