2009年3月30日星期一

解决ubuntu 8.10 Intrepid网速低的问题

ubuntu
8.10上网速度慢,本来以为就这速度,可是同样环境下,和别人的XP一比,明显慢很多。
究其原因:ubuntu 8.10
自动连接时将网卡的mtu值自动设置成了576,而在多数据网关,比如一些路由的mtu值是
1492或其它的。这样网关在转发数据时就重新封装。
MTU是Maximum Transmission
Unit的缩写。意思是网络上传送的最大数据包。MTU的单位是字节。
大部分网络设备的MTU都是1500。如果本机的MTU比网关的MTU大,大的数据包就会被拆开来传送,这样会产生很多数据包碎片,增加丢包率,降低网络速度。把本机的MTU设成比网关的MTU小或相同,就可以减少丢包。
测试网关的MTU大小:
  在本机打开dos窗口,执行:ping -f -l 1472 192.168.0.1
  其中192.168.0.1是网关IP地址,1472是数据包的长度。请注意,上面的参数是"-l"(小写的L),而不是"-1"。
  如果能ping通,表示数据包不需要拆包,可以通过网关发送出去。
  如果出现:Packet needs to be fragmented but DF set.
  表示数据包需要拆开来发送。此时,减少数据包长度,再执行上面的ping命令。从1400到1472之间多试几次,就能找到合适的数据包长度了。把数据包长度加上数据包头28字节,就得到MTU的值。

  如果检测到网关的MTU值是1500,不需要修改。
  如果网关有防火墙ping不通,可以试试直接把MTU设为1400。


解决办法:设置网卡的mtu值为 网关一磁的就可以了。一般为 1492 。
1:手动设置
$ sudo ifconfig eth0 mtu 1492
其中eth0 是网卡名称,如果你的不是这个可以做相应的更改,
不过这样每次重新连接时双要设置一下,比较麻烦。下面我提供的一个劳永逸的办法:

2:网络连接(网卡被激活时)自动设置 mtu 值
在/etc/network/if-up.d目录下新建一个脚本文件,比如 setmtu
$ sudo vi /etc/network/if-up.d/setmtu

将下面的代码加入setmtu 脚 本中
#!/bin/sh
ifconfig "$IFACE" mtu 1492
保存退出,然后给这个脚本中可执行权限
$ sudo chmod a+x /etc/network/if-up.d/setmtu
其中 "$IFACE" 是一个变量,返回的是当前激活的网卡名称 比如 eth0 eth1 。
这样即使你有多张网卡,有网卡被激活时就自动运行这个个脚本 设置mtu值为1492了

如果本地的DNS服务器不是很稳定(症状:打开firefox网页总是"页面被重置",每页都要刷新无数次,opera呢?是反应慢):
sudo apt-get install dnsmasq
1.编辑/etc/dnsmasq.conf,搜索"listen-address"把注释号去掉,并修改为:
listen-address=127.0.0.1
2.编辑/etc/dhcp3/dhclient.conf,修改为:
#supersede domain-name "fugue.com home.vix.com";
prepend domain-name-servers 127.0.0.1;
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, host-name,
netbios-name-servers, netbios-scope;
3.编辑/etc/resolv.conf,在第一行添加 :
nameserver 127.0.0.1
sudo /etc/init.d/dnsmasq restart

网友回复:
我也有这种问题,改了mtu,还是不行,最后自己添加了一个网络连接,设置跟原来的一样,问题没了,很诡异。

没有评论: