2010年3月14日星期日

MTU用途及设置

转:http://blog.htexam.com/u/xiaoyuercxh/archives/2007/2.shtml

MTU,即Maximum Transmission Unit(最大传输单元),此值设定TCP/IP协议传输数据报时的最大传输单元。设置合适的MTU值可以解决“部分网站打不开”、“上网速度慢”等问题,并且可以适当提升上网速度。
设置多大的MTU值取决于你的上网方式,不同的上网方式支持不同的MTU,下面列出了一些上网方式的MTU值:
EtherNet(一般上网方式,默认值):1500
PPPoE/ADSL:1492
Dial Up/Modem:576

问题一:知道了我的上网方式,如何设置MTU值?
1. 在 『开始』>『运行』中,键入regedit,点确定;
2. 选择『HKEY_Local_Machine』>『SYSTEM』>『CurrentControlSet』>『Services』>『Tcpip』>『Parameters』>『interface』;
3. 在 interface 底下可能有很多的选项,你一个一个的去看,会有一个选项与你的网卡的 IP 相同,那个就是你要挑选的选项啦!然后同样的在该选项上选择『编辑』>『新建』>『DWORD值』之后,建立一个名为『MTU』的DWORD,然后双击修改,选择十进制,填入合适 MTU 值,确定!大功告成!

问题二:我不知道自己的上网方式,如何确定MTU值呢?
ping -f -l 1500 127.0.0.1

C:\WINDOWS>ping -f -l 1500 127.0.0.1
Pinging 127.0.0.1 with 1500 bytes of data:
Packet needs to be fragmented but DF set.
Packet needs to be fragmented but DF set.
Packet needs to be fragmented but DF set.
Packet needs to be fragmented but DF set.
Ping statistics for 127.0.0.1:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss), Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms

上面的式子中,-l 是 L 的小写(不是 1 喔),1500 是我们要测的 MTU 值,结果出现了 Packet needs to be fragmented but DF set. 这个东西,那表示MTU值太大了,你需要更小的 MTU 值才行!好啦!那假设我们使用 1464 来测试时:

C:\WINDOWS>ping -f -l 1464 127.0.0.1
Pinging 127.0.0.1 with 1464 bytes of data:
Reply from 127.0.0.1: bytes=1464 time=10ms TTL=128
Reply from 127.0.0.1: bytes=1464 time<10ms TTL=128
Reply from 127.0.0.1: bytes=1464 time<10ms TTL=128
Reply from 127.0.0.1: bytes=1464 time<10ms TTL=128
Ping statistics for 127.0.0.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 10ms, Average = 2ms
结果出现了回应了!这表示这一个 MTU 值是可行的!不过,强烈建议找出可行的最大 MTU 值!这样一来,在设定的时候,才可以达到最佳的网速!

找出 MTU 值:利用上面这个方法找到的数值还不是 MTU 喔!由于一些封包上面的问题,上面这个值再加上 28 才是我们所需要的 MTU 值!所以,在上面的例子中,我们所需要的 MTU 值是 1464+28=1492!

一般来讲,设计好本机的MTU值,可以解决部分网站打不开的情况,但是如果你的共享主机或路由器的MTU设置有问题,有时问题仍然存或,或者出现网速过慢的情况。合理的设置路由器与本机的MTU值,就可以完全解决上述问题,使上网速度达到最大化。
---------------------------

其它Ping命令的参数说明
-a 将地址解析为电脑NetBIOS名。

-n 发送指定个数的数据包。通过这个命令可以自己定义发送的个数,对衡量网络速度有很大帮助。能够测试发送数据包的返回平均时间及时间的快慢程度。默认值为4。选购服务器(虚拟主机)前可以把这个作为参考。

-l 发送指定大小的数据包。默认为32Byte,最大值是65500Byte。

-f 在数据包中发送“不要分段”标志,数据包就不会被路由上的网关分段。默认情况下,发送的数据包都会通过路由分段再发送给对方,加上此参数后路由就不会再分段处理了!

-i 将“生存时间”字段设置为TTL指定的值。指定TTL值在对方的系统里停留的时间。同时检查网络的运转情况。

-v 将“服务类型”字段设置为TOS(Type Of Server)指定的值。

-r 在“记录路由”字段中记录传出和返回数据包的路由。通常情况下,发送的数据包是通过一系列路由才到达目标地址的,通过此参数可以设定想探测经过路由的个数。限定能跟踪到9个路由。

-s 指定Count的跃点数的时间戳。与参数-r差不多,但此参数不记录数据包返回经过的路由,最多只记录4个。

-j 利用host-list指定的电脑列表路由数据包。连续电脑可以被中间网关分隔(路由稀疏源)IP允许的最大数量为9。

-k 利用host-list指定的电脑列表路由数据包。连续电脑不能被中间风头分隔(路由严格源)IP允许的最大数量为9。

-w timeout指定超时间隔,单位为ms。

target_name 指定要Ping的远程电脑名。

没有评论: