本文主要分析二层MTU,IP MTU和MSS的概念以及它们之间的关系。这三个概念对于路由器来说非常重要。

最大传输单元(Maximum Transmission Unit,MTU)是指一种通信协议在某一层上面所能通过的最大数据报大小(以字节为单位),它通常与链路层协议有密切的关系。

以太网对传输的帧的长度有一个限制,称为最大传输单元MTU,以太网一般是1500。

最大传输单元(Maximum Transmission Unit,MTU)_第1张图片

一、EthernetII帧结构

最大传输单元(Maximum Transmission Unit,MTU)

字段释义:

 目的地址:6字节,网卡中的硬件地址,固定在网卡上的
 源地址:6字节,网卡中的硬件地址(MAC)
 类型:协议类型:IP,ARP,RARP
 数据:46~1500字节,
 CRC:循环冗余验证

二、认识MTU:

 MTU,最大传输单元,相当于发快递时对包裹尺寸的限制,是由物理层产生的限制,通常与通信接口有关(网卡接口卡)
 以太网帧中数据最小长度时46,ARP数据报的长度不够46字节,要在后面补填充为
 以太网帧中的数据最大时1500,称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU
 如果以太网中传输的数据包长度大于MTU,则要对其进行分片

最大传输单元(Maximum Transmission Unit,MTU)_第2张图片

由于以太网传输电气方面的限制,每个以太网帧最小64字节,最大不能超过1518字节,对于小于或者大于这个限制的以太网帧,以太网都可以视之为错误的数据帧。一般的以太网转发设备会丢弃这些数据帧。(注:小于64字节的数据帧一般是由于以太网冲突产生的“碎片”或者线路干扰或者坏的以太网接口产生的,对于大于1518字节的数据帧我们一般把它叫做Giant帧,这种一般是由于线路干扰或者坏的以太网口产生)。

这个MTU是网络层协议非常关心的地方,因为网络层协议比如IP协议会根据这个值来决定是否把上层传下来的数据进行分片。就好比一个盒子没法装下一大块面包,就需要把面包切成片,装在多个盒子里面一样的道理。当两台远程PC互联的时候,它们的数据需要穿过很多的路由器和各种各样的网络媒介才能到达对端,网络中不同媒介的MTU各不相同,就好比一长段的水管,由不同粗细的水管组成(MTU不同)通过这段水管最大水量就要由中间最细的水管决定。

三、IP MTU

对于网络层的上层协议而言(以TCP/IP协议族为例),网络层IP协议会检查每个从上层协议下来的数据包的大小,并根据本机MTU的大小决定是否作“分片”处理。分片最大的坏处就是降低了传输性能,本来一次可以搞定的事情,分成多次搞定,所以在网络层更高一层(传输层)的实现中往往会对此加以注意!有些高层因为某些原因就会要求本层这个面包不能切片,需要完整的“面包”,所以会在IP数据包包头里面加上一个标签:DF(Do not Fragment)。这样当这个IP数据包在一大段网络(水管里面)传输的时候,如果遇到MTU小于IP数据包的情况,转发设备就会根据要求丢弃这个数据包,然后返回一个错误信息给发送者。这样往往会造成某些通讯上的问题,不过幸运的是大部分网络链路MTU都是等于1500或者小于1500。

MTU对IP协议的影响:

由于数据链路层MTU的限制,对于较大的IP数据包要进行分包

 将较大的IP包分为多个小包,并给每个小包打上标签
 每个小包的IP协议头的16位标识(id)都是相同的
 每个小包IP协议头的三位标志字段中,第一位保留,第二位置0,表示允许切片,第三位表示结束标志(最后一个小包置1,其余的小包置0)
 到达对端将这些小包按顺序重组,拼装在一起返回给传输层
 一但这些小包中任意一个丢失,接受端重组就会失败,但是IP层不负载重传(IP协议无连接,不可靠)

最大传输单元(Maximum Transmission Unit,MTU)_第3张图片

三、MTU对TCP的影响

 TCP的一个数据报也不可能无限大,还是受制于MTU,TCP单个数据报的最大消息长度,称为MSS
 TCP在建立连接的过程中,双方会进行MSS协商
 最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度受限于数据链路层的MTU)
 双方在发送SYN的时候会在TCP的头部写入字节能支持的MSS值
 然后双方得知对方的MSS值之后,选择较小的作为最终MSS
 MMS的值就在TCP首部的40字节变长选项中(kind=2)

对于TCP协议而言,这个协议是面向连接的协议,对于TCP协议而言它非常在意数据包的到达顺序以及是否传输中有错误发生,所以有些TCP应用对分片有要求——不能分片(DF)。

四、MTU对UDP的影响

一旦UDP携带的数据超过1472(1500-20(IP首部)-8(UDP首部)),那么UDP数据就会在网络层被分成多个IP数据报

对于UDP协议而言,这个协议本身是无连接的协议,对数据包的到达顺序以及是否正确到达不甚关心,所以一般UDP应用对分片没有特殊要求。

五、MTU和MSS的关系

MTU:最大传输单元,由不同的数据链路层对应物理层产生的(硬件规定),以太网的MTU=1500
MSS:最大分节大小,为TCP数据包每次传输的最大数据分段大小
MSS的取值受限于MTU

如果网络层要传输一个数据报比链路层的MTU还大的话,就会进行IP分片,使得每一个分片的大小都不大于MTU。但是过多的分片后,对于对端的重组又是一个比较麻烦的事情,所以为了能尽量避免IP分片,在上一层提出了分段(MSS),它尽量保证传输给IP层的数据报都小于MTU,使得在IP层不用对数据报进行分片,减小了过多分片时处理的消耗时间。

路径MTU和上面的相似,只是要知道整个路径上最小的MTU

数据链路层信息单元和MTU

链路层的信息单元是帧,链路层不同协议对最大帧长度(最大传输单元:MTU)做了限制,以太网协议规定最大帧长度是1500Byte。

OSI各层的信息单元对应如下:
段——————–>传输层
数据包、数据报——>网络层
数据帧—————>数据链路层

如果IP数据报的长度大于MTU,这时候就需要对IP数据报进行分片处理后再经由链路层转发。