之前花了点钱把家里的网线换成超五类的,虽然我不太明确自己买到的是不是超五类的,但的确是支持了千兆以上的传输速度。唯一的缺憾是,主力的笔记本T510居然只有10MB,偶尔甚至只有2MB左右的速度,明明跟小笔记本相同的网卡,可为什么速度就是慢呢?在网上查了好久,试了各种方法,现在把过程记录下来。
尝试
更新驱动 无效
虽然最后证实没有效果,但是至少对linux的驱动更熟悉了一些。
-
lspci 查看网卡型号
-
https://downloadcenter.intel.com/product/36771/Intel-82577-Gigabit-Ethernet-PHY 列表中找出对应os,下载相应驱动
-
编译 。首先安装依赖:
sudo apt install linux-headers-$(uname -r) # 编译需要headers文件
解压进入src文件夹,使用make install编译。该步骤会: - 删除/lib/modules/4.9.0-8-amd64/kernel/drivers/net/ethernet/intel/e1000e/e1000e.ko原驱动。 - 添加/lib/modules/4.9.0-8-amd64/updates/drivers/net/ethernet/intel/e1000e/e1000e.ko新驱动。
sudo rmmod e1000e # 卸载原驱动 sudo modprobe e1000e # 加载新驱动 lsmod | grep -i e1000 # 查看驱动 sudo dmesg |grep -e eth0 # 输出内核信息
试了几个不同的驱动版本,要么编译失败,要么编译成功但无效果,总之最后可以确认跟驱动没有关系。
关闭ipv6 无效
在网上有人说到上网速度慢是由于解析ipv6导致的,虽然也知道这跟传输速度几乎没有关系,但还是试一下吧。
- /etc/sysctl.conf 加
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1
- /etc/hosts 注释掉ipv6相关
# ::1 localhost ip6-localhost ip6-loopback # ff02::1 ip6-allnodes # ff02::2 ip6-allrouters
手动设置模式 无效
T510有线网卡支持1000M,但实际只有100M。
sudo ethtool -s eth0 autoneg off speed 1000 duplex full # 设置网卡连接速率。不行,1000以上网速无法手动设置。 sudo ifdown eth0; sudo ifup eth0 # 重启网卡
-
autoneg on时,默认速率为100MB。
-
autoneg off时,若手动设置为1000M,连接不上。
-
autoneg off时,若手动设置为100M,可以连接。
Express Card接口外接网卡
试了各种方法,大致确认是硬件的问题。于是开始找替代,网上很多USB接口的千兆网卡,但是这台老笔记本的USB接口都是2.0的,极限20MB的速度也发挥不出来千兆网卡的速度。突然发现自己有个Express Card的接口,这个本子用了快十年了,从来就没想过这个接口对我会有什么作用。网上有很多Express Card转USB3.0的接口,于是想有没有Express Card接口的外接网卡呢。搜了一下,京东淘宝几乎都没有,但是咸鱼上面找到两个,55包邮到手,不用任何驱动,插上去解决一切问题。
然后新的问题冒出来,现在一台本子上面两个有线网卡加一个无线网卡,该怎么管理呢?折腾了一下,大致方案如下:
一个有线网卡
使用
ifplugd 管理有线网卡的热插拔。
sudo apt install ifplugd sudo dpkg-reconfigure ifplugd
一个有线网卡/一个无线网卡
使用
wicd
同时管理有线/无线网卡,但无法同时管理多个有线,可以实现有线/无线切换。
两个有线网卡/一个无线网卡
使用
ifplugd/wicd
ifplugd管理有线网卡eth0,wicd管理有线网卡eth1和无线网卡。
- interface
关闭所有接口的自动开启,使用ifplugd管理有线网卡eth0。
# auto eth0 # allow-hotplug eth0 iface eth0 inet static address 192.168.1.2 netmask 255.255.255.0 gateway 192.168.1.1
-
wicd
设置有线网卡eth1和无线网卡的静态地址和自动连接。
-
存在问题
连接无线网卡后再连接有线网卡eth0时,无线并不断开,流量走无线网卡。有线网卡eth1和无线网卡切换没问题。
修改
/etc/ifplugd/action.d/ifupdown文件,使wicd/ifplugd更好的配合:
#!/bin/sh set -e case "$2" in up) # 首次开机时,等到wicd.service启动后执行之后动作。 ERROR=$(LC_ALL=C wicd-cli -i | awk NR\ ==\ 1\{print\ \$1\}) while [ $ERROR = 'Error:' ] ;do sleep 2; ERROR=$(LC_ALL=C wicd-cli -i | awk NR\ ==\ 1\{print\ \$1\}) done STATE=$(LC_ALL=C wicd-cli -i | awk NR\ ==\ 1\{print\ \$3\}) TYPE=$(LC_ALL=C wicd-cli -i | awk NR\ ==\ 2\{print\ \$3\}) # 在使用ifplugd连接网络之前,断开网络连接,使网络脱离wicd的管理。 if [ $STATE = 'Not' ]; then /usr/bin/wicd-cli -zyx else if [ $TYPE = 'Wired' ]; then /usr/bin/wicd-cli -zx elif [ $TYPE = 'Wireless' ]; then /usr/bin/wicd-cli -yx else /usr/bin/wicd-cli -zyx fi fi /sbin/ifup --force $1 ;; down) /sbin/ifdown --force $1 # 在使用ifplugd断开网络之后,重新连接有线网络,使网络恢复wicd的管理。 /usr/bin/wicd-cli -zc ;; esac