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)

  • 18
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Smiling Mr. Rui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值