在尝试了修改Hosts文件,杀毒,清理垃圾文件,修改网络设置等一些列操作后,无果,很郁闷,在论坛发贴也没有解决问题。于是跑去问老师,果然姜还是老的辣,一开口就说到了本文重点:ADSL中的MTU值,首先,先补一下关于PPPOE中的MTU。 这段话源自:《Windows Server 2003 技术内幕(提高篇)》(ISBN 7-302-10332-1)
P471
PPPoE所施加的一个重要的限制就是消减了客户端能传输的最大帧大小。标准的Ethernet帧具有1500字节的有效负载荷,这个参数称为“最大传输单元”(Maximum Transmission Unit,MTU)。相反,由于PPPoE帧的header要占用6字节,还要用另外2个字节位来设置PPP协议ID,所以它的MTU为1492字节。
TCP/IP客户端协商建立的Web服务器的一个连接时,两个实体将协商一个MTU。这在正常情况下是1500字节。但是,假如客户端在一个使用PPPoE连接的服务器后面(该服务器在DSL服务器提供商处),PPPoE服务器就会丢弃帧,并向Web服务器返回一条"Internet Control Management Protocol ” (ICMP)消息,告诉它的MTU是1492。加入Web服务器被配置成拒绝ICMP(大多Web服务器都会这样设置),网页就无法正确地加载。
为了查实这种情况,一个好用的诊断技术是从客户端上对Web服务器执行Ping操作,并用 -l 开关了指定一个载荷大小,再用一个 -f 开关来禁止分割数据库。具体语法是:
ping -f -l 1492 <internet_host>
如果屏幕上返回一条 "Packet needs to be fragmented but DF set" 错误提示,你就知道已经超过了web服务器或者沿途的某个路由器的MTU设置。
为了避免产生此问题,你需要在位于PPPoE服务器背后的客户端上减小MTU值。为此,你既可以在每个客户端上进行设置,也可以在一个客户端上进行设置,然后使用Regedit将修改导出至一个文件,并采取一个登录脚本的方式,将文件应用于其他客户端。你需要改动的地方是:
项:HKLM_LOCAL_MACHINE | System | CurrentControlSet | Services | TCPIP | Paremeters | interfaces| 新建值:MTU 数据:1492 (REG_DWORD)十进制
设置多大的MTU值取决于你的上网方式,不同的上网方式支持不同的MTU,下面列出了一些上网方式的MTU值: EtherNet(一般上网方式,默认值):1500 PPPoE/ADSL:1492 Dial Up/Modem:576 看到这里,我想,会不会是model的MTU设置有问题呢,于是进入model的管理界面,但却并未发现有设置其MTU的选项经过老师的指点,认为有可能是作为ICS服务器的PC1的MTU设置有问题。立刻打开注册表,找到其物理网卡所在键值位置,惊奇的发现其MTU位置上的值居然是576,怪不得那些网站可以ping通却无法访问了。(下图值为我改后的MTU值)找到问题所在,直接将MTU改到1492,却依然无法访问微软等网站,看来只能手动测试合适的MTU值了。格式为:ping �Cf �Cl 1xxx [url]www.Microsoft.com[/url]* �Cf 参数:通知操作系统不能私自更改该数据包大小* �Cl 1xxx参数:发送一个定长数据包,1xxx是要测试的包大小 *[url]www.Microsoft.com[/url]:任意一台Internet上的主机,也可使用其它主机名或IP地址观察反馈结果并判断ISP的MTU值,如图,则表示MTU值太大了,你需要更小的 MTU 值才行!因为数据包拆分了如下图则表示这个数据包大小:1312是可行的!不过,强烈建议找出可行的最大 MTU 值!这样一来,在设定的时候,才可以达到最佳的网速!增加网络的利用率。在设置完MTU值后,又见到了久违的中关村,淘宝,兴奋ING至此,问题成功解决。在这里十分感谢岳老师的帮助^_^
本文出自 “激情因梦想而存在” 博客,请务必保留此出处http://struggle.blog.51cto.com/333093/80342