百科名片
通信术语最大传输单元(MaximumTransmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。最大传输单元这个参数通常与通信接口有关(网络接口卡、串口等)。-----------------------------------------------------------------------------------------网络中一些常见链路层协议MTU的缺省数值如下:FDDI协议:4352字节以太网(Ethernet)协议:1500字节PPPoE(ADSL)协议:1492字节X.25协议(DialUp/Modem):576字节Point-to-Point:4470字节如果在IP层要传输一个数据报比链路层的MTU还大,那么IP层就会对这个数据报进行分片。一个数据报会被分为若干片,每个分片的大小都小于或者等于链路层的MTU值。当同一网络上的主机互相进行通信时,该网络的MTU对通信双方非常重要。但当主机间要通过很多网络才能通信时,对通信双方最重要的是通信路径中最小的MTU,因为在通信路径上不同网络的链路层MTU不同。通信路径中最小的MTU被称为路径MTU。----------------------------------------------------------------------------------------------------------------------------因特网协议允许IP分片,这样就可以将数据包分成足够小的片段以通过那些最大传输单元小于该数据包原始大小的链路了。这一分片过程发生在网络层(OSI模型的第三层),第四层为传输层,传输层是 OSI模型中最重要的一层,这里是根据窗口控制传输,而非MTU。传输协议同时进行流量控制或是基于接收方可接收数据的快慢程度规定适当的发送速率。除此之外,传输层按照网络能处理的最大尺寸将较长的数据包进行强制分割。例如,以太网无法接收大于1500字节的数据包。发送方节点的传输层将数据分割成较小的数据片,同时对每一数据片安排一序列号,以便数据到达接收方节点的传输层时,能以正确的顺序重组,该过程即被称为排序。它使用的是将分组发送到链路上的网络接口的最大传输单元的值。原始分组的分片都被加上了标记,这样目的主机的IP层就能将分组重组成原始的数据包了。在因特网协议中,一条因特网传输路径的“路径最大传输单元”被定义为从源地址到目的地址所经过“路径”上的所有IP跳的最大传输单元的最小值。或者从另外一个角度来看,就是无需进一步分片就能穿过这条“路径”的传输单元的最大值。==============================================================================Windows平台如何检测网关的MTU在本机打开dos窗口,执行: ping -f -l 1472 192.168.0.1其中192.168.0.1是网关IP地址,1472是数据包的长度。请注意,上面的参数是“-l”(小写的L),而不是“-1”。如果能ping通,表示数据包不需要拆包,可以通过网关发送出去。 如果出现: Packet needs to be fragmentedbut DF set.表示数据包需要拆开来发送。此时,减少数据包长度,再执行上面的ping命令。从1400到1472之间多试几次,就能找到合适的数据包长度了。把数据包长度加上数据包头28字节,就得到MTU的值。如果检测到网关的MTU值是1500,不需要修改。 如果网关有防火墙ping不通,可以试试直接把MTU设为1400。如何修改本机的MTU
修改方法如下:Windows平台下1、运行regedit2、打开:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParametersInterfaces3、Interfaces下有多个子项,每个子项对应一个网卡。请按如下方法选择网卡:A、确定本机用来连接Internet的网卡或拨号连接的IP,如192.168.0.19;B、用鼠标点击Interfaces上的子项,查看键值列表中的IPAddress项;C、如果IPAddress的键值与A中的IP相同,即192.168.0.19,则该子项就是要找的网卡。4、进入该子项,在右边的窗口里按鼠标右键,选择“新建”->“DWORD值”,输入名称“MTU”,按回车。再用鼠标双击“MTU”,弹出修改窗口,填入MTU的值(一般为十进制的1480)。填写前请先把基数设为十进制。 设置好后,需要重启机器才能生效。LINUX平台1、找到服务器的MTU值
使用netstat -i 来查看MTU的值
[root@asterisk ~]# netstat -i
Kernel Interface table
IfaceMTU Met RX-OKRX-ERR RX-DRPRX-OVR TX-OKTX-ERR TX-DRP TX-OVR Flg
eth0150006004100048841000 BMRU
lo1643606300063000 LRU
找到一台终端:输入以下命令:
ping -c (number) -M do -s (bytes) IP
其中number是次数、是封包大小。结果如下
Frag needed and DF set (mtu = 1500)
意思是说,这个封包的大小大于MTU能够接受的大小,如果要达到最佳化,那么MTU数值的设定要更小才行!继续使用1400來测试:
1408 bytes from 1.1.1.1: icmp_seq=0 ttl=64 time=3.15 ms
结果出现回应!这表示这个MTU值是可行的!不过,建议找出可行的最大MTU值!这样一來,在设定的时候,才可以达到最佳的网络速率!
最终MTU最佳数值为:
最佳MTU+28
对EtherNet来说:1472+28=1500
2、调整MTU值:
ifconfig eth0 mtu 1500
这样应该已经可以解決MTU无法搭配的问题
注:
MTU: Maximum Transmission Unit 网络最大传输单位。并不是越大越好,而是需要针对网络來进行最佳化
常见网络MTU