ethtool 是查看和配置网卡物理层状态的核心工具,可查速率、双工、链路检测、驱动固件版本等;支持强制设置协商参数、读寄存器、软复位phy、查看卸载特性及统计计数器,但需注意兼容性与持久化问题。

查网卡基本信息:用 ethtool 看实时状态
直接运行 ethtool eth0(把 eth0 换成你的真实网卡名)就能看到速率、双工模式、是否连接、驱动型号等关键信息。它不依赖内核模块加载状态,比 ifconfig 或 ip link 更贴近物理层。
常见错误现象:输出里 Link detected: no 但网线明明插着——先检查网线、交换机端口、网卡指示灯,再确认是否被 ifconfig eth0 down 过;Speed: Unknown! 通常是网卡未协商成功或驱动不支持读取。
- 用
ip -s link show eth0可以补看收发包统计,但看不到物理协商细节 -
ethtool -i eth0查驱动和固件版本,升级驱动前必跑这句 - 部分虚拟网卡(如
veth、macvlan)不支持ethtool,会报No such device或直接退出
改网卡速率和双工:用 ethtool -s 强制协商
手动设速率只在调试或对接老设备时需要,日常应让网卡自动协商(autoneg on)。强制设置后若对端不匹配,会导致丢包、中断连接甚至链路反复 up/down。
典型命令:ethtool -s eth0 speed 1000 duplex full autoneg off。注意参数顺序无关,但 autoneg off 必须显式写上,否则 speed 和 duplex 不生效。
- 设置前先用
ethtool eth0确认当前Supports auto-negotiation是 yes,否则硬设无效 - 某些网卡(如部分 Intel I210)在
autoneg off后不支持 10Mbps 半双工,强行设会静默失败 - 配置不会持久化,重启或
ifdown/ifup后丢失,需写进/etc/network/interfaces(Debian)或nmcli(RHEL)中
看网卡驱动日志和寄存器:用 ethtool -d 和 -r
ethtool -d eth0 输出网卡内部寄存器快照,用于排查硬件级异常,比如 PHY 寄存器显示 Link status 为 0 但物理灯亮——可能 PHY 供电异常或固件卡死;ethtool -r eth0 是软复位 PHY,比 ifconfig down/up 更底层,能解决部分协商僵死问题。
风险提示:直接读寄存器需 root 权限,且不同芯片寄存器布局差异大,没文档别瞎猜字段含义;-r 可能导致短暂断连,生产环境慎用。
- 搭配
dmesg | grep -i eth0看内核是否报link down或PHY reset failed -
ethtool -S eth0显示驱动统计计数器(如rx_missed_errors),比寄存器更易解读,优先看这个 - 部分 Realtek 网卡在
ethtool -d中会显示乱码,属驱动限制,不是你操作错
判断网卡是否支持高级特性:用 ethtool -k 和 -K
ethtool -k eth0 列出所有 offload 特性(如 tcp-segmentation-offload、rx、tx)当前开关状态;ethtool -K eth0 tso on 可开启 TCP 分段卸载。这些功能能降低 CPU 负载,但某些旧防火墙或中间设备不兼容 TSO/GSO,会导致分片异常。
容易踩的坑:开启 rx(接收端聚合)后,抓包工具(如 tcpdump)看到的包长可能大于 MTU——那是驱动在内核里合并过的,实际线缆上仍是小包。
- 虚拟化场景下,KVM/QEMU 默认关闭大部分 offload,
ethtool -k会显示全 off,这是预期行为 -
ethtool -K eth0 gso off关闭 GSO 后,若应用仍发大包,内核会在协议栈里分片,性能下降明显 - 某些 Broadcom 网卡在启用
lro(Large Receive Offload)后,netstat -s的 TCP 统计会失真,建议关掉
真实调试时,ethtool 的输出项多、字段隐晦,最常被忽略的是 Supported link modes 和 Advertised link modes 的差异——前者是网卡能力,后者是当前通告给对端的能力,两者不一致往往就是协商失败的根源。










