网络接口卡(NIC,Network Interface Card),通常简称“网卡”,是计算机与网络通信的核心硬件组件。网卡速度(即链路速度,Link Speed)指的是网卡与交换机或路由器之间协商的最大数据传输速率(如 100Mbps、1Gbps、10Gbps 等),是衡量网络性能的基础指标之一。
学习C语言课程
在 Linux 系统中,准确检查网卡速度对以下场景至关重要:
- 网络故障排查:当网络延迟高或吞吐量低时,确认网卡是否工作在预期速度(如千兆网卡是否降级为百兆)。
- 性能优化:验证服务器或工作站是否达到硬件规格(如是否启用 10Gbps 链路)。
- 资源规划:评估现有网络带宽是否满足业务需求(如文件传输、数据库同步等)。
本文将详细介绍10 种在 Linux 中检查网卡速度的方法,涵盖命令行工具、系统文件、内核日志等多维度,并对比“标称速度”与“实际吞吐量”的差异,帮助读者快速定位和解决网络问题。
目录#
- 前置准备
- 1.1 确认网卡接口名称
- 1.2 必要权限与工具依赖
- 方法一:使用 ethtool(推荐)
- 方法二:使用 mii-tool( deprecated,仅兼容旧系统)
- 方法三:使用 nmcli(NetworkManager 用户)
- 方法四:使用 lshw(硬件信息查询工具)
- 方法五:读取 /sys/class/net 系统文件
- 方法六:通过 dmesg 查看内核启动日志
- 方法七:使用 ifconfig 与 grep 组合(基础状态检查)
- 方法八:使用 ip link 命令(链路状态查询)
- 方法九:测试实际吞吐量(而非标称速度)
- 10.1 使用
iperf3测试点对点吞吐量 - 10.2 使用
speedtest-cli测试公网速度
- 10.1 使用
- 常见实践与最佳实践
- 11.1 区分“标称速度”与“实际吞吐量”
- 11.2 多工具交叉验证结果
- 11.3 排查速度异常的常见原因
- 总结
- 参考资料
1. 前置准备#
在检查网卡速度前,需完成以下准备工作:
1.1 确认网卡接口名称#
Linux 中的网卡接口名称通常遵循以下命名规则:
- 传统命名:
eth0、eth1(以太网)、wlan0(无线)。 - 现代一致性命名:
enp0s3(基于主板 PCI 位置)、ens33(基于 BIOS 设备索引)等(由systemd引入)。
查看所有网卡接口:
# 方法 1:使用 ip 命令(推荐,现代 Linux 标配)ip link show # 方法 2:使用 ifconfig(需安装 net-tools 包,部分系统默认不包含)ifconfig -a # 方法 3:使用 NetworkManager(图形化系统常用)nmcli device status示例输出(ip link show):
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff此处eth0即为目标网卡接口名称。
1.2 必要权限与工具依赖#
- 权限:部分命令(如
ethtool、lshw)需要 root 权限,建议使用sudo执行。 - 工具安装:若命令不存在,通过包管理器安装:
# Debian/Ubuntusudo apt install ethtool net-tools lshw iperf3 # CentOS/RHELsudo yum install ethtool net-tools lshw iperf3 # Arch Linuxsudo pacman -S ethtool net-tools lshw iperf3
2. 方法一:使用ethtool(推荐)#
ethtool是 Linux 中最常用的网卡配置与诊断工具,几乎支持所有主流网卡驱动,可直接查询链路速度、双工模式、链路状态等核心信息。
基本用法#
sudo ethtool <网卡接口名称>示例:检查eth0速度#
sudo ethtool eth0输出解读(关键部分)#
Settings for eth0: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full # 网卡支持的最大速度(1Gbps) Supported pause frame use: No Supports auto-negotiation: Yes # 支持自动协商速度 Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised pause frame use: No Advertised auto-negotiation: Yes Speed: 1000Mb/s # 当前协商的链路速度(关键信息) Duplex: Full # 双工模式(全双工/半双工) Port: Twisted Pair PHYAD: 0 Transceiver: internal Auto-negotiation: on Link detected: yes # 链路是否已连接核心参数说明#
Speed: 1000Mb/s:当前网卡速度(即链路速度,1Gbps)。Duplex: Full:全双工模式(可同时收发 数据),半双工(Half)会严重影响性能。Link detected: yes:网卡与交换机/路由器物理连接正常(若为no,需检查网线或接口)。
进阶:仅显示速度相关信息#
sudo ethtool eth0 | grep -iE 'speed|duplex|link'3. 方法二:使用mii-tool( deprecated,仅兼容旧系统)#
mii-tool(Media Independent Interface Tool)是早期 Linux 用于配置网卡物理层(PHY)的工具,已被ethtool取代,但部分老旧系统(如 CentOS 6、Debian 7)仍可能保留。
学习C语言课程
基本用法#
sudo mii-tool <网卡接口名称>示例输出#
sudo mii-tool eth0eth0: negotiated 1000baseT-FD flow-control, link ok输出解读#
1000baseT-FD:1000Mbps(T 表示双绞线),FD 表示全双工(Full Duplex)。link ok:链路正常。
注意:mii-tool不支持 10Gbps 及以上速度,且无法显示部分高级参数(如自动协商状态),建议优先使用ethtool。
4. 方法三:使用nmcli(NetworkManager 用户)#
nmcli是 NetworkManager 的命令行工具,适用于使用 NetworkManager 管理网络的系统(如 Fedora、Ubuntu 桌面版、CentOS 8+)。
学习C语言课程
基本用法#
nmcli device show <网卡接口名称>示例:检查eth0速度#
nmcli device show eth0 | grep -i speed示例输出#
GENERAL.SPEED: 1000 Mbit/s说明#
GENERAL.SPEED字段直接显示当前链路速度(单位:Mbit/s)。- 若输出为
0 Mbit/s,表示链路未连接或速度协商失败。
5. 方法四:使用lshw(硬件信息查询工具)#
lshw(List Hardware)是一款功能强大的硬件信息查询工具,可显示网卡的硬件规格(如支持的最大速度)及当前状态。
基本用法#
sudo lshw -class network # 查看所有网络设备信息示例输出(过滤网卡部分)#
sudo lshw -class network | grep -A 10 "eth0" *-network description: Ethernet interface product: 82545EM Gigabit Ethernet Controller (Copper) vendor: Intel Corporation physical id: 0 bus info: pci@0000:02:00.0 logical name: eth0 version: 01 serial: 52:54:00:12:34:56 size: 1Gbit/s # 当前速度 capacity: 1Gbit/s # 网卡支持的最大速度 width: 64 bits关键字段#
size: 1Gbit/s:当前协商速度。capacity: 1Gbit/s:网卡硬件支持的最大速度(若size < capacity,可能存在链路协商问题)。
6. 方法五:读取/sys/class/net系统文件#
Linux 的sysfs文件系统(/sys)提供了内核与用户空间的接口,部分网卡驱动会在/sys/class/net/<接口>/speed文件中暴露当前速度。
基本用法#
cat /sys/class/net/<网卡接口名称>/speed示例#
# 查看 eth0 速度cat /sys/class/net/eth0/speed1000 # 单位:Mbps注意事项#
- 并非所有网卡驱动都支持此接口(如部分虚拟网卡或老旧驱动),若文件不存在或返回
0,需使用其他方法。 - 若链路未连接,可能返回
0或报错。
7. 方法六:通过dmesg查看内核启动日志#
内核启动时会记录网卡初始化信息,包括驱动加载、速度协商结果等,可通过dmesg命令查看历史日志。
基本用法#
dmesg | grep -iE '<网卡接口名称>.*speed'示例#
dmesg | grep -iE 'eth0.*speed'[ 3.456789] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX输出解读#
Link is Up 1000 Mbps Full Duplex:启动时协商的速度为 1Gbps 全双工。- 若日志中无速度信息,可能是驱动未记录或日志已轮转(可查看
/var/log/dmesg文件)。
8. 方法七:使用ifconfig与grep组合(基础状态检查)#
ifconfig是传统网络状态查询工具(需安装net-tools包),本身不直接显示速度,但可辅助判断网卡是否“启动”(UP),为速度检查提供前提。
基本用法#
ifconfig <网卡接口名称>示例输出#
ifconfig eth0eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255 ether 52:54:00:12:34:56 txqueuelen 1000 (Ethernet) RX packets 12345 bytes 12345678 (11.7 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 6789 bytes 7890123 (7.5 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0说明#
flags=4163<UP,...>:UP表示网卡已启用,RUNNING表示链路已连接(若缺失,速度检查无意义)。collisions 0:无冲突(半双工模式下可能出现非零值,需关注)。
9. 方法八:使用ip link命令(链路状态查询)#
ip link是iproute2工具集的一部分(现代 Linux 推荐),用于管理网络接口状态,可间接判断链路是否正常,但不直接显示速度。
基本用法#
ip link show <网卡接口名称>示例输出#
ip link show eth02: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff关键状态字段#
<UP,LOWER_UP>:UP( 软件层启用),LOWER_UP(物理层链路正常,即网线已连接)。- 若缺失
LOWER_UP,需先排查物理连接(网线、交换机端口)。
10. 方法九:测试实际吞吐量(而非标称速度)#
上述方法均显示“链路速度”(如 1Gbps),即网卡与交换机协商的理论最大速度。但实际 数据传输速率(吞吐量)受协议开销、网络拥塞、硬件性能等影响,可能远低于标称值。
学习计算机课
10.1 使用iperf3测试点对点吞吐量#
iperf3是一款专业的网络吞吐量测试工具,需在两台设备上配合使用(一台作为服务器,一台作为客户端)。
步骤 1:在服务器端启动iperf3服务#
iperf3 -s # -s 表示 server 模式步骤 2:在客户端连接服务器测试#
iperf3 -c <服务器 IP> # -c 表示 client 模式,指定服务器 IP示例输出(客户端)#
[ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-10.00 sec 1.09 GBytes 938 Mbits/sec 0 1.27 MBytes输出解读#
938 Mbits/sec:实际吞吐量约为 938Mbps(接近 1Gbps 标称速度,正常,因存在协议开销)。- 若吞吐量远低于标称值(如 1Gbps 网卡仅 100Mbps),需排查:
- 交换机端口速度限制(如强制为 100Mbps)。
- 网线类型(Cat5e 支持 1Gbps,Cat5 仅支持 100Mbps)。
- 服务器/客户端 CPU 瓶颈(iperf3 测试会消耗 CPU)。
10.2 使用speedtest-cli测试公网速度#
若需测试与公网的实际速度(如下载/上传速度),可使用speedtest-cli(基于 Speedtest.net 服务)。
安装#
# 方法 1:使用 pip(Python 包管理器)pip install speedtest-cli # 方法 2:直接下载脚本(需 curl/wget)curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | python3 -基本用法#
speedtest-cli示例输出#
Download: 94.58 Mbit/s Upload: 45.23 Mbit/s说明#
- 公网速度受 ISP 带宽限制,与网卡标称速度无关(如 1Gbps 网卡若 ISP 仅提供 100Mbps 宽带,实际下载速度约 90-100Mbps)。
11. 常见实践与最佳实践#
11.1 区分“标称速度”与“实际吞吐量”#
- 标称速度(Link Speed):网卡与交换机协商的物理链路速度(如 1Gbps),通过
ethtool等工具查询。 - 实际吞吐量:真实数据传输速率(如 iperf3 测试的 938Mbps),受协议、硬件、网络环境影响。
- 经验值:1Gbps 链路的实际吞吐量通常为 900-950Mbps(TCP 协议),UDP 可接近 1Gbps。
11.2 多工具交叉验证结果#
若某工具显示速度异常(如标称 1Gbps 但ethtool显示 100Mbps),建议用其他工具交叉验证:
# 示例:同时使用 ethtool、nmcli、sysfs 验证sudo ethtool eth0 | grep Speednmcli device show eth0 | grep SPEEDcat /sys/class/net/eth0/speed若结果一致,则速度正常;若不一致,可能是驱动或工具兼容性问题。
11.3 排查速度异常的常见原因#
当网卡速度低于预期(如 1Gbps 网卡仅工作在 100Mbps),按以下步骤排查:
- 检查网线:确保使用 Cat5e 及以上规格(支持 1Gbps),避免过长(建议 ≤100 米)。
- 检查交换机端口:登录交换机管理界面,确认端口未被强制限速(如配置为 100Mbps)。
- 重启网络设备:重启网卡、交换机或路由器,重新触发速度协商。
- 更新驱动:老旧网卡驱动可能存在兼容性问题,可通过
lshw -class network查看网卡型号,到厂商官网下载最新驱动。 - 检查双工模式:半双工(Half Duplex)会导致严重性能下降,通过
ethtool确认双工模式为Full。
12. 总结#
本文介绍了 9 种检查 Linux 网卡速度的方法(含 1 种吞吐量测试),各工具特点总结如下:
| 工具/方法 | 优势 | 局限性 | 适用场景 |
|---|---|---|---|
ethtool | 功能全面,支持所有速度,参数丰富 | 需要 root 权限 | 所有 Linux 系统(推荐首选) |
nmcli | 简洁,适合 NetworkManager 用户 | 依赖 NetworkManager | 桌面版 Linux(如 Ubuntu、Fedora) |
lshw | 可查看硬件最大支持速度 | 输出冗长,需过滤 | 硬件规格验证 |
/sys/class/net | 无需额外工具,直接读取内核信息 | 部分驱动不支持 | 脚本自动化检查 |
iperf3 | 测试实际吞吐量,定位性能瓶颈 | 需要两台设备配合 | 网络性能优化 |
根据实际需求选择合适工具,并结合多维度验证,可快速准确判断网卡速度状态。
13. 参考资料#
- Linux 内核文档:sysfs 网络接口
- ethtool 官方手册
- iperf3 官方文档
- NetworkManager 文档:nmcli
- Linux 网卡命名规则