2023年12月6日发(作者:)
关于 MTU
详细解释
因特网协议允许IP分片,这样就可以将数据报分成足够小的片段以通过那些最大传输单元小于该数据报原始大小的链路了。这一分片过程发生在IP层(OSI模型的第三层,即网络层),它使用的是将分组发送到链路上的网络接口的最大传输单元的值。原始分组的分片都被加上了标记,这样目的主机的IP层就能将分组重组成原始的数据报了。 在因特网协议中,一条因特网传输路径的“路径最大传输单元”被定义为从源地址到目的地址所经过“路径”上的所有IP跳的最大传输单元的最小值。或者从另外一个角度来看,就是无需进一步分片就能穿过这条“路径”的最大传输单元的最大值。 RFC 1191描述了“路径最大传输单元发现方法”,这是一种确定两个IP主机之间路径最大传输单元的技术,其目的是为了避免IP分片。在这项技术中,源地址将数据报的DF(Don't Fragment,不要分片)位置位,再逐渐增大发送的数据报的大小——路径上任何需要将分组进行分片的设备都会将这种数据报丢弃并返回一个“数据报过大”的ICMP响应到源地址——这样,源主机就“学习”到了不用进行分片就能通过这条路径的最大的最大传输单元了。 不幸的是,越来越多的网络封杀了ICMP的传输(譬如说为了防范DDOS攻击)——这使得路径最大传输单元发现方法不能正常工作,其常见表现就是一个连接在低数据流量的情况下可以正常工作,但一旦有大量数据同时发送,就会立即挂起(例如在使用IRC的时候,客户会发现在发送了一个禁止IP欺骗的ping之后就得不到任何响应了,这是因为该连接被大量的欢迎消息堵塞了)。而且,在一个使用因特网协议的网络中,从源地址到目的地址的“路径”常常会为了响应各种各样的事件(负载均衡、拥塞、断电等等)而被动态地修改——这可能导致路径最大传输单元在传输过程中发生改变——有时甚至是反复的改变。其结果是,在主机寻找新的可以安全工作的最大传输单元的同时,更多的分组被丢失掉了。 对于时下大多数使用以太网的局域网来说,最大传输单元的值是1500字节。但是像PPPoE这样的系统会减小这个数值,这就使得在使用最大传输单元发现方法时可能会产生这样的结果:一些处于配置不当的防火墙之后的站点变得不可达了。对于这种情况,还是可能找到变通的方法的,但这取决于你控制的是网络的哪一部分。这些方法包括改变用来在防火墙一端建立TCP连接的第一个分组的MSS(Maximum Segment Size,最大分段大小)。 对于一些支持老版本以太网协议的IBM系统(例如XSeries),可能只有在把最大传输单元设为1492之后才能在当下常见的局域网上进行运作。
如何检测网关的MTU
在本机打开dos窗口,执行: ping -f -l 1472 192.168.0.1 其中192.168.0.1是网关IP地址,1472是数据包的长度。请注意,上面的参数是“-l”(小写的L),而不是“-1”。 如果能ping通,表示数据包不需要拆包,可以通过网关发送出去。 如果出现: Packet needs to be
fragmented but DF set. 表示数据包需要拆开来发送。此时,减少数据包长度,再执行上面的ping命令。从1400到1472之间多试几次,就能找到合适的数据包长度了。把数据包长度加上数据包头28字节,就得到MTU的值。 如果检测到网关的MTU值是1500,不需要修改。
如果网关有防火墙ping不通,可以试试直接把MTU设为1400。
如何修改本机的MTU
修改方法如下:
Windows平台下
1、运行regedit
2、打开:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParametersInterfaces 3、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)。 填写前请先把基数设为十进制。 设置好后,需要重启机器才能生效。
Windows 7(XP、Vista未实测)
1、使用管理员权限运行cmd
2、使用netsh interface ipv4 show subinterfaces命令看看MTU以及本地连接名称。
3、使用netsh interface ipv4 set subinterface "连接名" mtu=300 store=persistent (注:这里的连接名是你使用上面命令看到的MTU值对应的这个连接名,他在右边显示。)
附:1、此方法不用重启;
2、如是ipv6就将上面的ipv4改成ipv6
Linux下可使用如下命令修改 需要root权限
ifconfig 网卡 MTU值
如 ifconfig eth0 mtu 1460
MaxMTU是最大的TCP/IP传输单元,在TCP/IP协议中,将要传输的数据分成较小的组进行传输,每个组的大小为576字节。Windows默认的字节为1500,这是以太网的分组标准。ADSL使用的 PPPoE略小于这个数值,一般为1492。而某些网站采用的MaxMTU大于1492,所以,可能导致某些网页不能访问。修改Windows默认的MaxMTU可以解决这个问题。不论是 PC机上安装的PPPoE软件或者是内置在Modem的 PPPoE软件,在使用中都有可能遇到这个问题。 如果使用路由器出现此种情况, 请在 防火墙配置 => 基本设定 里, 将MTU改为手工, 设置为 1492 即可. 那如何确定路由器从ISP获得的 MTU 为 1500
MTU (最大传输单元)是网络设备传输的信息包最大值。对于各种路由器,最佳的MTU值通常都是默认值。有时,更改MTU值可提高设备工作性能,做起来很简单,但事实上,这样做往往会导致出现其他问题。最好保持MTU不变,除非有以下情况出现:
当连接不到ISP或者不能使用其他的因特网服务时,且他们的技术支持人员建议更改MTU值
当您使用 VPN,遇到性能问题时可以考虑更改MTU
为了提高网络的某些性能,使用了可优化MTU 值的应用程序,而这引起了连通性和其他性能方面的问题
一个信息包被发送到MTU值较小的设备时,将被分解为若干小块。理论上,在所有电脑、交换机、路由器及您能访问到的因特网的所有设备上的MTU值应该设置为同一大小。但是您不能控制因特网上的 MTU 值,而事实上在一个局域网中的最佳MTU值取决于硬件、软件、无线接口等等。
在一种情形下修改MTU的大小可使设备很好地工作, 但在其他方面却可能引起性能和连接性问题
当具有不同MTU值的设备相互通信时,信息包将会被分成多个以便能传给具有最小的MTU值的设备
Windows XP自动设置MTU ,换句话说,它使MTU对于各种应用综合性能最优化。微软的文章解释了使用Windows XP的宽带用户不能连接到ISP的原因
一旦网络设备分解了一个信息包,此信息包在到达目的地前一直保持分解的状态
各种应用下的最佳MTU值
设置MTU大小是一个反复试验的过程: 由最大值1500开始下降,直至问题解决。使用下列值之一或许能解决一些由MTU值引起的问题:
1500. 以太网信息包最大值,也是默认值。是没有PPPoE和VPN 的网络连接的典型设置。是各种路由器、网络适配器和交换机的默认设置
1492. PPPoE 的最佳值
1472. 使用 ping 的最大值 (大于此值的信息包会先被分解)
1468. DHCP的最佳值
1430. VPN和PPTP 的最佳值
576. 拨号连接到ISP的标准值
下面给出宽带网络下利用Ping命令测试本地最佳MTU值的方法。
测试思路如下:在广域网上,大小超出ISP要求的数据包将无法传输,而路由器则会根据本机MTU值自动将大小不符合要求的数据进行分包处理再进行传输,所以我们可以通过向Internet上的某台主机发送一个定长数据包,并且不允许路由器更改其大小的方式去检查该数据包能否被正常传输,如果数据包小于或等于ISP的MTU值时,传输就能正常进行,而如果发送的数据包大于ISP使用的MTU值时,传输就会失败,这样我们就能通过不断发送不同大小的数据包最终得到ISP端的MTU大小,而这个数据再加上28字节的包头信息就是我们需要的最终MTU值。
测试步骤如下:
1. 拨号上网,并打开“开始”菜单→“程序→附件→命令提示符”。
2. 输入命令“ping –l 14xx –f ”,这里我们解释一下命令参数的含义:
* –l 14xx参数:发送一个定长数据包,14xx是要测试的包大小,如前所述,ADSL的MTU一般在1450与1492之间,第3步中将每次更换一次该值。上面的式子中,-l是L的小写(不是1喔)。
* –f 参数:通知路由器不能私自更改该数据包大小。
* :任意一台Internet上的主机,也可使用其它主机名或IP地址。
3. 观察反馈结果并判断ISP的MTU值。
1) 第一次发送测试包,包长1492
如图1,提示数据包过大,需要分包,因此判断该数值(1492)大于ISP的MTU,应降低包大小。 2) 第二次发送测试包,包长1480
如图2,数据包大小降为1480,提示数据包过大,因此判断该值(1480)仍大于ISP的MTU,还应继续降低。
3) 第三次发送测试包,包长1470
如图3,数据包大小降为1470,提示该数据包可以正常传输,因此判断ISP的MTU值在1470~1480之间。
4) 第四次发送测试包,包长1475
如图4,数据包大小升为1475,提示数据包过大,因此判断MTU数值在1470~1475之间。
5) 第五次发送测试包,包长1472
如图5,数据包大小升为1472,提示可正常传输,因此判断MTU数值在1472~1475之间。
6) 第六次发送数据包,包长1473
如图6,数据包大小升为1473,提示因数据包过大无法传输,因此,判断出该ISP的MTU值为1472。
4. 修改路由器的MTU值
上面得到的MTU值不能直接用于本地设置上,还应在此基础上加上28(数据包头大小28字节),因此最终在WAN设置页面修改MTU大小为1480。
经过测试,通过修改路由器中的MTU值可以成功解决通过路由器上网后“能上QQ不能打开网页”、“部分网站或链接打不开”、“MSN登录不了”(请将MTU置为1480)、“Email无法发送附件”等问题。


发布评论