1. 广播风暴的成因:从一次网络瘫痪说起

我记得刚入行那会儿,接手过一个写字楼的网络故障。整栋楼一到上午十点就断网,过了中午又自己好了。排查了三天,最后发现是 DHCP 地址池耗尽加上一台傻瓜交换机环路——说白了,就是广播风暴把网络给“撑死”了。

从那以后,我对广播帧、ARP 请求这些东西就特别敏感。你想想看,一个本来只在本地传播的广播帧,一旦在二层网络里转起圈来,那破坏力可不小。

1.1 广播帧的定义:到底什么是“广播”?

广播帧,就是目的 MAC 地址全为 FF:FF:FF:FF:FF:FF 的以太网帧。交换机收到这种帧,会把它从除了接收端口以外的所有端口转发出去。

关键特征:

  • 目的 MAC:FF:FF:FF:FF:FF:FF
  • 处理方式:交换机泛洪(Flooding)到所有端口
  • 接收者:广播域内所有设备都必须处理

说白了,广播帧就是“喊一嗓子,所有人都得听”。但问题也出在这里——如果所有人都同时喊,网络就乱了。

1.2 ARP 请求与 DHCP 发现:最常见的广播源

实际网络中,广播帧主要来自两个协议:ARP 和 DHCP。我做过统计,一个中等规模的办公网络里,ARP 广播能占到总广播量的 60% 以上。

协议 广播类型 触发场景 频率
ARP ARP 请求 主机需要知道目标 IP 对应的 MAC 高(每次通信前都可能触发)
DHCP DHCP Discover 客户端获取 IP 地址 低(仅设备接入时)
NetBIOS 名称查询 Windows 网络发现 中(取决于配置)

ARP 请求的工作流程:

主机A(192.168.1.10)想给主机B(192.168.1.20)发数据
→ 主机A检查 ARP 缓存,没有 B 的 MAC
→ 主机A发送广播帧:"谁是 192.168.1.20?请告诉 192.168.1.10"
→ 所有主机都收到这个广播,但只有 B 回复
→ 主机A收到回复,更新 ARP 缓存,开始通信

避坑指南:我曾经遇到过一个案例,某台服务器的 ARP 缓存表被错误配置成静态条目,导致所有发往该 IP 的流量都走了错误的 MAC 地址。排查了整整两天才发现——嗯,从那以后我养成了定期检查 ARP 表的习惯。

DHCP 发现的过程:

客户端开机 → 发送 DHCP Discover(广播,源 IP 0.0.0.0)
→ DHCP 服务器收到后回复 DHCP Offer
→ 客户端发送 DHCP Request(广播)
→ 服务器确认 DHCP ACK

你可能会问:为什么 DHCP 也要用广播?因为客户端这时候还没有 IP 地址,它只能用广播来“喊”服务器。

1.3 二层网络中的广播域

广播域,就是广播帧能到达的范围。在二层网络中,所有连接在同一台交换机(或通过级联/堆叠连接的交换机)上的设备,都属于同一个广播域。

注意:广播域越大,广播帧的影响范围就越大。一个 500 台设备的广播域,每秒钟可能产生数千个广播帧。这些帧虽然小,但每个设备都要处理——CPU 开销不容忽视。

我个人的经验是,当广播域内的设备超过 200 台时,就应该考虑用 VLAN 来分割了。否则,一次 ARP 泛洪就能让全网响应变慢。

1.4 环路与广播风暴的触发机制

好了,前面都是铺垫。现在来说最核心的问题:环路是怎么导致广播风暴的?

假设有三台交换机连成了一个三角形环路:

    [Switch A]
    /        \
[Switch B]——[Switch C]

当某台主机发送一个广播帧时:

  1. Switch A 收到广播帧,从所有其他端口转发出去
  2. Switch B 和 Switch C 都收到了这个帧
  3. Switch B 又把帧转发给 Switch C 和 Switch A
  4. Switch C 同样转发给 Switch B 和 Switch A
  5. 帧开始在环路里无限循环,而且每经过一台交换机就复制一份

这就是广播风暴的触发机制。帧的数量呈指数级增长,几分钟内就能把交换机的背板带宽和 CPU 全部耗尽。

广播风暴的典型症状:

  • 交换机端口指示灯狂闪(像迪斯科灯一样)
  • 网络延迟飙升到几秒甚至几十秒
  • CPU 利用率 100%,交换机失去响应
  • 最终全网瘫痪

我曾经在测试环境里故意制造过一次环路——嗯,就为了给新同事演示。结果不到 30 秒,整个机房的网络就卡死了,连 SSH 都连不上。最后还是拔线解决的。

1.5 核心逻辑:广播风暴的完整链路

下面这张图把整个因果关系串起来了:

广播风暴成因链路图 广播帧 ARP请求 / DHCP发现 二层广播域 交换机环路 广播风暴 网络瘫痪 关键触发条件 1. 存在广播帧 2. 存在二层环路 3. 无 STP 保护 后果 • 带宽被广播帧占满 • 交换机 CPU 100% • 全网通信中断

从这张图可以看得很清楚:广播帧本身不是问题,ARP 和 DHCP 也是正常协议行为。但一旦广播域内出现环路,这些正常的广播帧就会变成“网络杀手”。

1.6 小结:记住这三句话

  • 广播帧是必要的——没有广播,ARP 和 DHCP 就没法工作
  • 环路是致命的——哪怕只有一条冗余链路没配 STP,风暴就可能发生
  • 预防比治理重要——等风暴起来了再拔线,网络已经瘫痪了

我个人习惯是在所有交换机上默认开启 STP(生成树协议),哪怕只有一台交换机也开着。因为你不知道哪天会有人插一根网线把两台交换机连起来——这种事我见过不止一次了。