【杂记-浅谈MTU最大传输单元】

一、MTU概述

概念

MTU,Maximum Transmission Unit,即最大传输单元,是指网络能够传输的最大数据包大小,以字节为单位。MTU的大小决定了发送端一次能够发送报文的最大字节数。如果MTU超过了接收端所能够承受的最大值,或者是超过了发送路径上途经的某台设备所能够承受的最大值,就会造成报文分片甚至丢弃,加重网络传输的负担。如果太小,那实际传送的数据量就会过小,影响传输效率。

MTU是网络通信中的一个重要概念,它直接关系到网络传输的效率和稳定性。正确设置MTU值,对于确保网络通信的高效和可靠至关重要。在实际应用中,应结合网络环境和设备的具体情况,通过多种手段综合确定合适的MTU值。MTU是数据链路层的概念,指数据链路层对数据帧长度的限制。不同链路介质类型的网络有不同的默认MTU值。
作用

网络中通常以数据包为单位进行信息传递,如果包大小设置的很大,意味着报文中的有效数据也更多,通信效率更高,但传送一个数据包的延迟也越大,数据包中bit位发生错误的概率也越大。并且如果这个报文丢掉了,重传的代价也很大。如果包大小设置的过小,则意味传输相同的数据量,设备需要处理更多的报文,这样会极大的考验设备的线速转发能力。通过设置MTU来调节网络上数据包的大小,让不同的网络找到最适宜的MTU从而提高转发效率。

总结来说,MTU的作用有:

1、提高传输效率:通过调整MTU的大小,可以优化网络设备在一次传输中承载的数据量,从而提高传输效率。

2、减少网络拥塞:适当的MTU值可以减少数据包分片,降低网络拥塞的可能性,提高网络的吞吐量。

3、适应不同网络环境:不同的网络环境下,MTU的大小可能存在差异。通过设置合适的MTU,可以使网络设备适应不同的网络环境,保证数据的正常传输。

MTU的大小不仅限于物理层的限制,还与网络协议紧密相关。例如,在IP协议中,如果一个数据包的大小超过数据链路层的MTU,则该数据包会在发送前被分片。此外,TCP和UDP等传输层协议也会根据MTU来调整其分段的大小,以适应网络环境的限制。
不同MTU的定义

1、MTU用以指示整个IP报文的最大长度(IP头+三层Payload),MTU是一个三层的定义,即MTU = IP MTU。例如在Huawei CloudEngine系列交换机上,MTU是三层的定义,指IP MTU。

2、MTU的值等于IP报文与以太帧头的总和,即MTU = IP MTU + 14字节。例如在Cisco部分设备上,MTU是指IP MTU + 以太帧头。

3、MTU的值等于IP报文与以太帧头、CRC部分的总和,即MTU = IP MTU + 18字节。例如在Juniper部分设备上,MTU是4、指IP MTU + 以太帧头 + CRC部分。

二、确定合适的MTU值

确定合适的MTU值需要考虑多个因素,包括网络设备、网络协议和网络环境等。以下是一些常见的确定MTU的方法:
Jumbo帧与MTU

Jumbo Frame,即巨型帧,Jumbo帧把以太网的最大帧长扩展到了9K,相当于增强版的MTU,其与MTU的区别在于:

1、Jumbo帧是在数据链路层进行处理的,MTU涉及的分片通常是在网络层进行。

2、Jumbo帧长包括二层以太帧头及CRC部分。MTU一般不包括这部分,指的是三层IP报文部分的长度。在网络应用中,MTU最大值受限于Jumbo帧的最小值,MTU值至少要比Jumbo帧小18字节。
TCP MSS与MTU

TCP MSS,Maximum Segment Size,是指TCP协议所允许的从对方收到的最大报文长度,即TCP数据包每次能够传输的最大数据分段,只包含TCP Payload,不包含TCP Header和TCP Option。MSS是TCP用来限制application层最大的发送字节数。为了达到最佳的传输效能,TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的时候往往根据MTU值来计算(需要减去IP包头20字节和TCP包头20字节),所以通常MSS为1460=1500(MTU)- 20(IP Header) -20 (TCP Header)。
Path MTU与MTU

Path MTU,即传输路径的MTU,无需分片就能穿过某路径的数据包最大长度。在从发送端到接收端的传输路径上,如果网元的MTU设置不一致,则决定该路径可用MTU的,其实是整条路径上的最小MTU值。以Path MTU作为IP包长发送数据,既高效又能避免分片。

三、如何设置MTU

两端MTU保持一致

对接的两个三层设备以太网接口MTU配置需要保持一致。除了这点,还要考虑多种场景下各种封装标签对报文大小的影响,例如封装MPLS标签,每层标签会增加4字节,增加MPLS标签后,报文长度也可能超过链路层允许发送的范围,导致报文无法转发。
配置骨干网、城域网络、接入网络MTU

为保证骨干网络、城域网络、接入网络的完美工作,MTU的数值一定要远大于以太网标准的基本要求1500字节。通常现有的大型路由器、交换机设备,都可以支持到9000以上的大数据报文,但缺省配置各厂商并不相同,很多厂商设备的缺省MTU配置仍然是1500字节。并且因为网络中很可能运行OSPF、ISIS等需要协商MTU的路由协议,所以互相对接的不同厂商的设备的MTU也要调整为相同。因此,在满足网络和运营商规范且各个厂商都支持的情况下,尽量将MTU配置的大一些。
配置数据中心等局域网络MTU

在目前大规模建设的数据中心等网络中,通常没有对MTU进行统一调整。随着新技术的应用,MTU的问题会逐步暴露出来。比如为进行大二层扩展进行的各类隧道技术的使用,VPLS、VXLAN等。这些技术无一例外的都使用了额外的封装,形成了超大报文,例如VXLAN会在原始报文基础上增加50字节。如不统一进行MTU的规划,会导致传输效率低下,或者业务中断。因此,在数据中心等网络的建设中,也需要确定MTU的配置规范,在各个厂商都支持的情况下,尽量将MTU配置的大一些。
以太网MTU

以太网的默认MTU值为1500,早期的以太网使用共享链路的工作方式,为了保证CSMA/CD机制,所以规定了以太帧长度最小为64字节,最大为1518字节。最小64字节是为了保证最极端的冲突能被检测到,64字节是能被检测到的最小值;最大不超过1518字节是为了防止过长的帧传输时间过长而占用共享链路太长时间导致其他业务阻塞。所以规定以太网帧大小为64~1518字节,虽然技术不断发展,但协议一直没有更改。

以太网最大的数据帧是1518字节,这样刨去帧头14字节和帧尾CRC校验部分4字节,那么剩下承载上层IP报文的地方最大就只有1500字节,这个值就是以太网的默认MTU值。这个MTU就是网络层协议非常关心的地方,因为网络层协议比如IP协议会根据这个值来决定是否把上层传下来的数据进行分片,如果单个IP报文长度大于MTU,则会在发送出接口前被分片,被切割为小于或等于MTU长度的IP包。

四、MTU的分片

以太网缺省MTU=1500字节,这是以太网接口对IP层的约束,如果IP层有<=1500字节需要发送,只需要一个IP包就可以完成发送任务;如果IP层有>1500字节数据需要发送,需要分片才能完成发送。

以主机发送一个数据载荷长度为2000字节的报文为例说明其分片的过程(假设出接口的MTU值为1500)。在网络层会对报文进行封装,其结构组成:IP头部20字节+数据载荷长度2000字节,报文封装后,整个报文长度为2020字节。在出接口进行转发的时候,发现IP报文的长度超过了MTU的值1500,因此要进行分片处理。
MTU分片过程

1、第一片报文,IP报文头固定20字节,数据载荷可以封装1480字节(MTU值1500字节-IP报文头20字节,数据载荷长度须是8的倍数)。

2、第二片报文,复制第一片的IP头,IP报文头固定20字节,数据载荷为剩余的520字节(总数据载荷长度2000字节减去第一片中已封装的1480字节)。如果最后一片报文的长度不足46字节,会自动填充至46字节。

3、所有分片报文在发送至目的主机后,在目的主机进行分片重组,恢复为原报文。在进行重组时,通过IP标志位中的MF用来分辨这是不是最后一个分片,片偏移用来分辨这个分片相对原数据报的位置。通过这几个字段,可以准确的完成数据报的重组操作。

相关推荐
fantasy_arch38 分钟前
CPU性能优化-磁盘空间和解析时间
网络·性能优化
是Dream呀3 小时前
Python从0到100(七十八):神经网络--从0开始搭建全连接网络和CNN网络
网络·python·神经网络
kaixin_learn_qt_ing3 小时前
了解RPC
网络·网络协议·rpc
安全小王子4 小时前
Kali操作系统简单介绍
网络·web安全
Hacker_LaoYi5 小时前
【漏洞分析】DDOS攻防分析(四)——TCP篇
网络·tcp/ip·ddos
爱吃水果蝙蝠汤5 小时前
DATACOM-IP单播路由(BGP)-复习-实验
网络·网络协议·tcp/ip
Sun_12_26 小时前
SQL注入(SQL lnjection Base)21
网络·数据库
网络安全Jack7 小时前
网络安全概论——身份认证
网络·数据库·web安全
易我数据恢复大师7 小时前
如何彻底删除电脑数据以防止隐私泄露
网络·电脑·数据删除·擦除