1 MTU的概念
MTU,全称为Maximum Transmission Unit,即最大传输单元,它是数据链路层的概念,指以太网数据通信时,链路层上一次性允许通过或转发的数据帧的最大尺寸。MTU通常与通信接口关联,即同一设备的不同接收/转发接口的MTU值可能不同。MTU值一般以字节为单位,常见结构和字节占比如下图所示。
图1-1 以太网报文结构
MTU的定义在不同的厂商之间存在一些差异,主要有如下几种定义:
(1) 方式一:MTU = IP Header + 有效数据载荷(IP Payload),例如在锐捷网络的部分设备中均采用此类定义;
(2) 方式二:MTU = IP Header + 有效数据载荷(IP Payload) + 以太网帧头(14byte),例如在Cisco的部分设备中即采用此类定义;
(3) 方式三:MTU = IP Header + 有效数据载荷(IP Payload) + 以太网帧头(14byte) + CRC校验(4byte),例如在Juniper的部分设备上即采用了此类定义。
由于MTU限制了链路层一次性转发的数据帧尺寸,当数据包尺寸大于接收端MTU值时,就需要对数据包进行拆分传输,或者直接丢弃。拆分传输的过程也称为分片,即在网络层将数据包分解为若干个尺寸小于或等于MTU值的小的数据包,每个分片数据包都会带有一个IP报头,这些被拆分后的小的数据包称为数据碎片。在拆分传输完成后,需要对各数据碎片进行重组,通过各分片IP报头中的标识位、偏移量信息,能够唯一标识特定数据包的特定数据碎片,然后即可按序完成数据包重组。但是,分片和重组过程会增加额外的资源消耗,加重网络传输的负担。
2 MTU的作用和具体表现
MTU值决定了网络中一次性传输的数据量大小,如果MTU设置的过大,意味着所能一次性传输的数据包中的有效数据占比更大,通信效率更高,但同时也会加大传输延时和出错概率,降低传输可靠性,传输出错后重传还会耗费较大的网络资源。如果MTU设置的过小,对于较大尺寸数据包需要进行分片处理,增加数据包处理量,且分片和重组过程还会增加额外的资源消耗,加重网络传输的负担。因此,对于不同场景,设置合适的MTU值,能够达到提高网络传输性能的效果。
数据转发时MTU取值不同,数据转发表现也不同,主要有以下三种场景:
(1) MTU值大于所转发数据包大小
设备能够直接转发数据包,而不需要分片。此时,假设MTU设置为6000,则在不分片情况下,若采用方式一的MTU定义,则允许转发的IP数据包尺寸最大为60018byte,假设链路带宽为10Mbps,则传送一帧数据最大可能耗时如下(不考虑其它时间消耗):
60018 / (10 * 2^20)≈0.005s
即传输一帧数据需要独占带宽5ms,在此期间其它进程无法发送数据,影响网络流畅性。若是在链路带宽更低情况下,发送一帧数据占用的时间会更大,网络流畅性会受到更大影响;若是在链路带宽较高时,这种影响则会相对较小。因此,根据实际情况合理设置MTU,能够优化网络传输性能。
(2) MTU值小于所转发数据包大小且允许分片
设备对数据包进行拆分并转发。此时,若MTU为一个较小的值100,采用方式一的MTU定义。假设传送一个尺寸大于1018byte的IP数据包,需要对数据包进行分片处理,分片方式如下图所示。
图2-1 IP数据包分片方式示意图
拆分后的每个数据碎片中都会携带一个IP报文头部(20byte),用于标识数据碎片所属数据包及在数据包中的位置。因此,对于拆分前的数据包来说,在不考虑传送多个数据包带来的时间消耗外,对于单个分片来说,其传输效率为:
(100 – 20)/100 = 0.8
多传送的IP报文头部会降低传送效率,MTU设置越小,传输效率越低。因此,通过调整MTU值,可以改善数据传输效率。
(3) MTU值小于所转发数据包大小,且设置禁止分片。
设备直接丢弃数据包,不转发。此时,若想正常传送数据包,就需要上调MTU值。
此外,MTU的设置还会影响网络中PMTU和TCP MSS的值的大小:
(1) PMTU
PMTU全称为Path Maximum Transmission Unit,即路径MTU。对于一条IP路径,其MTU值是指在不分片情况下路径上所能传输的最大数据包尺寸,等于该路径上的最小MTU值,所以PMTU的值由路径上所有MTU共同决定。通过MTU间接改变PMTU值,就能够有效避免分片重组,提高网络带宽的利用率。
(2) TCP MSS
MSS全称为Maximum Segment Size,即最大报文段长度,是指一个TCP报文的数据载荷的最大长度。为了达到最佳的传输性能,对接双方会在TCP建立连接时进行MSS协商,而TCP MSS的值则依赖于MTU计算得到,计算方式如下:
TCP MSS = 对端接口的IP MTU – IP报文头(20byte) – TCP报文头(20byte)
图2-2 以太网报文中TCP MSS定义示意图
不同厂商对设备上实际生效的TCP MSS值的设置存在差异。例如,在锐捷网络的设备中允许用户手动设置TCP MSS值,同时,为了降低人为设置的风险,设置实际生效的TCP MSS是从根据MTU计算得到的MSS和用户配置的TCP MSS中取较小值。
3 MTU设置
MTU设置时,首先需要确认设备是否允许分片。若设备不允许分片,则需要确保MTU值大于所需传送的数据包尺寸,否则数据包会被丢弃。若设备支持分片,为了尽量避免因分片带来的资源消耗,MTU设置的基本原则为:对接两台设备的MTU值应保持同步,同时根据网络带宽进行设置,即网络带宽高,则可增大MTU值,若网络带宽较低,为保证数据传输流畅性,MTU设置值不宜太高。此外,还需要考虑其它因素或场景的影响。
(1) 对于MTU值,一般设备的默认值往往是比较合适的设置。不同链路介质类型的网络有不同的默认MTU值,下表中为一些常见网络的默认MTU值。
表3-1 各类网络默认MTU值
网络类型
|
MTU(byte)
|
以太网
|
1500
|
IEEE 802.4
|
8166
|
IEEE 802.3
|
1492
|
FDDI
|
4352
|
Token Ring(16Mbps)
|
17914
|
Token Ring(4Mbps)
|
4464
|
X2.5
|
576
|
PPP
|
296
|
(2) 对接设备间MTU定义方式不同或报文携带标签
●对接双方厂商不同时,MTU定义方式可能存在差异,因此,需要保证双方MTU定义重合部分保持一致。例如,锐捷网络的设备(采用方式一定义)与Cisco设备(采用方式二定义)对接时,若锐捷网络的设备MTU设置为1450,则对接的Cisco设备MTU值应设置为1464。
●数据帧中携带Tag的情况,例如在MPLS网络中,数据包会增加MPLS Tag,且Tag所占字节也计入MTU中,所以在设置MTU时还需要考虑Tag所占的字节大小。
(3) 交换、路由等网络设备的MTU设置
对于普通的交换、路由设备,默认MTU值通常是比较合适的值,一般为1500byte。对于骨干网、城域网、接入网等网络中的大型网络设备,其数据吞吐量较大,数据转发要求也较高,一般能够支持9000byte以上的最大传输量,因此,在对接双方硬件支持条件下,MTU应设置尽量大。
(4) 多种业务混合使用场景下设备MTU设置
多种业务混合使用时,MTU设置需要综合考虑业务应用和带宽大小。如果其中一种业务的实时性要求较高且数据长度较小,如语音传输,而另一种业务的数据对实时性要求不高,但数据长度较大占用比较大的带宽资源,如FTP数据传输。此时,将MTU设置得比较小,将有利于不同业务数据对于带宽的平均分配。
(5) 设备厂商对于MTU设置的限制
对于一些设备,厂商可能会对MTU的配置提供一些特殊限制或设置,需要参考厂商提供的产品配套资料中的提示进行配置。例如,在锐捷网络的交换机上,需要注意以下几点:
●设备允许配置系统MTU和接口MTU。配置系统MTU时,设备会自动更新所有以太网口的MTU值,但不覆盖已经配置接口MTU的设置;配置接口MTU值时,MTU值需要小于或等于其实际物理接口配置的MTU值,否则会导致长度超过物理接口MTU的数据包被丢弃。
●在同一物理网段上的设备,其互连接口的IP MTU必须保持一致,否则可能出现数据无法传输的问题。
●在进行大吞吐量数据交换时,设备还支持调高MTU以处理大于以太网标准帧长(1500 byte)的数据帧,即Jumbo帧,在提高网络吞吐率,降低设备CPU负担的同时,也能保证数据的正常接收和处理。
4 总结
对于MTU值,一般默认值是比较合理的设置,但在一些如游戏卡机、网页部分打不开、大文档发送不了等由MTU设置问题导致网络性能变差或有特殊数据传输需求的场景下,默认MTU值可能无法满足需求,此时可以通过修改MTU值来改善网络传输性能。在设置MTU时,除了要考虑对接的对象及自身设备所允许的MTU设置范围,还需要综合考虑网络带宽、厂商特殊设定、应用场景等因素,避免因联动关系导致出现新的网络问题。