3. 物理层瓶颈:网卡性能与配置、网线/光纤质量与类型、交换机端口协商与双工模式

很多人一遇到网络慢,第一反应就是“带宽不够”,然后急着去扩容。其实,很多时候问题出在最底层——物理层。你想想看,数据流就像水流,水管本身如果堵了、破了、或者接口没接好,后面再大的水泵也白搭。

这一章,我们就来聊聊物理层的三个关键环节:网卡、线缆和交换机端口。我个人习惯,排查吞吐瓶颈时,一定先从这三样入手,因为它们最容易被忽略,也最容易“背锅”。

核心观点: 物理层是吞吐性能的基石。链路层、网络层再优化,如果物理层有硬伤,一切都是空中楼阁。
物理层瓶颈全景图 物理层瓶颈三大核心环节 物理层瓶颈 ① 网卡性能与配置 ② 线缆质量与类型 ③ 端口协商与双工 排查顺序建议: 1. 先看交换机端口协商状态(最易查) 2. 再测线缆质量(用测线仪或看错包率) 3. 最后检查网卡配置(驱动、固件、卸载)

3.1 网卡:吞吐的第一道关卡

网卡是服务器和网络之间的“翻译官”。它的性能直接决定了你能跑多快。我见过太多案例,业务说“网络慢”,结果一查,网卡还在用百兆模式跑,或者驱动版本老得掉牙。

3.1.1 网卡硬件与接口

首先,你得搞清楚你的网卡是什么“体质”。

  • 接口类型: 现在主流是 PCIe 3.0/4.0 x8 或 x16。PCIe 版本和通道数决定了网卡和 CPU 之间的带宽。比如,一张 25G 网卡插在 PCIe 3.0 x4 的槽上,理论带宽只有约 4GB/s,根本喂不饱 25G。
  • 网卡速率: 1G、10G、25G、40G、100G…… 别只看标称,实际要看协商结果。
  • 队列数: 多队列(RSS、Flow Director)能让多个 CPU 核心分担网卡中断,提升并发处理能力。单队列网卡在高吞吐下很容易把单个 CPU 打满。
我的习惯: 拿到一台新服务器,第一件事就是 lspci -vvv | grep -i ethernet,看看网卡型号、PCIe 链路速度和宽度。如果显示 Speed 2.5GT/s, Width x4,那心里就有数了——这卡跑不满 10G。

3.1.2 驱动与固件

驱动和固件是网卡的灵魂。我曾经遇到过一个案例,某批服务器 10G 网卡吞吐死活上不去,只有 2-3Gbps。查了三天,最后发现是驱动版本太旧,有个已知的 bug 导致大包性能下降。升级驱动后,直接跑到 9.8Gbps。

怎么查?

  • Linux: ethtool -i eth0 查看驱动和固件版本。
  • Windows: 设备管理器 -> 网卡属性 -> 驱动程序选项卡。

然后去官网对比,是不是最新稳定版。别追新,但别用太老的。

3.1.3 网卡卸载功能

现代网卡有很多硬件卸载功能,比如 TSO(TCP 分段卸载)、GSO(通用分段卸载)、LRO(大接收卸载)、RSS(接收端缩放)、Checksum Offload 等。这些功能让网卡硬件分担 CPU 的工作,能显著提升吞吐。

但有时候,它们也会惹麻烦。我记得有一次,某台数据库服务器出现大量 TCP 重传,排查到最后,发现是 LRO 功能导致接收端合并了过大的数据包,被对端丢弃了。关掉 LRO 后,问题解决。

避坑指南: 我曾经在虚拟化环境中遇到过,开启 TSO 后,虚拟机网络性能反而下降。原因是宿主机 CPU 太老,卸载功能反而增加了开销。所以,卸载功能不是无脑开的,需要根据实际场景测试。

检查卸载状态:

ethtool -k eth0 | grep offload

临时关闭某个卸载功能:

ethtool -K eth0 tso off
ethtool -K eth0 lro off

3.2 网线/光纤:被低估的“隐形杀手”

线缆是物理层最容易被忽视的环节。很多人觉得“线嘛,能通就行”。但线缆的质量、类型、长度,甚至端接工艺,都会直接影响吞吐。

3.2.1 铜缆(网线)

先说最常见的双绞线。你想想看,一根 Cat5e 的线,硬要跑 10G,能稳定吗?

类别 最大频率 最大速率 最大距离 典型应用
Cat5e 100 MHz 1 Gbps 100 米 百兆/千兆以太网
Cat6 250 MHz 1 Gbps (10 Gbps @ 55m) 100 米 (1G) / 55 米 (10G) 千兆/短距离万兆
Cat6a 500 MHz 10 Gbps 100 米 万兆以太网
Cat7 600 MHz 10 Gbps 100 米 万兆/数据中心
Cat8 2000 MHz 25/40 Gbps 30 米 高速数据中心

这里有个坑:很多便宜的 Cat6 线,实际测试连 1G 都跑不稳。我建议,关键链路至少用 Cat6a,并且要用 Fluke 测线仪 测一下串扰和回波损耗。

3.2.2 光纤

光纤比铜缆稳定,但也不是没坑。

  • 单模 vs 多模: 单模(SMF)传输距离远(10km+),但成本高;多模(MMF)距离短(几百米),但便宜。别搞混了,单模光模块插多模光纤,或者反过来,虽然能亮,但性能会大打折扣。
  • 光纤类型: OM3、OM4、OM5 等。OM4 支持 100G 到 150 米,OM3 只能到 100 米。如果用了 OM3 的线跑 100G,距离一长就丢包。
  • 接头清洁: 这是最容易被忽略的。光纤端面脏了,会导致光功率衰减、误码率升高。我见过一个案例,某条 40G 链路吞吐只有 10G,最后用显微镜一看,接头上有块油污。擦干净后,直接跑满。
我的习惯: 每次插拔光纤前,用 光纤清洁笔 或者 无尘纸+酒精 清洁一下端面。别嫌麻烦,这能省下你后面几天的排查时间。

3.3 交换机端口:协商与双工模式

交换机端口是物理层的“交通指挥员”。它决定了链路两端用什么速度、什么模式通信。

3.3.1 自协商机制

现在的设备默认都开自协商。两端互相“喊话”,确定一个双方都支持的最高速率和双工模式。但自协商不是万能的。

我遇到过最经典的问题:双工模式不匹配。一端是千兆全双工,另一端因为某种原因(比如老旧设备、配置错误)变成了百兆半双工。结果就是:链路能通,但吞吐极低,而且伴随大量冲突和 CRC 错误。

怎么查?

ethtool eth0

看输出中的 Speed 和 Duplex 字段。两端必须一致。

3.3.2 常见协商问题

  • 速率不匹配: 一端 1G,另一端 100M。结果就是链路以 100M 运行,吞吐受限。
  • 双工不匹配: 一端全双工,另一端半双工。这是最恶心的,因为链路能通,但性能极差。半双工端在发送时会等待,而全双工端不会,导致大量碰撞和重传。
  • 自协商失败: 两端都开自协商,但就是协商不上,回退到最低速率(比如 10M)。
避坑指南: 我曾经在某个数据中心,为了“稳定”,把服务器网卡和交换机端口都强制设为 1G 全双工。结果后来换了一批新交换机,强制模式不兼容,导致链路频繁闪断。从那以后,我学乖了:除非有特殊原因,否则永远保持自协商开启。现代设备自协商已经很成熟了。

3.3.3 排查命令

在 Linux 下,我常用的命令:

# 查看端口协商状态
ethtool eth0

# 查看端口统计信息(错误包、碰撞等)
ethtool -S eth0

# 查看交换机侧(如果可登录)
show interfaces status
show interfaces counters errors

重点关注 CRC errors、collisions、frame errors。这些数字如果持续增长,说明物理层有问题。

3.4 实战排查流程

好了,理论说完了。咱们来点实际的。当你怀疑物理层有瓶颈时,按这个步骤来:

  1. 第一步:看协商状态。 登录服务器,ethtool eth0,确认 Speed 和 Duplex 是否和预期一致。如果不一致,先检查线缆和两端配置。
  2. 第二步:看错误计数。 ethtool -S eth0,看有没有 CRC 错误、碰撞、超长/超短帧。如果有,大概率是线缆或光模块问题。
  3. 第三步:测线缆。 用测线仪(Fluke)或者简单点,换一根已知好的线缆试试。对于光纤,用光功率计测接收光功率,看是否在模块的接收灵敏度范围内。
  4. 第四步:检查网卡配置。 确认驱动版本、固件版本、卸载功能状态。可以尝试关闭 TSO/GSO/LRO 看看性能是否有变化。
  5. 第五步:打流测试。 用 iperf3 打流,看实际吞吐。如果吞吐远低于预期,且排除了以上问题,那可能是网卡硬件故障或 PCIe 瓶颈。
总结一下: 物理层的问题,往往不是“通不通”,而是“好不好”。链路能通,不代表它能跑满带宽。养成看协商状态、看错误计数的习惯,能帮你避免很多“玄学”问题。