1. 广播风暴基础:什么是广播帧、广播域与冲突域、广播风暴的成因与危害

各位好,我是老张。干网络这行十几年了,今天咱们聊聊广播风暴——这个让无数网工半夜爬起来救火的经典故障。

说实话,广播风暴这玩意儿,你只要在运维一线待过,早晚会碰上。我印象最深的一次,凌晨两点被电话吵醒,整个办公区网络瘫痪,连交换机都登不上去。到现场一看,所有端口指示灯疯狂闪烁,跟迪厅似的。嗯,典型的广播风暴。

要搞懂它,得从最基础的概念说起。

1.1 什么是广播帧

广播帧,说白了就是一台设备发出来、想让所有人都收到的数据帧。它的目标MAC地址是 FF-FF-FF-FF-FF-FF,也就是全F。

你想想看,在办公室里喊一嗓子“谁看见我U盘了?”——这就是广播。所有人都能听见,但只有真正捡到U盘的人才会回应你。

广播帧在局域网里很常见:

  • ARP请求:想知道某个IP对应的MAC地址,就发个广播问所有人
  • DHCP发现:新设备接入网络,广播找DHCP服务器要IP
  • NetBIOS名称解析:老Windows网络里,广播问“谁是这台机器?”
我的经验:很多人觉得广播帧是“坏东西”,其实不然。没有广播,ARP和DHCP根本跑不起来。广播本身不是问题,问题是广播太多了。

1.2 广播域与冲突域

这两个概念,我当年考CCNA时背得滚瓜烂熟。但真正理解它们,是在一次故障排查之后。

冲突域:同一时刻只能有一台设备发送数据的范围。如果两台设备同时发,就会“撞车”——这就是冲突。集线器(Hub)的所有端口都在一个冲突域里,所以效率极低。

广播域:广播帧能到达的范围。交换机的所有端口默认都在同一个广播域里。路由器能隔离广播域,但交换机不行。

对比项 冲突域 广播域
隔离设备 交换机、网桥 路由器、三层交换机
范围大小 通常较小(一个端口或一段线缆) 通常较大(一个VLAN或一个子网)
典型问题 冲突导致重传,效率下降 广播泛滥,CPU过载
我见过的坑 老式Hub级联,网络慢得像蜗牛 VLAN没划分,广播风暴全网瘫痪

举个例子:你有一台24口交换机,连接了24台电脑。这24台电脑都在同一个广播域里——任何一台发广播,其他23台都得处理。但冲突域呢?交换机的每个端口都是一个独立的冲突域,所以不会出现两台电脑同时发数据撞车的情况。

关键点:交换机隔离冲突域,但不隔离广播域。路由器两者都隔离。

1.3 广播风暴的成因

广播风暴,就是广播帧在二层网络里无限循环转发,越滚越大,直到把网络带宽和交换机CPU全部耗尽。

为什么会这样?我总结了几种常见场景:

  1. 二层环路:这是最常见的原因。交换机之间形成了物理环路,又没有启用STP(生成树协议)。广播帧从一条路径出去,又从另一条路径回来,然后继续转发……无限循环。
  2. STP故障:STP本来是用来防环的,但如果STP配置错误、或者交换机CPU过载导致BPDU丢失,阻塞端口突然变成转发状态,环路瞬间形成。
  3. 网卡故障:我曾经遇到过一次,一台服务器的网卡坏了,疯狂往外发广播帧,每秒几万个。交换机来不及处理,整个广播域都跟着遭殃。
  4. ARP攻击:有人恶意发送大量伪造ARP广播包,目的就是让网络瘫痪。
避坑指南:我曾经接手过一个项目,客户说“我们网络没环路,STP也开了,怎么还会广播风暴?”我到现场一看,STP确实开了,但所有交换机都用的默认优先级,导致根桥选举不稳定,端口状态反复切换。每次切换都会触发拓扑变更,大量TCN报文引发全网MAC地址表刷新,广播帧趁机泛滥。嗯,STP不是开了就完事了,得调优。

下面这张图,是我自己画的广播风暴形成过程,你看一眼就明白了:

广播风暴形成过程 广播风暴形成过程 交换机 A 交换机 B 交换机 C 主机 链路1 链路2 链路3 广播帧在 A→B→C→A 之间无限循环 环路形成条件 • 物理环路(3条链路) • 未启用STP或STP失效 • 广播帧被无限转发

你看,三台交换机两两相连,形成了一个三角形环路。主机发一个广播帧,交换机A收到后转发给B和C,B又转发给C和A,C再转发给A和B……每个交换机收到广播帧后,都会复制转发,帧的数量呈指数级增长。几分钟内,带宽就被吃光了。

1.4 广播风暴的危害

广播风暴的危害,我亲身经历过,说几个典型的:

  • 带宽耗尽:广播帧占满了所有链路,正常业务数据根本发不出去。你ping网关,延迟从1ms飙升到几千ms,最后超时。
  • 交换机CPU过载:交换机收到大量广播帧,CPU忙着处理这些帧,没空管STP、SNMP这些管理协议。你远程登录交换机?想都别想。
  • MAC地址表震荡:同一个MAC地址,一会儿从端口1学到,一会儿从端口2学到,交换机不断更新MAC表,性能进一步下降。
  • 连锁反应:一台交换机瘫痪,可能影响整个广播域。如果广播域跨了多个VLAN或者通过Trunk互联,那影响范围更大。

真实案例:有一次某数据中心做网络变更,工程师不小心把两根网线插到了同一个交换机上,形成了环路。STP虽然开了,但收敛时间太长——30秒。就是这30秒,广播风暴把整个机柜的网络打瘫了,几十台虚拟机全部断连。后来我们改了配置,启用了PortFast和BPDU Guard,再也没出过类似问题。

1.5 如何判断是否发生了广播风暴

说实话,广播风暴的症状很明显,但新手容易误判。我教你几招:

症状 判断方法 我的经验
所有端口指示灯狂闪 看交换机面板,所有端口几乎同时闪烁 别慌,先拔掉一根网线试试
ping延迟极高或超时 ping网关,延迟从正常变成几千ms 连续ping 10次,看丢包率
交换机CPU占用100% 登不上就串口直连,show process cpu 我习惯用 show interfaces | include broadcast 看广播包数量
抓包看到大量重复广播帧 Wireshark抓包,过滤 eth.addr == ff:ff:ff:ff:ff:ff 同一个广播帧出现多次,基本就是环路
快速定位技巧:我常用的方法是——拔线法。从核心交换机开始,依次拔掉上联线,每拔一根看网络是否恢复。如果拔掉某根线后网络正常了,那这根线连接的设备就是风暴源头。当然,生产环境慎用,最好先跟业务方打招呼。