几个概念:

  1. 二层MTU:
    Maximum Transmit Unit,最大传输单元,指数据链路层提供给其上层(IP/MPLS等)最大传输数据的大小,单位字节。
    不同的协议要求的MTU大小不同。比如:

    • IEEE802.3/802.2最大MTU 1492.
    • 以太网口的MTU,范围是64-1518字节,过大或过小的以太网帧都可能被丢弃。
    • IP协议会根据二层MTU的值来决定是否对数据进行分片,两台PC之间的路由会经过很多跳,其中MTU最小的决定了传输速率。
  2. IP MTU:范围是(68-65535)
    网络层的上层协议(如TCP/IP),网络层IP协议会检查每个从上层协议下来的数据包的大小,并根据本机MTU的大小决定是否作“分片”处理。
    分片会导致传输性能降低,另外有些高层要求本层数据包不能切片,则会在IP数据包包头里面加上一个标签:DF(Do not Fragment)。这样会造成,当这个数据包传输过程中遇到MTU小于IP数据包的情况,转发设备就会根据要求丢弃这个数据包,然后返回一个错误信息给发送者。

  3. MSS:Maximum Segment Size ,最大分段大小,不包含TCP头和 option,只包含TCP Payload ,TCP用来限制自己每次发送的最大分段尺寸。MTU大小影响TCP分片的大小。一般需要尽量减少TCP分片,否则发送和接收路由器需要花费更多的资源来处理分片和重组。
    MSS: Maximum Segmeant Size 最大传输大小,在TCP协议中,MSS是可协商项.

  4. 三者的关系
    举例来说,MTU=1500,即IP包的尺寸<=1500,可以不分片从这个网络接口发送,否则就需要分片。
    公式如下:
    
    IP = IP Header + TCP = 20 + 1480 = 1500
    TCP = TCP Header + TCP Payload = 20 + 1460 = 1480
    这里TCP Payload = 1460 = MSS 

就是说:
MSS= MTU - IP Header - TCP Header = 1500 - 20 -20 =1460

TCP 在三次握手的第一个SYN消息中有一个选项option 4,通告双方的MSS,如果一方MSS=1460,而另一方的MSS=9000,会选择较小的一方即1460作为这个TCP连接的MSS:

MSS =minimum{MSSs ,M***}
则 MSS = 最小值 { 1460,8960 }= 1460

注意,MSS只是解决路径上第一跳的MTU问题,不能保证由于路径中有更小的MTU导致的分片。

什么时候用配置大MTU值?

比如在数据中心,MTU经常设置为大于8192字节。 这是因为NFS网络服务器之间的数据读取、存储最小单位是磁盘扇区,而服务器扇区多用8192,而且为了避免被分片,发送这些扇区数据的IP包的DF设置为1,意思是不允许分片。这里整个数据中心的MTU都要设置为大于8192,再加上IP 头,UDP头,文件系统头等,一般设置9000就好了。

案例:
在华为路由器上,接口配置mtu 9000,我们可以看到:端口下配置的是IP MTU,配置成9000字节后, 二层MTU自动变成9600.

[~ar01]disp int g0/2/0
GigabitEthernet0/2/0 current state : UP (ifindex: 6)
Line protocol current state : UP
Last line protocol up time : 2019-10-08 05:14:19
Link quality grade : GOOD
Route Port,The Maximum Transmit Unit(L3) is 9000 bytes, The Maximum Receive Unit(L2) is 9600 bytes
Internet Address is .....
[~ar01] disp ip int g0/2/0
GigabitEthernet0/2/0 current state : UP
Line protocol current state : UP
The Maximum Transmit Unit : 9000 bytes
input packets : 1470020, bytes : 93544273, multicasts : 0


在思科NCS上,端口配置MTU 9014,可以看到:MTU is 9014 (9000 is available to IP)

RP/0/RP0/CPU0:ncs01#sh int tenGigE 0/0/0/12
Mon Nov 25 16:19:27.790 UTC
TenGigE0/0/0/12 is up, line protocol is up
Interface state transitions: 9
Hardware is TenGigE, address is b402.1615.a030 (bia b402.1615.a030)
Internet address is ...
MTU 9014 bytes, BW 10000000 Kbit (Max: 10000000 Kbit)
reliability 235/255, txload 0/255, rxload 0/255
...
RP/0/RP0/CPU0:ncs01#sh ipv4 int tenGigE 0/0/0/12
Mon Nov 25 16:20:09.183 UTC
TenGigE0/0/0/12 is Up, ipv4 protocol is Up
Vrf is default (vrfid 0x60000000)
Internet address is 94.247.86.237/31
MTU is 9014 (9000 is available to IP)
...