moneyslow.com

改变网卡的速度和双工

没有比购买一个完全的Linux兼容网卡更好的Linux投资了。大部分的Linux厂商在他们网站上都有一份兼容的硬件列表:在开始连接你的机器到网络之前请仔细阅读它。如果你没有找到任何在本地的计算机商店可以买到的型号,那么同系列也是可以的。大多数网卡都能正常工作,但只有完全兼容的可为您提供无差错的,持续的吞吐量。

Linux缺省会在网卡连接到路由器上时自动协商判断网卡的速度和双工。配置一个路由器端口自动协商速度和双工往往是不足够的,因为不同的协议标准执行上常会有分歧。

实际上,网卡即使协商失败也会工作,但这通常会导致在网卡上使用ifconfig -a命令时看到许多冲突类型的错误和极低的性能。在故障排除时不要只把这类错误局限于协商失败;问题也可能是坏的网卡,路由器端口,或者网线导致的。


使用mii-tool

mii-tool是一个原始的设置网卡速度和双工的Linux工具。它以注定会被抛弃,而由新的ethtool命令取而代之,但是很多老的网卡只支持mii-toll,所以你还需要知道它。不带任何参数的执行命令会产生一个简要的状态报告,如下面样例所示,对于不支持的网卡将提示Operation not supported信息。mii-tool不兼容的网卡往往仍然可以工作,但是你需要根据制造商的指南来设定速度和双工,而不能自动协商。

[root@bigboy tmp]# mii-tool

SIOCGMIIPHY on 'eth0' failed: Operation not supported

eth1: 100 Mbit, half duplex, link ok

[root@bigboy tmp]#

通过-v参数使用verbose模式,你可以获得更多更详细的信息。在这个例子中,协商正常,网卡选择100Mbps,全双工模式(FD)。

[root@bigboy tmp]# mii-tool -v

eth1: negotiated 100baseTx-FD, link ok

  product info: vendor 00:10:18, model 33 rev 2

  basic mode: autonegotiation enabled

  basic status: autonegotiation complete, link ok

  capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD

  advertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD

  link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control 

[root@bigboy tmp]#

 


mii-tool设置网卡的速度参数
通过-F参数强行指定网卡的速度和双工,选项包括:100baseTx-FD100baseTx-HD10baseT-FD,或者10baseT-HD。记住,你可能丢失网络连接如果你网卡的强制速度/双工模式与路由器不匹配的话:

[root@bigboy tmp]# mii-tool -F 100baseTx-FD eth0

不幸的是,除了把这个命令放到/etc/rc.local文件中让它在每次启动结束前执行,或者创建你自己的启动脚本如果你需要它更早被执行,我们没有办法让它在重启后永久生效。


使用ethtool

ethtool命令被指定在不久的将来替代mii-tool,目的是支持新的网卡。

用设备名称作为参数,命令可以提供其状态。这里我们可以看到设备eth0没有设置自动协商并设定为100 Mbps速度,全双工。在输出的顶端列出了其所支持的模式。

[root@bigboy tmp]# ethtool eth0

Settings for eth0:

       Supported ports: [ TP MII ]

       Supported link modes:   10baseT/Half 10baseT/Full

                               100baseT/Half 100baseT/Full

       Supports auto-negotiation: Yes

       Advertised link modes:  10baseT/Half 10baseT/Full

                               100baseT/Half 100baseT/Full

       Advertised auto-negotiation: No

       Speed: 100Mb/s

       Duplex: Full

       Port: MII

       PHYAD: 1

       Transceiver: internal

       Auto-negotiation: off

       Supports Wake-on: g

       Wake-on: g

       Current message level: 0x00000007 (7)

       Link detected: yes

[root@bigboy tmp]#

 


ethtool设置网卡的速度参数

不同于mii-toolethtool可以通过设定设备配置脚本里的ETHTOOL_OPTS变量而永久生效。在下面例子里,设定了在下次重启时设置100 Mbps,全双工和不自动协商:

#

# File: /etc/sysconfig/network-scripts/ifcfg-eth0

# 

DEVICE=eth0

IPADDR=192.168.1.100

NETMASK=255.255.255.0

BOOTPROTO=static

ONBOOT=yes

ETHTOOL_OPTS="speed 100 duplex full autoneg off"
					

你可以通过ifupifdown命令关闭和再激活设备,来测试这些参数。这些设定也可以通过在命令行中使用-s参数改变,后面跟上设备名称和相关配置参数。

[root@bigboy tmp]# ethtool -s eth1 speed 100 duplex full autoneg off
						

[root@bigboy tmp]#

Linuxman命令提供了ethtool选项的更详细说明,但你可以通过只输入ethtool命令获得一个快速的摘要。

[root@bigboy tmp]# ethtool

...

...

        ethtool -s DEVNAME \

                [ speed 10|100|1000 ] \

                [ duplex half|full ] \

                [ port tp|aui|bnc|mii|fibre ] \

...

...

[root@bigboy tmp]#


关于双工设置

缺省地,Linux网卡会跟交换机协商速度和双工设定。这通过交换叫做FLPFast Link Pules)的电子信号实现。当速度和双工被强制指定的时FLP就不会发送。当网卡使用自动协商模式而且检测到一个健康的,可用的连接时却没有收到FLP信号,它会抱错并把自己的双工设为半双工模式,有时它也会设置速度到低一级的值。因此,这样可能交换机端口是强制100 Mbps全双工,但是自动协商的网卡把自己设为100Mbps半双工,结果产生错误。同样情况也可能发生在交换机上,如果交换机端口设为自动协商而服务器网卡强制100 Mbps全双工。最好是要么强制交换机端口和网卡都是自动协商,要么强制设定相同的速度和双工值。

Exit mobile version