Path MTU(路径最大传输单元)

目录

前言:

IPV6不支持中间设备分片原因:

IPV6报文分片使用的扩展报头(44)所包含的参数

IPv6报文分片过程

源节点分片数据包


前言:

        在IPv4网络中,报文如果过大,则需要分片进行发送,所以在每个节点发送报文之前,设备都会根据发送接口的最大传输单元MTU(Maximum Transmission Unit)对报文进行分片。在IPv6中,如果报文较大,超出中间链路的MTU,这时分片会增加中间设备的压力,所以IPv6协议中规定中 间转发设备不能对IPv6报文进行分片,而将报文的分片将在源节点进行,分片重组在目的节点进行。当中间转发设备的接口收到一个报文后,如果发现报文长度比转发接口的MTU值大,则会将其丢弃;同时将转发接口的MTU值通过ICMPv6报文的“Packet Too Big”消息发给源节点,源节点以该值重新发送IPv6报文,这样带来了额外流量开销。PMTU发现协议可以动态发现整条传输路径上各链路的MTU值,减少由于重传带来的额外流量开销。

IPV6不支持中间设备分片原因:

  1. 提升效率:在 IPv4 当中,中间路由器的分片功能对路由器来说较为复杂和耗时,分成多片后也显著增 加了后续所有路由器的转发开销,这对整个网络的通信效率产生了一定程度的影响。IPv6 作为IPv4的升级协议,自然考虑到了这一点,把它移到源端和目标端进行分片重组,能有效地提升中间路由器的转发效率。
  2. 提升安全性:分片一直是 IPv4 中安全漏洞的常见来源。对于分片的 IPv4 数据包,第 4 层报头信息(如 TCP)在第2个到最后一个分片中不可用。分片和分片重组的过程可能会在中间节点(如防火墙和路由器)和终端节点(如用户计算机)中产生意外和有害的行为。

        PMTU发现协议是通过ICMPv6的Packet Too Big报文来完成的。首先源节点假设PMTU就是其出接口的 MTU,发出一个试探性的报文,当转发路径上存在一个小于当前假设的PMTU时,转发设备就会向源节点发送Packet Too Big报文,并且携带自己的MTU值,此后源节点将PMTU的假设值更改为新收到的MTU值继续发送报文。如此反复,直到报文到达目的地之后,源节点就能知道到达目的地的PMTU了。

        整条传输路径需要通过4条链路,每条链路的MTU分别是1500、1500、1400、1300,当源节点发送一个分片报文的时候,首先按照PMTU为1500进行分片并发送分片报文,当到达MTU为1400的出接口时,设备返回Packet Too Big错误,同时携带MTU值为1400的信息。源节点接收到之后会将报文重新按照PMTU为1400 进行分片并再次发送一个分片报文,当分片报文到达MTU值为1300的出接口时,同样返回Packet Too Big错误,携带MTU值为1300的信息。之后源节点重新按照PMTU为1300进行分片并发送分片报文,最终到达目的地,这样就找到了该路径的PMTU。

        由于IPv6要求链路层所支持的最小MTU为1280,所以PMTU的值必须大于1280。建议使用1500作为链路的 PMTU值。

IPV6报文分片使用的扩展报头(44)所包含的参数

        在IPv6中,使用分片报头44来实现IPV6的报文分片,以便于源节点分片,目的节点进行重组。IPV4的分片是 在基本报头中实现的,IPV6是通过基本报头的next-header来标识下一个报头,将分片报头紧跟在基本报头之后。分片扩展报头中的信息与IPv4头部中的分片信息大致相同,identfication标识符字段为32位,IPv4为16位,这个更大的字段提供了在网络中容纳更多分片的能力。

打开一个分片包

IPv6报文分片过程

源节点分片数据包

当源节点决定发送一个数据包,并且大于其设定的MTU时,需要对数据进行分片之后再发送。

此时,源数据包可分为如下两部分:

不可分片部分和可分片部分。

不可分片部分包括IPv6头部和任何到达目的地之前需要由中间节点处理的扩展头部(即包括路由头部之前的所有头部,如果有逐跳选项扩展头部,则是该头部之前的所有头部)。如:Routing Header或者Hop-by-Hop Options Header。

可分片部分包括数据报的其余部分(即目的选项头部,上层头部和有效载荷数据)。此部分根据MTU大小切割 成若干相同大小的分片数据,且每一个分片数据为8 octets的整数倍,然后剩余小于MTU的数据组成最后一 个分片包,简单说,就是有些扩展头部是不允许分片的,需要每个分片报文都携带这部分不允许分片的内容。

当原始数据报被分片后,将会产生多个分片包,其中每一个分片数据包由如下部分构成:

  • 1. 源数据包中的不可分片部分,Payload Length为此分片数据包的排除IPv6包头长以外的所有数据长度, Next Header中必然为Fragment Header for IPv6(44);
  • 2. 扩展包头——Fragment Header——内容:a. Next Header为源数据包中的Next Header;b. Fragment Offset: 第一个分片为0,之后的分片为8的整数倍;c. M flag:最后一个分片为0,其他分片 为1;
  • 3. 分片数据。

注意: 由于中间节点路由器不针对分片数据包重组和再分片,所以源节点的MTU最好定义为所有节点的MTU 最小值。

下面结合一个例子演示一下IPv6源节点对数据报的分片过程。在该例子中,一个6000字节的有效载荷被分片,其中分片的大小都没有超过1500字节(一个典型的以太网MTU),分片数据的大小仍为8字节的倍数。

如上图:R4要与R1互访,R4为报文发送的源节点,报文大小为6000字节,目的节点为R1上的环回网段 1::/64,首先进行PMTU探测,最终发现链路最小的MTU值为1300,然后开始将6000字节的报文分片,每个 分片中都包含一个带相同的标识符字段的分片头部,以便于目的节点收到报文后判断所有分片是否为同一个 报文。除了最后一个分片M位设置为0,其他所有分片的M位都设置为1,表示不是最后一片,偏移量以8字节为单位。

当前将有效载荷6000字节开始分片,链路最小MTU为1300字节,表示IPV6的报文只能封装1300字节,这 1300字节中包含两部分内容:可分片部分和不可分片部分,不可分片部分为IPV6的基本报头,以及分片所用的分片报头(44),剩余为可分片部分,所以得出1300字节-40字节的IPV6基本报头-8字节的分片报头=实际 分片的数据,同时需要满足一个条件,可分片的数据必须被8整除。

以上图为例:1300-40-8=1252,1252除以8余4,不能被8整除,所以分片数据的字节需要下降,变为1248字 节,此时1248字节可以被8整除,所以最终使用1248字节来分片,6000字节以1248字节为一片开始切片, 最多可以分为5片,最后一片不需要被8整除,分片报文如下图:

分片报头中存在几个重要的标志位,Offset偏移量(用于报文重组排序)、Identfication分片标识(同一份报文的分片标识都一致,用于标识分片属于同一个报文),More Fragment(置位为1表示后续还有分片, 该片为中间分片报文,置位为0表示该片为最后一片,后续不会再有分片),next header表示下一个IPV6报头类容或者上层协议。

在报文分片过程中,偏移量的作用是分片重组是排序,标识每一个分片所处原报文的位置,所以每一个分片报文的偏移量值都不相同,该值如何计算呢?如下:首先报文一共分为5片,从0开始排序,可以排到4,每 一片的偏移量计算如下:

  • 第一片,0X(1248字节/8字节)=0
  • 第二片,1X(1248字节/8字节)=156
  • 第三片,2X(1248字节/8字节)=312
  • 第四片,3X(1248字节/8字节)=468
  • 第五片,4X(1248字节/8字节)=624

最终报文每一个分片封装的长度为:1248字节(有效数据载荷)+8字节(分片报头)+40字节(IPV6基本报 头)+二层帧头14字节=整个发出去的报文长度,值得注意的是第一个分片到第四个分片都标识了上层协议为 ICMP(58),但是并没有携带ICMP报文头部,只有在最后一个分片不仅标识了上层协议而且还携带了ICMP的头部,以上就是R1访问R4报文分片的全过程。

这是第一个分包片

这是第二个分包片

最后一个分包片--由于使用ping测试,类型为ICMP。

配置:

1.所有节点配置IPV6地址
[Huawei]ipv6 —全局开启IPV6
[Huawei-GigabitEthernet0/0/0]display this
[V200R003C00]
#
interface GigabitEthernet0/0/0
 ipv6 enable
 ipv6 address 1200::1/64 —接口激活IPV6,并配置IP地址
[Huawei-GigabitEthernet0/0/0]ipv6 mtu ?
 INTEGER<1280-1500> MTU (bytes) —改变接口默认的IPV6mtu值

2.配置路由使全网可达------采用OSPFV3

配置如下:
[Huawei]ospfv3 1 —全局启动OSPFV3
[Huawei-ospfv3-1]router-id 1.1.1.1—配置RID,这里需要注意的是OSPFV3必须手工指定RID,格式按照
IPV4的格式指定,如果不指定RID,OSPFV3将无法正常工作

[Huawei-GigabitEthernet0/0/0]ospfv3 1 area 0 —进入对应的接口,在接口上使能OSPFV3,这里指定接
口使用的OSPF进程和属于的区域,注意:所有需要接入OSPF网络的接口都需要进行接口使能。区域ID可以
采用十进制整数或IPv4地址形式输入,但显示时使用IPv4地址形式

测试:ping ipv6 -s 6000 1::1(-s指定ping包的大小,即数据量这里指定为6000字 节,目标网段1::/64)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络核心知识点 - 网络通信技术 XHR(XMLHttpRequest) 和 Fetch

一、关于 AJAX&#xff08;一种思想和方法&#xff09; 浏览器本身就具备网络通信的能力&#xff0c;但在早期&#xff0c;浏览器并没有把这个能力开放给JS。最早是微软在IE浏览器中把这一能力向JS开放&#xff0c;让JS可以在代码中实现发送请求&#xff0c;并不会刷新页面。Aj…

MS5910PA——10到16bit、内置参考振荡器 R/D转换器,替代AD2S1210

产品简述 MS5910PA 是一款可配置 10bit 到 16bit 分辨率的旋 变数字转换器。片上集成正弦波激励电路&#xff0c;正弦和余弦 允许输入峰峰值幅度为 2.3V 到 4.0V &#xff0c;频率范围为 2kHz 至 20kHz 。 转换器可并行或串行输出角度和速度对应的 数字量。 MS…

计算机软件安全

一、软件安全涉及的范围 1.1软件本身的安全保密 软件的本质与特征&#xff1a; 可移植性 寄生性 再生性 可激发性 攻击性 破坏性 …… 知识产权与软件盗版 软件商品交易形式不透明&#xff0c;方式多样&#xff0c;传统商标标识方法不适用&#xff1b; 盗版方法简捷…

IntelliJ IDEA集成git配置账号密码

1 背景说明 刚使用IDEA&#xff0c;本地也安装Git&#xff0c;在提交和拉取代码的时候&#xff0c;总提示登录框&#xff0c;而且登录框还不能输入账号密码&#xff0c;只能输入登录Token。如下&#xff1a; 从而无法正常使用IDEA的Git功能&#xff0c;很苦恼。 2 解决方法 …

C语言数据结构易错知识点(5)(插入排序、选择排序)

插入排序&#xff1a;直接插入排序、希尔排序 选择排序&#xff1a;直接选择排序、堆排序 上述排序都是需要掌握的&#xff0c;但原理不会讲解&#xff0c;网上有很多详尽地解释&#xff0c;本文章主要分享一下代码实现上应当注意的事项 1.直接插入排序&#xff1a; 代码实…

FastWiki(增强AI对话功能)企业级智能客服功能介绍

知识库对话功能 什么是知识库对话&#xff1f; 我们需要找到AI的知识能力是有限的他们的知识都截止于他们训练数据的时间&#xff0c;你提问他们更新的数据的时候他们就会出现乱回复。而知识库则是利用Prompt给于AI更多的知识从而让他回复更准确&#xff0c; 以下就是知识库的…

如何通过idea搭建一个SpringBoot的Web项目(最基础版)

通过idea搭建一个SpringBoot的Web项目 文章目录 通过idea搭建一个SpringBoot的Web项目一、打开idea&#xff0c;找到 create new project二、创建方式三、配置项目依赖四、新建项目模块五、总结 一、打开idea&#xff0c;找到 create new project 方式1 方式2 二、创建方式 新…

更换 Jenkins 插件下载源(解决 Jenkins 插件安装失败)【图文详细教程】

Jenkins 插件安装失败的情况 这里提一下&#xff0c;Jenkins 插件安装失败&#xff0c;不一定是下载源的问题&#xff0c;还有可能你下载的 Jenkins 的版本与插件的版本不匹配&#xff0c;Jenkins 的版本较低&#xff0c;而安装的插件是为新的 Jenkins 版本准备的&#xff0c;此…

领域、系统和组织-《实现领域驱动设计》中译本评点-第2章(4)

相关链接 DDD领域驱动设计批评文集>> 汪峰哭晕在厕所-《实现领域驱动设计》中译本评点-第2章&#xff08;1&#xff09; 可不是乱打的-《实现领域驱动设计》中译本评点-第2章&#xff08;2&#xff09; “领域”的错误定义-《实现领域驱动设计》中译本评点-第2章&…

牛客题霸-SQL篇(刷题记录三)

本文基于前段时间学习总结的 MySQL 相关的查询语法&#xff0c;在牛客网找了相应的 MySQL 题目进行练习&#xff0c;以便加强对于 MySQL 查询语法的理解和应用。 由于涉及到的数据库表较多&#xff0c;因此本文不再展示&#xff0c;只提供 MySQL 代码与示例输出。 以下内容是…

笔试总结01

1、spring原理 1、spring原理 spring的最大作用ioc/di,将类与类的依赖关系写在配置文件中&#xff0c;程序在运行时根据配置文件动态加载依赖的类&#xff0c;降低的类与类之间的藕合度。它的原理是在applicationContext.xml加入bean标记,在bean标记中通过class属性说明具体类…

Mamba 基础讲解【SSM,LSSL,S4,S5,Mamba】

文章目录 Mamba的提出动机TransformerRNN Mama的提出背景状态空间模型 (The State Space Model, SSM)线性状态空间层 (Linear State-Space Layer, LSSL)结构化序列空间模型 &#xff08;Structured State Spaces for Sequences, S4&#xff09; Mamba的介绍Mamba的特性一&#…

天软高频因字库——委托订单因子及资金流向因子发布

天软始终致力于构建完善而丰富的因子库服务体系&#xff0c;陆续推出了股票因子、基金因子、指数因子等众多因子数据及评价数据。 本月天软推出高频委托订单&资金流向相关因子&#xff0c;继续补充和完善天软高频特色因子库&#xff0c;至此该因子库已包含36个因子表单&…

基于SpringBoot+Vue共享客栈管理系统(源码+部署说明+演示视频+源码介绍+lw)

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。&#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精通…

Pycharm配置conda

1.下载conda Free Download | Anaconda . 2.配置环境 1.conda自带base环境 2.创建环境 3. Pycharm创建项目&#xff0c;选择环境 3.Pycharm中新建conda环境

win11 安装SIBR 3dgs

1.安装显卡驱动 下载地址&#xff1a; 官方驱动 | NVIDIA下载适用于 GeForce、TITAN、NVIDIA RTX、数据中心、GRID 等 NVIDIA 产品的新驱动。https://www.nvidia.cn/Download/index.aspx?langcn 2.安装cuda 下载地址&#xff1a;如果无法打开&#xff0c;切换.com为.cn&am…

AD20如何整体修改元器件标号?

1 2这里可以设置元器件标号方向 3更新 4点击前两个选项&#xff08;生成&#xff0c;执行&#xff09;即可

【Linux】nmcli命令详解

目录 ​编辑 一、概述 二、常用参数使用 2.1 nmcli networking 1.显示NM是否接管网络 2.查看网络连接状态 3.开/关网络连接 2.2 general ​编辑 1.显示系统网络状态 2.显示主机名 3.更改主机名 2.3 nmcli connection ​编辑1.显示所有网络连接 2.显示某个网卡的…

Day08 Java复习8 Spring MVC概念

Day09 Java复习9 Spring MVC spring mvc 的核心组件是什么&#xff1f; DispatcherServlet 1.JAVA 和Spring 、Spring Boot 、Spring MVC的关系 你要举办一个生日派对&#xff0c;而且你希望它既特别又好玩。Java就像是举办派对的地方&#xff0c;Spring、Spring Boot和Spri…

YOLOv5全网独家改进: 注意力机制改进 | 维度感知选择性集成模块DASI,红外小目标暴力涨点| 2024年3月最新成果

💡💡💡本文独家改进:维度感知选择性集成模块DASI,解决目标的大小微小以及红外图像中通常具有复杂的背景的问题点,2024年3月最新成果 💡💡💡红外小目标实现暴力涨点,只有几个像素的小目标识别率大幅度提升 改进结构图如下: 收录 YOLOv5原创自研 https://…