ethtool是Linux中查询和配置以太网卡参数的核心命令行工具,通过ioctl与内核驱动交互,支持查看驱动信息、链路状态、统计收发数据,设置速率、双工、自动协商、流控及环形缓冲区等,广泛用于网络调优与故障排查。

在 Linux 中,ethtool 是查看和配置网卡参数的核心工具,但需注意:ethtool 本身没有 -A 这个选项。你可能混淆了命令格式——正确的参数是 -a(小写 a),用于显示或设置网卡的**自协商(Autonegotiation)与流控(Flow Control)能力与当前状态**。
确认流控是否启用:使用 ethtool -a
执行以下命令可查看指定网卡(如 eth0)的流控相关配置:
sudo ethtool -a eth0
输出示例:
Pause parameters for eth0: Autonegotiate: on RX: on TX: on
其中关键字段含义如下:
- Autonegotiate:是否启用自协商(影响流控能否协商成功)
- RX:接收方向流控是否启用(即本端是否接受对端发来的 PAUSE 帧)
- TX:发送方向流控是否启用(即本端是否在拥塞时向对端发送 PAUSE 帧)
流控生效的前提条件
仅显示为 on 并不保证物理层实际启用了流控。它必须同时满足:
- 本端和对端均启用流控(RX/TX 都为
on) - 双方自协商成功(
Autonegotiate: on且链路已 up) - 网卡驱动和固件支持 IEEE 802.3x 流控(主流千兆/万兆网卡基本都支持)
- 交换机端口也开启流控(若对接的是交换机,需单独配置其对应端口)
临时启用或关闭流控(需 root 权限)
如需修改,用 -a 加参数设置(例如启用 RX/TX 流控并开启自协商):
sudo ethtool -a eth0 autoneg on rx on tx on
注意:该设置在重启网卡或系统后失效。如需永久生效,需写入网络配置文件(如 /etc/network/interfaces、/etc/sysconfig/network-scripts/ifcfg-eth0 或 systemd-networkd 的 .link 文件),具体方式取决于发行版和网络管理工具。
验证流控是否实际工作
ethtool -a 显示的是配置状态,不是实时运行状态。要确认物理层是否真正在收发 PAUSE 帧,可结合以下方法:
- 用
ethtool -S eth0 | grep pause查看驱动统计计数器(如rx_pause_frames、tx_pause_frames),非零值说明已有流控帧交互 - 抓包验证:
tcpdump -i eth0 ether proto 0x8808可捕获 IEEE 802.3x PAUSE 帧(类型 0x8808) - 观察业务是否因缓冲区满而丢包减少(间接印证)


















