第15篇:环路是怎么产生的:一次广播风暴故障实录

关键词:网络环路、广播风暴、MAC地址表震荡、交换机环路、物理环路、逻辑环路、故障排查


一、引言

在上一篇文章中,我们了解了广播域的概念以及 VLAN 对广播域的限制。但即使划分了 VLAN,只要同一广播域内存在物理环路,广播帧就会在环路中无限循环,最终导致广播风暴。环路故障是网络工程师最常遇到的"杀手级"问题之一——它能让整个网络在几分钟内完全瘫痪。本文通过一个真实的故障案例,带你理解环路产生的根源、危害和排查方法。

二、核心概念

2.1 什么是网络环路

网络环路是指数据帧沿着一条或多条链路循环转发,永远无法到达目的地的现象。

类型 说明 产生原因
物理环路 多条物理路径形成闭环 冗余链路、误接网线
逻辑环路 看似没有物理环路,但转发形成闭环 配置错误、MAC 地址表异常

2.2 环路产生广播风暴的机制

交换机泛洪未知单播和广播帧是其正常工作行为。当存在环路时,泛洪行为被无限放大。

环路产生广播风暴的机制 - 图示

广播风暴放大过程:

轮次 交换机 A 发送 交换机 B 发送 交换机 C 发送 总帧数
第 1 轮 1 0 0 1
第 2 轮 1 1 0 2
第 3 轮 2 2 1 5
第 4 轮 5 5 5 15
第 5 轮 15 15 15 45
... ... ... ... 指数增长

2.3 MAC 地址表震荡

环路不仅导致广播风暴,还会让交换机的 MAC 地址表不稳定。

时刻 PC-A 的帧从哪个端口进入 MAC 地址表记录
T1 端口 1 MAC-A → 端口 1
T2 端口 3(环路回来) MAC-A → 端口 3
T3 端口 1 MAC-A → 端口 1
T4 端口 3 MAC-A → 端口 3
... 持续交替 持续震荡

后果:MAC 地址表频繁刷新,单播帧也无法正确转发,所有帧退化为泛洪。

2.4 环路故障的典型症状

症状 说明
网络不可用 广播风暴占满带宽
交换机 CPU 飙高 处理海量泛洪帧
端口指示灯狂闪 持续收发大量数据
MAC 地址表频繁变化 同一 MAC 在不同端口出现
部分端口频繁 UP/DOWN 端口过载或触发保护

三、技术细节

3.1 常见环路场景

场景 说明 概率
两根网线误插到同一台交换机 管理员误将一根网线两端都插到同一交换机 高
接入交换机与核心交换机之间有多条链路 冗余链路未配置聚合或 STP 高
用户私自接入小交换机 办公区用户自带交换机并连接多个端口 中
AP 环路 AP 的 LAN 口与另一个 LAN 口短接 低
堆叠/级联线缆形成环路 多设备级联时连线成环 中

3.2 环路检测的方法

方法 命令 说明
端口流量观察 display interface brief 异常高流量的端口可能是环路入口
MAC 地址表震荡 display mac-address 同一 MAC 在不同端口间切换
广播包统计 display interface X Broadcast packets 异常增长
环路检测功能 display loopback-detection 华为设备环路检测功能
端口逐个关闭 shutdown 定位环路所在端口

3.3 华为交换机的环路保护机制

保护机制 说明 配置命令
STP/RSTP/MSTP 生成树协议,逻辑断开冗余链路 stp mode rstp
环路检测 发送探测报文,检测到环路后关闭端口 loopback-detection enable
广播风暴抑制 限制广播流量占比 storm-control broadcast min-rate X max-rate Y
MAC 地址振荡检测 MAC 地址在端口间频繁迁移时告警并抑制 storm suppression mac-address flapping(依型号支持)
BPDU 保护 在边缘端口收到 BPDU 时关闭端口 stp bpdu-protection

四、实战配置/案例分析

4.1 案例一:某公司办公网环路故障实录

故障时间:2024 年 3 月 15 日上午 9:30 故障范围:整栋办公楼约 200 台终端无法上网

故障现象: 1. 运维人员接到大量报障电话,终端无法上网 2. 登录核心交换机 SSH 极其缓慢,经常超时断开 3. 部分接入交换机无法远程登录

排查过程:

# 步骤1:通过带外管理(Console)登录核心交换机
# 观察到 CPU 利用率高达 98%
<Core-SW> display cpu-usage
  CPU Usage: 98%

# 步骤2:检查接口流量(广播包暴增)
<Core-SW> display interface GigabitEthernet
  GigabitEthernet0/0/1  —— Broadcast: 2,500,000 packets  ← 异常
  GigabitEthernet0/0/2  —— Broadcast: 2,450,000 packets  ← 异常
  GigabitEthernet0/0/3  —— Broadcast: 150 packets        ← 正常

# 步骤3:检查 MAC 地址表(发现震荡)
<Core-SW> display mac-address | include 00e0.fc
  00e0.fc12.3456  00:01:23  10    *    GigabitEthernet0/0/1
  # 刷新后再次查看
  00e0.fc12.3456  00:00:45  10    *    GigabitEthernet0/0/2
  # 同一 MAC 在 GE0/0/1 和 GE0/0/2 之间交替出现

# 步骤4:临时关闭 GE0/0/1 观察
[Core-SW] interface GigabitEthernet 0/0/1
[Core-SW-GigabitEthernet0/0/1] shutdown
[Core-SW-GigabitEthernet0/0/1] quit

# 结果:广播包骤降,CPU 恢复正常,部分网络恢复
# 确认环路在 GE0/0/1 下联的接入交换机

# 步骤5:下联到接入交换机排查
<Access-SW-03> display mac-address
  # 发现 MAC 地址在 GE0/0/1 和 GE0/0/24 之间震荡
  # GE0/0/1 下接办公区 PC
  # GE0/0/24 上联到核心交换机

# 步骤6:现场排查
# 发现行政部员工为了"提速",将自己的小交换机 LAN1 接入了墙上的信息插座
# 同时将小交换机的 LAN2 也接到了同一信息插座(通过一个网线 T 型头)
# 形成环路

根因总结: 1. 员工私自接入小交换机并短接端口 2. 接入交换机未开启 STP 或环路检测 3. 网络没有部署广播风暴抑制

临时处置:

# 关闭环路端口
[Access-SW-03] interface GigabitEthernet 0/0/1
[Access-SW-03-GigabitEthernet0/0/1] shutdown
[Access-SW-03-GigabitEthernet0/0/1] quit

永久整改:

# 1. 全局启用 RSTP
[Access-SW-03] stp mode rstp
[Access-SW-03] stp enable

# 2. 边缘端口配置 BPDU 保护
[Access-SW-03] stp bpdu-protection
[Access-SW-03] interface range GigabitEthernet 0/0/1 to GigabitEthernet 0/0/23
[Access-SW-03-Port-range] stp edged-port enable
[Access-SW-03-Port-range] quit

# 3. 配置广播风暴抑制
[Access-SW-03] interface range GigabitEthernet 0/0/1 to GigabitEthernet 0/0/23
[Access-SW-03-Port-range] storm-control broadcast min-rate 1000 max-rate 10000
[Access-SW-03-Port-range] quit

# 4. 开启环路检测
# 系统视图下使能所有接口环回检测功能
[Access-SW-03] loopback-detection enable

# 使能当前接口的环回检测功能
[Access-SW-03] interface range GigabitEthernet 0/0/1 to GigabitEthernet 0/0/23
[Access-SW-03-Port-range] loopback-detection enable

# 检测到环路后自动阻塞该端口,环路消失后接口 30 秒后恢复
[Access-SW-03-Port-range] loopback-detect action block
[Access-SW-03-Port-range]loopback-detect recovery-time 30
[Access-SW-03-Port-range] quit
[Access-SW-03-Port-range] quit

4.2 案例二:两条上联链路未聚合导致环路

故障描述:接入交换机通过两条链路分别上联到核心交换机的 GE0/0/1 和 GE0/0/2,未配置链路聚合,也未启用 STP。

# 场景分析:
# 接入交换机
#   GE0/0/24 → 核心交换机 GE0/0/1(链路A)
#   GE0/0/23 → 核心交换机 GE0/0/2(链路B)
#
# 核心交换机收到链路A来的广播帧 → 泛洪到链路B → 回到接入交换机 → 泛洪到链路A → 死循环

# 解决方案(三选一):
# 方案A:配置链路聚合(推荐)
[Access-SW] interface Eth-Trunk 1
[Access-SW-Eth-Trunk1] mode lacp-static
[Access-SW-Eth-Trunk1] trunkport GigabitEthernet 0/0/23
[Access-SW-Eth-Trunk1] trunkport GigabitEthernet 0/0/24
[Access-SW-Eth-Trunk1] quit

# 方案B:启用 STP(阻塞一条冗余链路)
[Access-SW] stp mode rstp
# STP 会自动选举并阻塞一条链路

# 方案C:只保留一条物理链路
[Access-SW] interface GigabitEthernet 0/0/23
[Access-SW-GigabitEthernet0/0/23] shutdown
[Access-SW-GigabitEthernet0/0/23] quit

4.3 案例三:通过 MAC 地址表定位环路端口

# 查看 MAC 地址变化最快的条目
<Core-SW> display mac-address aging-time
# 大量 MAC 地址老化时间极短(秒级刷新)

# 查看某一 MAC 的详细信息
<Core-SW> display mac-address 00e0-fc12-3456 verbose
  MAC Address : 00e0-fc12-3456
  MAC Type    : Dynamic
  VLAN        : 10
  Aging Time  : 00:00:02       ← 仅2秒前刷新
  Interface   : GigabitEthernet0/0/2  ← 上次在GE0/0/1

# 通过对比上一次显示,确认该 MAC 在 GE0/0/1 和 GE0/0/2 之间交替
# 这两个端口之间的链路构成环路的一部分

五、总结

故障阶段 现象 对应命令
环路产生初期 个别端口广播包增加 display interface X
环路扩散阶段 MAC 地址表震荡 display mac-address
广播风暴阶段 CPU 飙高、SSH 超时 display cpu-usage
网络瘫痪阶段 大面积不可用 只能通过 Console 排查
预防措施 配置命令 说明
启用 RSTP stp mode rstp 自动阻断冗余链路
BPDU 保护 stp bpdu-protection 边缘端口收到 BPDU 即关闭
风暴抑制 storm-control broadcast min-rate X max-rate Y 限制广播流量占比
环路检测 loopback-detection enable 主动检测并告警/关闭端口
MAC 漂移防护 storm suppression mac-address flapping MAC 频繁漂移时联动抑制/告警
排查步骤 操作 目的
第 1 步 带外管理登录 网络瘫痪时无法 SSH
第 2 步 检查 CPU 和广播包 确认是否为广播风暴
第 3 步 观察 MAC 地址表 定位震荡的 MAC 和端口
第 4 步 逐端口 shutdown 缩小环路范围
第 5 步 现场排查物理接线 找到环路的物理位置

思考

  1. 如果交换机之间没有物理环路,但由于 MAC 地址表配置错误或老化时间设置不当,是否仍可能产生环路现象?
  2. 在三层网络中,如果只隔离了广播域(不同 VLAN),但交换机间存在物理环路且未启用 STP,广播风暴还会发生吗?
  3. STP 阻塞了一条链路,但如果被阻塞的端口下接了终端设备,该终端能否正常通信?为什么?

下篇预告:第16篇:STP 生成树协议原理:根桥、根端口、指定端口选举