一、问题概述:
在我们的实际组网中经常遇到此类问题:
1)        某些网站浏览没有问题,而某些网站浏览非常慢甚至无法浏览。QQ等正常没有任何问题。
2)        无法下载大的文件。
3)        EMAIL无法发大附件。
二、问题分析:
一般所来是由于路径MTU不匹配的缘故,特别是在经过了×××链路的时候,譬如ADSL PPPOE拨号,L2TP,PPTP,IPSEC,GRE隧道等情况。下面就以GRE隧道为例来说明MTU的问题,其他隧道协议类似只是头部字节不同而已。
拓扑结构:
×××网关1和2之间建立了一条GRE隧道,×××1 ×××2的外网口均为以太网口,MTU为1500。PC与SERVER通过该GRE隧道互访。
分析过程:
        PC在ping –f –l 1448 SERVER 的时候可以ping 通,而ping –f –l 1449 SERVER的时候却收到报文不可分片错误。
        PC出来的IP报文长度为1448+8(ICMP)+20(IP),到达×××网关1,×××网关1发到GRE隧道口,封装GRE头(4),再加上外层 IP头,到达×××网关外层以太口,这时IP报文的长度已经变为:1448+8+20+4+20=1500字节,刚好等于以太口的MTU,于是被顺利传 送。而ping 1449时,到达外层以太口为1501字节,超出了1500的MTU,又因为报文DF位被设置,于是就只能丢弃改报文,并返回DF错误。
上 述实验中出现此结果是因为DF被置位,导致无法分片。但是如果DF没有置位则可以正常的通过但是会出现分片的现象。不过现在很多服务器譬如WEB为了提 高效率以及安全问题等所发出的包是不允许分片的。并且大多防火墙、IPS等设备,这些设备通常也是不允许分片通过的。因此就出现了有些网站无法浏览,大文 件无法传输的情况。
解决方法:
假设PC建立了到SERVER的HTTP连接,PC希望从SERVER下载一个大的网页。SERVER 接收到PC的请求后开始发送大网页文件,其IP的 DF位置1,不允许分片,IP报文长度为1500字节。到达×××网关2的外网口(以太)后,×××网关2发现其长度超过了1500个字节,于是将其丢 弃,并给SERVER发回一个目的地址不可达的ICMP信息,同时指出“MTU of next hop: 1500”。PC接收到该消息后,又按照1500字节对外发送,又被丢弃,于是就形成了循环,无法通讯。
根据上述的分析,很容易得到如下解决方 式,在×××网关2的出接口设置MTU为1500-4-20=1476,这样×××网关2返回ICMP不可达消息时 将给出”MTU of next hop: 1476”。SERVER将以1476作为自己的最大MTU对外发送,到达×××网关1,封装GRE和外层IP头后就不会超过1500而顺利发到对端。这 个是下载问题的解决,如果要解决上传的问题,在相应方向的接口修改MTU即可。当然也可以修改TCPMSS,不过这个是影响到TCP的windows从而 减小了包的长度。另外修改操作系统的最大MTU值也是可行的,不过比较麻烦。
 

 

MTU ( 最大传输单元 ) 是网络设备传输的信息包最大值。对于 UCOM 的设备,最佳的 MTU 值通常都是默认值。有时,更改 MTU 值可提高设备工作性能,做起来很简单,但事实上,这样做往往会导致出现其他问题。最好保持 MTU 不变,除非有以下情况出现:

当连接不到 ISP 或者不能使用其他的因特网服务时 , 且他们的技术支持人员建议更改 MTU 值
当您使用 ×××, 遇到性能问题时可以考虑更改 MTU
为了提高网络的某些性能,使用了可优化 MTU 值的应用程序,而这引起了连通性和其他性能方面的问题
一 个信息包被 发送到 MTU 值较小的设备时,将被分解为若干小块。理论上 , 在所有电脑、交换机、路由器及您能访问到的因特网的所有设备上的 MTU 值应该设置为同一大小。但是您不能控制因特网上的 MTU 值 , 而事实上在一个局域网中的最佳 MTU 值取决于硬件、软件、无线接口等等。
在一种情形下修改 MTU 的大小可使设备很好地工作 , 但在其他方面却可能引起性能和连接性问题
当具有不同 MTU 值的设备相互通信时,信息包将会被分成多个以便能传给具有最小的 MTU 值的设备
Windows XP 自动设置 MTU , 换句话说 , 它使 MTU 对于各种应用综合性能最优化。微软的文章解释了使用 Windows XP 的宽带用户不能连接到 ISP 的原因
一旦网络设备分解了一个信息包,此信息包在到达目的地前一直保持分解的状态
 

各种应用下的最佳MTU值

设置 MTU 大小是一个反复试验的过程 : 由最大值 1500 开始下降,直至问题解决。使用下列值之一或许能解决一些由 MTU 值引起的问题 :

1500. 以太网信息包最大值,也是默认值。是没有 PPPoE 和 ××× 的网络连接的典型设置。是 NETGEAR 路由器、网络适配器和交换机的默认设置
1492. PPPoE 的最佳值
1472. 使用 ping 的最大值 ( 大于此值的信息包会先被分解 )
1468. DHCP 的最佳值
1430. ××× 和 PPTP 的最佳值
1、MTU和MSS的关系:
MSS是TCP协议在三次握手阶段协商的一个参数,是TCP协议本身一次所能传输的数据块的大小,他和WIN参数一起影响TCP的效率。MSS+TCP头部+IP头部<=MTU ,这样才可以保证TCP发出的数据不分片的传输。如果大于MTU则必然发生分片。
2、MTU和VLAN的关系:
由于VLAN的机理是在以太网的帧头部加入了4个字节的VLAN TAG信息,因此在支持TRUNK链路的接口上要求MTU不小于1518字节。才能保证以太接口1514的MTU值。
3、MTU和各种×××的关系:
因×××要对原有的IP或者是TCP/UDP数据进行封装,因此也增加了数据的长度。这样也就导致了实际的××× 虚接口的MTU值的减小。具体的减少值不通的×××也不相同。
4、MTU与MPLS MTU
MPLS只在二层帧头和三层包头之间加入了4个字节的MPLS垫层,因此和×××的道理是一样的也较少了实际的MTU数。特别是多层次标签的MPLS((一般为2层)如MPLS L2 L3×××),这样就更加减少了MTU的数值。
5、MTU与PMTU
PMTU是对到目的地的路径的最小MTU探测机制,原理是利用了IP头部的DF位和ICMP差错报文。具体的过程自己搜索吧。



转载于:https://blog.51cto.com/steellych/1652796