2. 物理层与数据链路层排错:网线/光纤故障排查、交换机端口协商问题、MAC地址表与ARP表异常、VLAN配置错误导致不通

这一章我们聊聊最底层的问题。很多工程师遇到网络不通,第一反应就是配路由、查防火墙。但我个人的习惯是——先看物理层和数据链路层。说白了,信号都没传过去,上层协议再对也没用。

你想想看,TCP/IP 协议栈里,物理层负责把比特流变成电信号或光信号,数据链路层负责在同一个广播域里找到目标设备。这两层出问题,表现往往很诡异:能 ping 通网关但上不了外网、交换机端口亮灯但丢包、VLAN 之间死活不通……嗯,我当年刚入行时就被这些问题折磨过。

核心原则:排错从底层往上走。物理层不通,别碰链路层;链路层不通,别碰网络层。这是铁律。

2.1 网线/光纤故障排查

物理层故障是最容易定位的,但也是最容易被忽略的。我记得有一次在数据中心割接,新装的服务器死活连不上交换机。查了半小时配置,最后发现是网线水晶头没压好——第 4 根线虚接。

2.1.1 网线故障常见场景

  • 线序错误:百兆网络只用 1、2、3、6 四根线。如果这四根中有任何一根不通,链路就起不来。千兆网络需要全部 8 根线。
  • 长度超限:双绞线理论极限 100 米。超过这个距离,信号衰减严重,会出现间歇性丢包。
  • 电磁干扰:网线贴着强电线走,或者穿过荧光灯管附近,会产生串扰。我曾经在工厂车间遇到过,网线走线槽时和动力电缆绑在一起,结果网络时断时续。
  • 水晶头氧化:机房湿度大,水晶头触点氧化会导致接触不良。表现是端口灯偶尔灭一下又亮起来。

2.1.2 光纤故障常见场景

故障类型 典型表现 排查方法
光模块功率过低 端口灯亮但链路不稳定,丢包率高 用光功率计测收发光功率,对比模块规格
光纤弯曲半径过小 光衰突然增大,链路时通时断 检查光纤走线,弯曲处半径应大于 10 倍光纤直径
光纤端面污染 光功率正常但误码率高 用光纤显微镜检查端面,用专用清洁笔擦拭
收发器波长不匹配 两端光模块都亮灯,但链路不通 确认两端模块波长一致(如 1310nm 对 1310nm)

我的习惯:手边常备一根短网线和一根短光纤。排查时先用短跳线替换怀疑有问题的线缆,如果问题消失,那就是线缆的问题。这招能省下大量时间。

2.2 交换机端口协商问题

端口协商是数据链路层的第一步。两端设备通过自动协商(Auto-Negotiation)确定速度和双工模式。如果协商失败,链路要么起不来,要么以半双工模式运行——半双工模式下,冲突域变大,丢包率飙升。

2.2.1 常见协商失败场景

  • 一端手动设置,一端自动协商:这是最常见的坑。比如服务器网卡强制设为 1000M/全双工,交换机端口设为自动协商。结果交换机检测不到协商信号,只能以半双工模式工作。表现是:能 ping 通,但大文件传输极慢。
  • 两端自动协商但硬件不兼容:不同厂商的网卡和交换机之间,偶尔会出现协商失败。我遇到过 Intel 网卡和某国产交换机死活协商不上,最后手动固定速度和双工才解决。
  • 网线质量差导致协商降速:本该协商到千兆,但因为线缆质量不行,只能降到百兆。检查端口状态就能发现。

2.2.2 排查命令与步骤

# 查看交换机端口状态(以 Cisco 为例)
Switch# show interfaces GigabitEthernet0/1
GigabitEthernet0/1 is up, line protocol is up
  Hardware is Gigabit Ethernet, address is 0011.2233.4455
  MTU 1500 bytes, BW 1000000 Kbit/sec, DLY 10 usec
  reliability 255/255, txload 1/255, rxload 1/255
  Encapsulation ARPA, loopback not set
  Keepalive set (10 sec)
  Full-duplex, 1000Mb/s, link type is auto
  input flow-control is off, output flow-control is unsupported
  ...

# 查看协商状态
Switch# show interfaces status
Port      Name   Status       Vlan   Duplex Speed Type
Gi0/1            connected    1      a-full a-1000 10/100/1000BaseTX
Gi0/2            connected    1      a-half a-100  10/100/1000BaseTX

注意看 a-full 表示自动协商到的全双工,a-half 表示自动协商到的半双工。如果看到 a-half,基本可以断定有问题。

避坑指南:我曾经在割接时手动把交换机端口设为 1000M/全双工,但服务器网卡是自动协商。结果链路起不来,业务中断了 20 分钟。后来我学乖了——除非两端都手动固定,否则一律用自动协商。现代设备自动协商已经很成熟了,别画蛇添足。

2.3 MAC 地址表与 ARP 表异常

MAC 地址表是交换机转发数据帧的依据,ARP 表是设备把 IP 地址映射到 MAC 地址的依据。这两张表出问题,数据帧就送不到正确的地方。

2.3.1 MAC 地址表异常

交换机的 MAC 地址表记录了每个端口下有哪些 MAC 地址。如果表项错误,数据帧会被转发到错误的端口,造成单通或丢包。

异常现象 可能原因 排查方法
MAC 地址漂移 同一个 MAC 地址在不同端口间反复跳变 检查是否有环路,或有人私接交换机
MAC 表满 新设备无法学习到 MAC 地址,导致单通 查看 MAC 表容量,清理无用表项
静态 MAC 配置错误 手动绑定的 MAC 地址与实际设备不符 核对静态 MAC 配置,确认设备实际 MAC
# 查看 MAC 地址表
Switch# show mac address-table
Mac Address Table
-------------------------------------------
Vlan    Mac Address       Type        Ports
----    -----------       --------    -----
   1    0011.2233.4455    DYNAMIC     Gi0/1
   1    00aa.bbcc.ddee    DYNAMIC     Gi0/2
  10    0055.6677.8899    STATIC      Gi0/3

# 查看 MAC 地址漂移
Switch# show mac address-table notification
MAC Move Notification: Enabled

2.3.2 ARP 表异常

ARP 表是设备本地的缓存,记录 IP 和 MAC 的对应关系。ARP 表出问题,设备就找不到下一跳的 MAC 地址,数据帧发不出去。

  • ARP 表项过期:设备长时间没有通信,ARP 表项被老化删除。下次通信时需要重新发送 ARP 请求,会有短暂延迟。
  • ARP 欺骗:恶意设备发送伪造的 ARP 应答,篡改 ARP 表。表现是流量被劫持到错误设备上。
  • ARP 表满:设备上 ARP 表容量有限,如果局域网内设备太多,新设备无法加入 ARP 表。
# 查看 ARP 表(Windows)
C:\> arp -a
Interface: 192.168.1.100 --- 0x5
  Internet Address    Physical Address    Type
  192.168.1.1         00-11-22-33-44-55   dynamic
  192.168.1.101       aa-bb-cc-dd-ee-ff   dynamic

# 查看 ARP 表(Linux)
$ ip neigh show
192.168.1.1 dev eth0 lladdr 00:11:22:33:44:55 REACHABLE
192.168.1.101 dev eth0 lladdr aa:bb:cc:dd:ee:ff STALE

我的经验:遇到 ARP 问题,先清空 ARP 缓存再试。Windows 用 arp -d,Linux 用 ip neigh flush all。如果清空后问题依旧,那多半是网络中有设备在捣乱。

2.4 VLAN 配置错误导致不通

VLAN 是数据链路层的重要功能,它把广播域分割成多个逻辑子网。VLAN 配置错误,最常见的表现是:同一台交换机上,两个端口明明连了设备,但就是 ping 不通。

2.4.1 常见 VLAN 配置错误

  • 端口未加入 VLAN:端口默认在 VLAN 1,如果设备需要接入 VLAN 10,但端口没配,设备就收不到 VLAN 10 的广播帧。
  • Trunk 链路未放行 VLAN:两台交换机之间用 Trunk 连接,但 Trunk 上没放行需要的 VLAN。表现是跨交换机的 VLAN 不通。
  • Native VLAN 不匹配:Trunk 链路上两端 Native VLAN 不一致,会导致 VLAN 标签处理错误。我曾经遇到过,两端 Native VLAN 一个配了 1,一个配了 99,结果 VLAN 10 的流量被错误地打上了标签,另一端不认。
  • VLAN 间路由未配置:不同 VLAN 之间通信需要三层路由。如果没配 VLAN 接口或路由,VLAN 之间自然不通。

2.4.2 排查步骤

  1. 确认端口所属 VLAN:用 show vlan brief 查看端口和 VLAN 的对应关系。
  2. 确认 Trunk 放行列表:用 show interfaces trunk 查看 Trunk 上放行了哪些 VLAN。
  3. 确认 Native VLAN 一致性:两端 Trunk 端口的 Native VLAN 必须相同。
  4. 确认 VLAN 接口状态:用 show ip interface brief 查看 VLAN 接口是否 up。
# 查看 VLAN 信息
Switch# show vlan brief
VLAN Name                             Status    Ports
---- -------------------------------- --------- -------------------------------
1    default                          active    Gi0/1, Gi0/2, Gi0/3
10   Sales                            active    Gi0/4, Gi0/5
20   Engineering                      active    Gi0/6, Gi0/7

# 查看 Trunk 信息
Switch# show interfaces trunk
Port        Mode         Encapsulation  Status        Native vlan
Gi0/24      on           802.1q         trunking      1

Port        Vlans allowed on trunk
Gi0/24      1-100,200-300

避坑指南:我曾经在配置 Trunk 时,忘了在两端都放行 VLAN 10。结果 VLAN 10 的设备能 ping 通同 VLAN 内的其他设备,但就是 ping 不通网关。查了半天才发现是 Trunk 放行列表的问题。所以,配置 Trunk 后一定要两端核对放行列表。

2.5 本章知识体系

下面这张图总结了物理层和数据链路层排错的核心逻辑。从线缆开始,到端口协商,再到 MAC 地址表和 ARP 表,最后是 VLAN 配置。每一步都有对应的排查要点。

物理层与数据链路层排错知识体系 物理层与数据链路层排错知识体系 物理层故障排查 网线:线序、长度、干扰、水晶头氧化 | 光纤:光功率、弯曲半径、端面污染、波长匹配 交换机端口协商 自动协商 vs 手动固定 | 速度/双工不匹配 | 半双工导致丢包 MAC地址表与ARP表异常 MAC地址漂移、表满、静态配置错误 | ARP表过期、ARP欺骗、ARP表满 VLAN配置错误 端口未加入VLAN | Trunk放行列表 | Native VLAN不匹配 | VLAN间路由缺失 排错铁律:从底层往上走,物理层不通不碰链路层

嗯,这一章的内容就到这里。物理层和数据链路层的排错,说白了就是「看灯、看表、看配置」。灯亮了不代表链路没问题,表对了不代表转发正确,配置全了不代表没有遗漏。多动手、多验证,慢慢就有感觉了。