交换机二层环路引发广播风暴的原理与STP防环机制全解
不少运维新手为了给内网做链路冗余,避免单根网线断网导致业务中断,会习惯性在两台交换机之间接两条网线或者光纤,本来想同时实现带宽叠加和故障备份,结果插完线之后全公司直接断网,正常业务完全跑不起来,这类故障绝大多数都是二层环路引发的广播风暴导致的。
交换机的端口默认工作在二层模式,它处理广播报文的核心逻辑是泛洪:收到广播帧之后,会从除了入端口之外的所有其他端口向外转发。举个最常见的场景,同一网段下的PC2要访问PC1,但是不知道对方的MAC地址,就会发送ARP广播报文全网询问目标地址,这个广播包到达接入交换机之后,会从两条上联链路分别转发给核心交换机,核心交换机收到报文之后,又会从另一条空闲链路把这个广播包重新发回接入交换机,两个交换机之间的广播包就开始无限循环转发。
这些循环转发的广播报文会在短时间内指数级增长,很快就把链路的全部可用带宽占满,交换机的CPU使用率也会瞬间飙升,正常的业务流量根本没有资源被转发,整个网络直接陷入瘫痪,同时还会引发MAC地址漂移,交换机的MAC地址表被反复刷乱,根本没法准确定位终端对应的转发端口,进一步加剧网络故障的严重程度。
针对这类二层环路问题,目前行业内最通用的解决方案就是生成树协议STP,它的核心逻辑非常好理解:把物理上已经接出环路的交换网络,逻辑修剪成没有任何回路的树状结构,所有交换机之间通过交互BPDU报文,主动把冗余链路的某个端口设置为阻塞状态,平时这个端口不转发业务流量,只作为备份链路待命,一旦主链路发生故障断开,备份链路会立刻切换到转发状态,既从根源上消除了环路风险,又完整保留了物理冗余的高可靠能力。
生成树协议也经历了好几代的迭代优化,最早的传统STP收敛速度很慢,端口从阻塞状态切换到可转发状态需要等待30到50秒,碰到重要业务场景长时间断网很容易造成损失,之后迭代出的RSTP快速生成树,把网络收敛时间直接压缩到了秒级,大幅提升了故障恢复效率,但它也存在明显缺陷:整个网络所有VLAN共享一棵生成树,多条冗余链路不能同时跑流量,带宽资源被白白浪费。现在主流厂商交换机默认启用的MSTP多生成树协议,既保留了秒级收敛的优势,还能让不同VLAN的流量走不同的转发路径,把所有冗余链路的带宽全部利用起来,实现流量的负载均衡。
如果你的需求是既想彻底消除环路风险,又要把两条冗余链路的带宽全部叠加利用,还可以选择配置链路聚合方案,把多条物理链路绑定成一条逻辑链路,同时实现带宽扩容和故障冗余,不需要阻塞任何端口,就能从根源上避免二层环路的产生。
