深入解析 Linux ethtool 网络接口管理命令
ethtool 工具概述
在 Linux 系统中,ethtool 是一款强大的网络接口管理工具,主要用于查询和控制网络驱动程序及底层硬件参数。通过该工具,系统管理员可以深入排查网络故障、优化网卡性能以及调整物理层和数据链路层的配置。
核心查询功能
1. 查看网卡基础状态
不带任何参数运行 ethtool 可以获取指定网络接口的工作状态、支持的速率以及自协商信息。
$ ethtool enp3s0
Settings for enp3s0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: Symmetric
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
MDI-X: off
Link detected: yes
2. 获取驱动与固件信息
使用 -i 参数可以查看网卡当前加载的内核驱动模块、版本号以及总线信息,这在排查驱动兼容性或升级固件时非常有用。
$ ethtool -i enp3s0
driver: igb
version: 5.4.0-k
firmware-version: 1.6.2
expansion-rom-version:
bus-info: 0000:03:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no
3. 统计网络流量与错误
通过 -S 参数可以读取网卡硬件级别的收发数据包统计。这对于分析丢包、CRC 错误或网络拥塞至关重要。
$ ethtool -S enp3s0
NIC statistics:
rx_packets: 18458920
tx_packets: 22893021
rx_bytes: 4589713008
tx_bytes: 8165825901
rx_broadcast: 102
tx_broadcast: 204
rx_multicast: 3401
tx_multicast: 1205
rx_errors: 0
tx_errors: 0
rx_dropped: 0
tx_dropped: 0
collisions: 0
rx_crc_errors: 0
rx_frame_errors: 0
tx_carrier_errors: 0
网卡参数配置
1. 调整速率、双工与自协商
使用 -s 参数可以手动干预网卡的物理层行为。例如,强制指定千兆全双工模式并开启自协商:
$ sudo ethtool -s enp3s0 speed 1000 duplex full autoneg on
注意:强制关闭自协商(autoneg off)在某些交换机环境下可能导致链路无法建立,建议仅在明确网络对端配置的情况下使用。
2. 修改硬件卸载 (Offload) 特性
现代网卡支持将部分网络协议栈的处理工作卸载到硬件上,以降低 CPU 负载。使用 -K 参数可以调整这些特性:
# 开启 TCP 分段卸载 (TSO) 和通用分段卸载 (GSO)
$ sudo ethtool -K enp3s0 tso on gso on
3. 调整 Ring Buffer 大小
增大网卡的 RX/TX 环形缓冲区可以缓解高并发下的丢包问题。使用 -G 参数进行修改:
$ sudo ethtool -G enp3s0 rx 4096 tx 4096
物理端口定位
在机房管理多网口服务器时,寻找特定网卡对应的物理网线是一项挑战。ethtool 提供了 -p 参数,通过让网卡物理指示灯闪烁来辅助定位:
# 让 enp3s0 对应的网口指示灯闪烁 15 秒
$ sudo ethtool -p enp3s0 15
配置的持久化方案
通过命令行使用 ethtool 所做的修改在系统重启后会失效。以下是几种常见的持久化方法:
方案一:修改网络接口配置文件 (适用于 CentOS/RHEL 7 及更早版本)
在 /etc/sysconfig/network-scripts/ 目录下对应的接口配置文件中添加 ETHTOOL_OPTS 变量:
# /etc/sysconfig/network-scripts/ifcfg-enp3s0
TYPE=Ethernet
BOOTPROTO=static
NAME=enp3s0
DEVICE=enp3s0
ONBOOT=yes
# 添加以下行以持久化 ethtool 设置
ETHTOOL_OPTS="speed 1000 duplex full autoneg on"
方案二:通过开机启动脚本执行
将命令写入系统的初始化脚本中。例如,在支持 rc.local 的系统中,赋予执行权限并添加命令:
# /etc/rc.d/rc.local
#!/bin/bash
/usr/sbin/ethtool -s enp3s0 speed 1000 duplex full autoneg on
exit 0
方案三:使用 NetworkManager (适用于现代 Linux 发行版)
对于使用 NetworkManager 的系统,推荐使用 nmcli 来管理 ethtool 特性,以确保配置与网络状态同步:
$ sudo nmcli connection modify "Wired connection 1" ethtool.feature-tso on
$ sudo nmcli connection up "Wired connection 1"
常用参数速查表
| 参数 | 功能描述 |
|---|---|
ethtool [devname] |
显示网卡的标准状态与链路信息 |
-s / --change |
修改网卡基础参数(速率、双工、自协商等) |
-i / --driver |
显示网卡驱动及固件版本信息 |
-d / --register-dump |
导出网卡硬件寄存器状态(用于深度排错) |
-e / --eeprom-dump |
读取网卡 EEPROM 芯片数据 |
-E / --change-eeprom |
修改网卡 EEPROM 中的字节数据(需谨慎使用) |
-r / --negotiate |
重启 N-WAY 自协商过程 |
-p / --identify |
触发物理端口指示灯闪烁,用于物理定位 |
-t / --test |
执行网卡硬件自检(支持 online/offline 模式) |
-S / --statistics |
显示网卡硬件级别的收发统计与错误计数 |
-k / --show-offload |
查询协议卸载(Offload)特性的开启状态 |
-K / --offload |
配置协议卸载特性(如 TSO, GSO, UFO) |
-g / --show-ring |
查询 RX/TX 环形缓冲区(Ring Buffer)参数 |
-G / --set-ring |
修改 RX/TX 环形缓冲区大小 |
-c / --show-coalesce |
显示中断合并(Coalesce)选项,用于优化 CPU 中断频率 |
-C / --coalesce |
配置中断合并参数 |