再度遭遇MTU导致的无法上网问题

以前使用主机用ADSL拨号,然后用internet共享的方式带另外1台机器上网(用交叉线联网),曾经提到过铁通ADSL共享上网无法访问某些网页问题的解决的问题,但现在不是过年了嘛,家里又新添了一台电脑,现在一共是3台了,再用交叉线联网效率就太低了,于是乎搞了一个SOHO宽带路由器(TP-LINK TL-R402M)来用,谁知道又遇到了可恶的MTU问题。

首先宽带路由器和铁通的ADSL猫地址冲突,铁通的ADSL猫默认内网地址是192.168.1.1,宽带路由器也是,不过这个问题好解决,因为宽带路由器是可配置的,将地址改为192.168.0.1就好了,并且由于这个地址和原来共享上网设置的网关地址相同,所以客户端上网的机器配置也不用作什么改动……这些配置都很简单的。

然后就是我原来那台主机出现了问题了,就是和原来MTU导致的问题一样,需要修改MTU为合适的值才能正常上网。要说也有意思,这台机器直接拨号上网就没问题,通过宽带路由器上网就有问题,也许是因为MTU设置是针对网卡的吧,然而DLS拨号自动分配地址或者安装PPPOE协议的时候会自动设置正确的MTU值的缘故。

幸好我还有能上网的机器。。。查询之后,把结果总结在这里吧。不过突然想到铁通也许是在通过MTU限制用户同时带多台机器上网,因为原来也发现用交叉线共享的时候,先联网后主机再拨号就不行,先拨号再联网就可以用,有趣的铁通思维。

找到MAXMTU值

主要是用ping主机的方式,比如:

C:\WINDOWS>ping 192.168.0.1 -f -l 1500 Pinging 192.168.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 192.168.0.1: Packets: Sent = 4, Received = 0, Lost = 4 (100% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms

这就说明MTU值1500过大,逐步减小,直到ping成功:

C:\WINDOWS>ping 192.168.0.1 -f -l 1464 Pinging 192.168.0.1 with 1464 bytes of data: Reply from 192.168.0.1: bytes=1464 time=10ms TTL=64 Reply from 192.168.0.1: bytes=1464 time<10ms TTL=64 Reply from 192.168.0.1: bytes=1464 time<10ms TTL=64 Reply from 192.168.0.1: bytes=1464 time<10ms TTL=64 Ping statistics for 192.168.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值。在这里要注意两个问题: 1、如果ping的是外网地址,那么得到的数值就直接是MTU最大值,但如果ping的是内网主机,比如ping宽带路由器的地址,得到的数值就需要加上28,也就是协议在封包的时候加的头,才是MAXMTU值。 2、有的时候MTU值过大,不提示“Packet needs to be fragmented but DF set.”,而是timeout,解决方式:可以通过ping内网网关间接找出MAXMTU,参见1。

更改MAXMTU设置

在这里忽略掉98的设置方法吧,现在还有人用98么?

1、启用PMTUD的backhole传输 打开注册表,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\分支下,找到主键 EnablePMTUBHDetect ,如果没有则创建这个Dword值,将其键值设置为1,保存后重启计算机。(未测试)

2, 手工设置网卡的MTU值 打开注册表,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\ Parameters\Interfaces\主键下,下面会有几个文件夹,分别代表机器的安装的每一块网卡,依次浏览每个文件夹,并察看窗口右边IPAddress或其他的键值,找到你连接 Internet所用网卡的文件夹,进入,找到一个名为MTU的主键,如果没有则创建这个Dword值,修改键值为十进制的MAXMTU(就是你用上面的方法找到的MTU值),重启。(不重启好像无效,我就因此浪费了2个小时 :-()

参考资料

修改MTU值的方法[ system win98 win2000] MTU数值完全功略-通过2000做NAT后部分网站不可访问问题解决 MTU[最大传输单位]

Leave a Reply

Your email address will not be published. Required fields are marked *