以前使用主机用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主机的方式,比如:
这就说明MTU值1500过大,逐步减小,直到ping成功:
这时就找到了最大的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[最大传输单位]