一般情况下,网卡会与交换机协商使用最高的速度进行连接,但是有些交换机相对较差的情况下,网卡会被限在 10M 或半双工下动作。即有可能出现以下的情况:

1、连接速度慢(LINUX / FREEBSD)
2、可以 PING 通自己,但 PING 不通外部机器(特别是 SOLARIS)

为避免这些问题的出现,可以强行将网卡的速度和工作模式设为 100M 全双工。


在 LINUX 下,如果使用 ifconfig 会出现错误使用:

# ifconfig eth0 media 100baseTx
port: SIOCSIFMAP: Operation not supported


此时,应该使用以下命令:

# mii-tool -F 100baseTx-FD eth0

或者在设定之前可以用以下命令查看网卡的当前情况:

# mii-tool eth0


-----

而在 FreeBSD 下面,可以直接使用 ifconfig 进行设置:

# ifconfig fxp0 media 100BaseTX mediaopt full-duplex


或直接将配置写入 /etc/rc.conf 里面,下次启动时也会生效。

ifconfig_fxp0="inet x.x.x.x netmask x.x.x.x media 100BaseTX mediaopt full-duplex"


-----

在 Solaris 下面,如果网卡不运行在全双工模式下,会出现可以 PING 通自己,而不通 PING 通别人的情况出现,而且设置会比较麻烦,SPARC 和 X86 架构下的操作也不一样。

SPARC 架构平台:

设置 /etc/system 文件:
set hme:hme_adv_autoneg_cap=0
set hme:hme_adv_100hdx_cap=0
set hme:hme_adv_100fdx_cap=1

或手工设置:
# ndd -set /dev/hme adv_autoneg_cap 0
# ndd -set /dev/hme adv_100hdx_cap 0
# ndd -set /dev/hme adv_100fdx_cap 1


X86 架构平台:(以 Intel Pro/100 为例)

修改 /kernel/drv/iprb.conf 配置文件:

# 加入
ForceSpeedDuplex=4;



结语:

网卡工作在全双工模式是很重要的,以前有不少的朋友问我在 FREEBSD 为什么都是百兆网,传文件都很慢?那就是因为没有强行将网卡设为全双工。一般情况下,网卡与交换机是可以正常协商,并使用最高的速率的,但并不是所有的情况都是这样完美。

在一个完全百兆的网络环境,建议网卡与交换机是否可以正常协商,也应手工将网卡设为 100M-FD,这样可以避免不必要的麻烦。