IP数据包分片理解

news/2024/7/7 20:09:06

IP 数据包在数据帧中的封装:

一、在很多物理网络中,都对数据帧的长度有限制,而且这个限制大都比IP 数据包长度的限制小。

二、物理网络的这个限制(对帧数据区)通常都称为最大传输单元(MTU,Maximum Transfer Unit)。

三、IP 协议使用了分片与重组的策略,这种策略的原理就是:

1、如果一个IP数据包无法封装在一个数据帧中,就将数据包分成几个长度小于

MTU 的片,将片封装在帧中进行传输。

2、当这些分解的片都传输到目的地后,再将这些片重新组全成原来的IP数据包。

3、当一个IP数据包从MTU大的网络发往MTU小的网络时,IP数据包往往就在路由器

上进行分片。

4、IP数据包的分片可能在IP数据包的源主机和网络路由器上发生,但重组只能在

目标主机中进行。

5、IP 数据包对数所包进行分片时,每一个分片都会独立地成为一个IP数据包。

6、分片后的数据包都有自已的IP包头和数据区。

最大传输单元(MTU -maximum transfer unit)

–各种物理网络技术都限制了一个物理帧的大小,这个限值被称为最大传输单元;不同物理网络技术的MTU 不同。

–对于一个网络而言,其MTU 值是由其采用的物理技术决定的,而且通常保持不变

.IP分组的分片问题:

– 在小MTU 的网络上将较大分组分割后进行传输称为IP包分片

– IP头中有3个单元与分片有关:

.ID(Identification):该分组的唯一标识,以便进行分片的重组

.MF(More Fragment,Flags 字段的Bit 0):MF=1 表示还有更多分片

.FO(Fragment Offset):本片起始位置在原始分组数据区中的偏移量

–分组的分片传输:在分组的传输通路上,分片操作只能出现在两个MTU 不同的网络的交界处,也就是出现在路由器上;进入一个新网络时,若新网络的MTU 小于原有网络的MTU,则可能需要进行分片;若新MTU 值不小于原有MTU 就不必进行分片。

– 片重组(reassembly)是分片的逆过程。所有片重组操作都在目的主机上进行。其简单过程如下:

. 当目的主机收到MF=1 的分片时,首先将其进行缓存

. 当收到MF=0 的分片时,计算原始IP 分组的长度:

– 原始分组长= 本分片的偏移

+ 本分片的数据长度

. 利用原始分组长度检查是否收到全部分片;若是,则按照

各片的偏移值重新组装成IP 分组,提交给高层软件;否则将等待,直到收到该分组的全部分片

. 为了防止无限等待,在接收端设置重组定时器;当接收到

分组的第一片时启动该定时器,如果在指定的时间内未能

Ping解释:

在Liunx和Windows上,Ping 数据包大小代表IP数据部分(有效载荷)大小(IP数据包=IP包头+有效数据)。

在Cisco网络设备上,Ping 数据包大小代表整个IP数据包大小。


http://lihuaxi.xjx100.cn/news/158184.html

相关文章

springboot1:项目启动

1.启动springboot引入的依赖&#xff08;pom.xml的配置&#xff09; 引入父项目&#xff08;依赖管理&#xff09; 父项目的父项目中声明了所有需要依赖的版本号&#xff08;自动版本仲裁机制&#xff09; <parent><groupId>org.springframework.boot</groupId…

DPDK 网络加速在 NFV 中的应用

目录 文章目录 目录前文列表传统内核协议栈的数据转发性能瓶颈是什么&#xff1f;DPDKDPDK 基本技术 DPDK 架构DPDK 核心组件应用 NUMA 亲和性技术减少跨 NUMA 内存访问应用 CPU 绑核技术减少上下文切换损耗应用大页内存技术减少 TLB miss应用 PMD 轮询技术减少网卡外设的硬件…

50行Python代码白嫖Github Actions, 每天检测收录优质项目的存活状态(提供csv纯净数据下载)

受阮一峰老师《科技爱好者周刊》的启发&#xff0c;zhaoolee打算做个优秀项目的存储仓库&#xff0c;于是我写了个csv文件托管到github上, 为了方便检查URL的检查&#xff0c;我写了个脚本&#xff0c;每次更新csv文件或每天东八区的早晨6点&#xff0c;都会进行一url存活检测&…

java实现文件加密解密

一、对于文件流读写取的方式对比&#xff1a; inputStream.read()与OutputStream.write()单字节读取&#xff0c;效率低下inputStream.read(new byte[801024])与OutputStream.write(new byte[801024])固定数组读取&#xff0c;经测试数组增加到80k左右性能最佳nputStream.read…

RatSLAM配置(MATLAB版)

最近开始写毕业论文&#xff0c;为了跑实验&#xff0c;先试一下RatSLAM。 RatSLAM简介 RatSLAM系统使用啮齿动物海马的计算模型执行基于视觉的SLAM。RatSLAM能够在室内和室外环境中执行实时在线SLAM。 澳大利亚昆士兰科技大学&#xff08;QUT&#xff09;的科学家Michael Milf…

【python 小白到精通】第五章:面向对象编程 - 三星运行模拟

文章目录前言为什么使用面向对象三星运行模拟定义星球类主程序前言 这一章学习了面向对象编程&#xff0c;需要掌握的内容包括&#xff1a;会调用对象的方法和属性&#xff1b;如何编写类。 这一章课程中有个模拟双星运行的小程序&#xff0c;为了增进理解&#xff0c;我改了…

部署OKR需要克服的四大难关

OKR是一项全面提升推动战略实施、促进组织变革、优化激励机制、提升企业文化的系统工程&#xff0c;涉及的因素众多&#xff0c;任何一方面的缺失&#xff0c;都会影响OKR的顺利导入和推动。 部署OKR需要克服的四大难关 第一&#xff1a;认知偏差 认为OKR只是一个工具。OKR不…

three.js webgl_tiled_forward 例子分析

three.js 中 webgl_tiled_forward 是比较难理解的一个官方样例&#xff0c;我第一次看时&#xff0c;看得一头雾水&#xff0c;看得快睡着了&#xff0c;比较枯燥。。。 这个例子&#xff0c;就是展示场景中 有多个光源时&#xff0c;如何提升渲染效率&#xff1b;思路就是把屏…