zt:一个由MTU引起的超级郁闷的问题及解决

原文:http://blog.chinaunix.net/u/7667/showart_1844746.html
偶的本本通过一个通过一个Tp-Link TR-WL541G无线路由器上网, 很长一段时间以来, 笔记本的Windows可以正常上网, 而Linux下则是有的网站可以上, 有的网站不可以上, 很多网站, 输完地址, 只要敲, 马上就出现出错信息.

升级过内核, 比较过内核参数, 关闭防火墙, 能想到的招数都用上了, 故障依旧.

今天晚上运行ifconfig的时候突然发现wlan0的MTU竟然是576:
wlan0 Link encap:Ethernet HWaddr 00:1a:73:81:cc:ec
inet addr:192.168.1.100 Bcast:255.255.255.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:576 Metric:1
RX packets:62 errors:0 dropped:0 overruns:0 frame:0
TX packets:126 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:5003 (4.8 KiB) TX bytes:37090 (36.2 KiB)

而别的网卡MTU设置都为1500. 运行命令
ifconfig wlan0 mtu 1500

后, 使用浏览器访问原来无法访问的网站竟然可以访问了. 实在是一个以外的惊喜.

当我删除wlan0对应的内核模块, 重新加载后, wlan0的mtu为1500, 运行dhclient 抓取地址后, wlan0的mtu就变成了576. 也就是说wlan0的默认mtu为1500, 经过dhcp分配地址后变成了576. 使用wireshark抓取dhcp时经过wlan0的软件包发现client向 dhcp server(无线路由器)请求了Interface MTU, 而dhcp server返回的Interface MTU为576.

修改/etc/dhcp3/dhclient.conf文件, 删除request后的"interface-mtu,"后, dhclient将不会向dhcp server请求Interface MTU, 问题解决.