Linux网络运维:如何精准查看与排查网卡连接速率(百兆/千兆)

Linux网络运维:如何精准查看与排查网卡连接速率(百兆/千兆)

1. 项目概述:为什么需要确认网卡速率?

在服务器运维、网络调试甚至是家庭组网的过程中,确认网卡的实际连接速率是一个高频且基础的需求。你可能遇到过这些问题:内网传输文件速度远低于预期,怀疑是网线或交换机瓶颈;服务器部署后性能不达标,需要排查是否是网络I/O受限;或者仅仅是新装了一台机器,想确认一下它是否跑在了千兆(1000M)而非百兆(100M)的满血状态。

“linux查看网卡是100M还是1000M”这个标题,看似简单,背后却串联起了从物理层到系统层的多个知识点。它不仅仅是一个命令的查询,更是一个网络连通性健康检查的入口。一个合格的运维或开发人员,不能只满足于知道ethtool这个命令,更需要理解命令输出每一项的含义,知道在异常情况下如何层层递进地排查问题。本文将从一个老运维的视角,带你彻底搞懂在Linux下查看和确认网卡速率的所有门道,包括工具使用、输出解读、常见坑点以及一套完整的排查逻辑。

2. 核心工具与原理深度解析

在Linux世界中,获取网络接口详细信息的主流工具有两个:ethtoolip link(或它的前身ifconfig)。它们分工不同,ethtool是专门用于查询和设置网卡驱动及硬件参数的“专科医生”,而ip link更像是查看接口基本状态的“全科护士”。对于查看速率这种涉及物理层和链路层的参数,ethtool是我们的首选和必选工具。

2.1 ethtool:你的网卡诊断利器

ethtool命令需要root权限或sudo来执行,因为它直接与网卡驱动进行交互,读取底层寄存器信息。它的输出信息极为丰富,但对于速率的判断,我们主要关注两个部分:SpeedSupported link modes

安装与基本使用:大多数现代Linux发行版都预装了ethtool。如果未安装,可以使用包管理器快速安装:

  • Ubuntu/Debian:sudo apt-get install ethtool
  • CentOS/RHEL/Fedora:sudo yum install ethtoolsudo dnf install ethtool

基本语法是sudo ethtool <网络接口名>。接口名通常是eth0ens33enp0s3等,你可以通过ip link showifconfig -a来查看所有可用的接口名称。

2.2 关键输出字段解读

运行sudo ethtool eth0(以eth0为例),你会看到类似下面的输出。我们逐项拆解与速率相关的核心字段:

Settings for eth0: Supported ports: [ TP ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full 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 MDI-X: on (auto) Supports Wake-on: d Wake-on: d Current message level: 0x00000007 (7) Link detected: yes
  1. Speed: 1000Mb/s(当前速度): 这是最直接、最关键的字段。它明确告诉你网卡当前协商成功的链路速率。1000Mb/s表示千兆,100Mb/s表示百兆,10Mb/s表示十兆。这是判断问题的首要依据。

  2. Duplex: Full(双工模式): 双工模式与速率同等重要。Full代表全双工,数据可以同时收发;Half代表半双工,同一时间只能收或发。现代有线网络几乎都是全双工。如果这里显示Half,即使速率是千兆,实际性能也会大打折扣,并可能伴随大量碰撞(collision)错误。

  3. Supported link modes(支持的链路模式): 这列出了你的网卡硬件能力上支持的所有速率和双工组合。如上所示,这块网卡支持从10M半双工到1000M全双工的所有模式。这是网卡的“天赋”。

  4. Advertised link modes(通告的链路模式): 这是你的网卡在自动协商(Auto-negotiation)过程中,向对端设备(交换机、路由器等)“宣告”的自己愿意以哪些模式连接。通常,它会宣告所有支持的模式,以寻求最高兼容。

  5. Auto-negotiation: on(自动协商): 这个开关至关重要。当它为on时,网卡会通过发送快速链路脉冲(FLP)来和对端设备“商量”出一个双方都支持的最高速率和最佳双工模式。这是目前以太网连接的标准做法。如果关闭(off),就必须在两端手动强制设置相同的速率和双工模式,否则极易导致双工不匹配,引发严重的性能问题和丢包。

  6. Link detected: yes(链路检测): 这是基础中的基础。如果这里是no,那么所有速率、双工的讨论都失去了意义。它表示物理链路是否连通(网线已插好且对端设备开机并连接)。

注意ethtool显示的是链路层协商速率,即网卡和交换机端口之间协商的速度。这并不等同于你实际的文件传输速率(吞吐量)。实际吞吐量会受到TCP/IP协议开销、系统负载、磁盘I/O、对端设备性能、网络拥塞等多重因素影响。一个千兆链路(125 MB/s的理论极限)在实际传输中能达到 110-115 MB/s 的稳定速度就已经非常优秀了。

3. 速率的查看方法与实战命令

掌握了原理,我们来看具体怎么查。除了标准的ethtool命令,还有一些快速查看和批量查看的技巧。

3.1 标准查看法:使用ethtool

这是最准确的方法。假设你的网卡是ens33

sudo ethtool ens33 | grep -E “Speed|Duplex”

这条命令使用grep过滤,只显示速度和双工信息,输出简洁明了:

Speed: 1000Mb/s Duplex: Full

如果你想看所有信息,直接运行sudo ethtool ens33即可。

3.2 快速查看法:使用ip link

ip link show <接口名>命令也能提供一些链路信息,虽然不如ethtool详细。

ip link show ens33

输出中会有一行类似:

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:0c:29:xx:xx:xx brd ff:ff:ff:ff:ff:ff

注意<BROADCAST,MULTICAST,UP,LOWER_UP>中的LOWER_UP,它表示物理链路是起来的(相当于Link detected: yes)。但是,ip link命令无法直接显示速率和双工信息。它更多用于查看接口状态、MAC地址和MTU。

3.3 批量查看法:多网卡服务器

在拥有多个网络接口的服务器上,逐一查看效率低下。可以写一个简单的Shell循环:

for iface in $(ls /sys/class/net/ | grep -v lo); do echo “=== Interface: $iface ===” sudo ethtool $iface 2>/dev/null | grep -E “Speed|Duplex|Auto-negotiation|Link detected” done

这个脚本会遍历除了回环接口(lo)之外的所有网络接口,并打印出每个接口的关键信息,非常适合快速巡检。

3.4 动态监控法:使用watch

如果你正在排查一个不稳定的链路(例如,速率在百兆和千兆之间跳动),可以使用watch命令进行动态监控:

watch -n 1 “sudo ethtool ens33 | grep -E ‘Speed|Duplex|Link detected’”

这条命令会每秒刷新一次信息,让你实时观察链路状态的变化。

4. 常见问题与深度排查指南

看到速率不是预期的1000Mb/s,先别慌。按照以下由浅入深的排查流程,绝大多数问题都能定位。

4.1 基础层排查:物理连接与链路状态

这是第一步,也是最重要的一步。很多问题都出在这里。

  1. 确认链路是否激活Link detected: no意味着物理层不通。检查:

    • 网线:是否损坏?是否插紧?尝试更换一根质量合格的超五类(Cat 5e)或六类(Cat 6)及以上的网线。劣质网线或只用了四芯的网线可能无法支持千兆。
    • 网口指示灯:大多数网卡和交换机端口都有指示灯。常亮或闪烁通常表示链路正常,但具体含义需参考设备手册。如果一端亮另一端不亮,问题可能出在网线或对端设备。
    • 对端设备:连接的交换机或路由器端口是否启用?是否被管理员关闭?
  2. 检查网卡支持能力: 查看Supported link modes。如果里面根本没有1000baseT/Full,那么你的网卡硬件本身就不支持千兆。这可能发生在一些老旧的机器或某些嵌入式设备上。

4.2 协商层排查:自动协商与双工匹配

这是最易出问题、也最容易被忽略的环节。

  1. 强制速率与双工不匹配: 这是网络中的“经典杀手”。当一端设置为“自动协商”(Auto-negotiation on),而另一端被手动强制设置为100M全双工时,就会发生双工不匹配。

    • 自动协商端:它会检测到电气信号是100M,但无法得知双工模式(因为强制端不发送协商信号),于是它根据IEEE规范会降级使用半双工
    • 结果:一端是100M全双工,另一端是100M半双工。全双工端发送数据时不会监听,而半双工端会监听。这导致全双工端的数据包会“撞上”半双工端正在发送的数据包,造成大量的冲突(Collision)和帧校验错误(FCS error),网络会变得极其缓慢且不稳定。

    如何排查?

    • 在两台设备上均使用sudo ethtool <接口>查看Auto-negotiationSpeed/Duplex设置。
    • 最佳实践:在所有现代以太网设备上,保持两端均为“自动协商”(Auto-negotiation: on。这是最安全、最推荐的方式,能让设备自动找到最优连接模式。
  2. 手动设置速率: 只有在极少数情况下(如某些老旧交换机或特殊设备不支持自动协商),才需要手动设置。使用命令:

    sudo ethtool -s ens33 speed 1000 duplex full autoneg off

    警告:你必须确保对端设备也做了完全相同的手动设置。否则必然导致双工不匹配。设置后,使用sudo ethtool ens33确认更改已生效。注意,这种设置通常是临时的,重启后失效。如需永久生效,需要配置网络配置文件(如CentOS的/etc/sysconfig/network-scripts/ifcfg-ens33或Ubuntu的Netplan/NetworkManager配置)。

4.3 硬件与驱动层排查

如果物理连接和协商都正常,但速率仍不达标,可能需要深入一层。

  1. 检查驱动与固件: 陈旧的或错误的网卡驱动可能导致性能问题。可以尝试以下步骤:

    • 更新系统:sudo apt update && sudo apt upgrade(Debian/Ubuntu) 或sudo yum update(RHEL/CentOS)。
    • 查看驱动信息:ethtool -i ens33,关注driver(驱动名称)和version(驱动版本)。
    • 根据网卡型号(可通过lspci | grep -i ethernet查看),去芯片厂商(如Intel、Broadcom)官网查找是否有更新的Linux驱动。
  2. 使用mii-tool(较老系统): 在一些非常老的系统上,ethtool可能不可用,可以使用mii-tool

    sudo mii-tool -v eth0

    它会显示类似 “eth0: negotiated 1000baseT-FD flow-control, link ok” 的信息。但请注意,这个工具正在被淘汰,对于许多新网卡可能无法正确报告信息。

4.4 系统与应用层性能验证

确认链路速率是千兆后,实际传输速度慢,就需要排查系统本身。

  1. 使用iperf3进行网络性能测试: 这是排除应用和磁盘影响、纯粹测试网络带宽的最佳工具。

    • 在一台机器上启动服务器端:iperf3 -s
    • 在另一台机器上作为客户端测试:iperf3 -c <服务器IP地址>
    • 观察输出的[ ID] Interval Transfer Bitrate部分。在千兆环境下,Bitrate应该稳定在 940 Mbps 左右(扣除TCP/IP等开销)。如果远低于此值,说明网络路径(包括交换机、防火墙等)存在瓶颈或配置问题。
  2. 检查系统负载与中断: 极高的系统负载或不当的中断处理(IRQ)分配也可能限制网络性能。可以使用tophtop查看整体负载,使用cat /proc/interrupts | grep eth查看网卡中断是否均匀分配到多个CPU核心上。对于高性能需求,可能需要在驱动层面启用多队列(RSS)并优化中断亲和性。

5. 实操心得与避坑指南

根据多年的运维经验,我总结了几条关键的实操心得,这些往往在官方文档里不会明确写出:

  1. 网线是“玄学”之源: 至少50%的“千兆变百兆”问题是由网线引起的。不要相信线身上的“Cat 6”标签,劣质线材的铜芯纯度、绞合工艺不达标,在短距离内可能勉强能成千兆,但距离稍长或稍有弯折,性能就会急剧下降。自备一根经过福禄克测试的优质短线作为“调试线”,是网络工程师的标配。

  2. 自动协商是朋友,不是敌人: 除非你有确凿证据和充分的理由,否则永远不要关闭自动协商。现代设备(2000年后的)的自动协商机制非常可靠。手动强制设置是历史遗留问题(早期一些设备实现有bug),在今天往往是问题的制造者。

  3. 交换机端口隔离与限速: 在企业环境中,你的服务器网卡一切正常,但速率上不去,很可能是因为网络管理员在交换机上对该端口做了速率限制(Rate-limit)或策略。你需要联系网络团队,确认交换机的端口配置,特别是是否启用了“speed 1000”和“duplex full”。

  4. 虚拟化环境下的“虚拟网卡”: 在VMware ESXi、KVM等虚拟化环境中,虚拟机看到的网卡是虚拟设备(如VMXNET3、virtio)。此时ethtool显示的速度可能是10000Mb/s(万兆)或一个虚拟化的最大值,这代表虚拟后端的能力,并不代表物理主机的实际出口带宽。物理主机的上行链路(如连接到物理交换机的网卡)速率才是真正的瓶颈。你需要同时在虚拟机和物理主机两个层面进行排查。

  5. 使用ethtool统计信息辅助诊断sudo ethtool -S ens33可以显示网卡驱动统计的详细数据包计数。关注rx/tx_errors(收发出错)、rx/tx_dropped(丢弃)、collisions(冲突,在全双工模式下应为0或极低)。这些数据的异常增长是判断双工不匹配、线缆问题、驱动故障的黄金指标。

排查网络速率问题,本质上是一个分层验证的过程:从物理层(网线、网口)到链路层(自动协商、双工),再到网络层及以上(系统配置、交换机策略)。养成由下至上、循序渐进的排查习惯,就能快速定位绝大多数网络性能问题的根源。记住,ethtool是你的眼睛,而理解其输出背后的网络原理,才是你解决问题的真正大脑。