交换机工作原理与生成树协议
多台交换机互联提供冗余,但也带来"二层环路"的风险——广播帧在环路中无限循环,几秒内就能让整个网络瘫痪。生成树协议(STP)自动阻断冗余路径,是企业网络的基础安全机制。
二层环路与广播风暴
错误拓扑(没有 STP 时):
PC-A ──── 交换机 SW1 ──── 交换机 SW2 ──── PC-B
│ │
└───────────────────┘
(冗余链路)
发生了什么:
1. PC-A 发送广播帧(如 ARP)
2. SW1 从两条链路都发出这个广播
3. SW2 收到后,又从两条链路转发
4. 帧开始在环路中无限循环 → 广播风暴
结果:
- 网络带宽被广播帧耗尽
- 交换机 CPU 100%
- MAC 地址表不停刷新(MAC 闪烁)
- 整个 VLAN 通信中断
- 可能在几秒内发生
生成树协议(STP / 802.1D)
STP 通过选举一棵"树",阻断(Blocking)部分端口,消除环路。
STP 选举过程
步骤 1:选举根桥(Root Bridge)
─────────────────────────────────
所有交换机交换 BPDU(Bridge Protocol Data Unit)
优先级(默认 32768)最低的成为根桥
优先级相同时,MAC 地址最小的成为根桥
步骤 2:每台非根交换机选举根端口(Root Port)
──────────────────────────────────────────────
到根桥路径开销(Cost)最低的端口 = 根端口
链路速度对应开销:
10 Gbps = 2
1 Gbps = 4
100 Mbps = 19
10 Mbps = 100
步骤 3:每个网段选举指定端口(Designated Port)
──────────────────────────────────────────────
每条链路上,到根桥开销更低的那端 = 指定端口
步骤 4:其余端口 → 阻塞(Blocking)状态
──────────────────────────────────────────
不转发数据,只接收 BPDU(监听拓扑变化)
STP 端口状态
状态 持续时间 说明
─────────────────────────────────────────────────────────
Blocking 20秒(MAX_AGE) 不转发帧,不学习 MAC,监听 BPDU
Listening 15秒(FWD_DLY) 不转发帧,不学习 MAC,参与选举
Learning 15秒(FWD_DLY) 不转发帧,开始学习 MAC 地址表
Forwarding 持续 正常转发数据
总收敛时间:约 30-50 秒(这就是为什么接网线时要等一会才能上网)
RSTP(快速生成树,802.1w)
RSTP 大幅改进了 STP 的收敛时间:
特性 STP(802.1D) RSTP(802.1w)
─────────────────────────────────────────────────
收敛时间 30-50秒 1-2秒
端口状态数 5 3(Discarding/Learning/Forwarding)
拓扑变化通知 慢(通过根桥) 快(直接通知邻居)
边缘端口 不支持 PortFast(直接进入 Forwarding)
STP 实战配置(Cisco IOS 风格)
# 查看 STP 状态
SW1# show spanning-tree vlan 1
VLAN0001
Spanning tree enabled protocol rstp
Root ID Priority 24577
Address aabb.cc00.1000
This bridge is the root
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 24577
Address aabb.cc00.1000
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Interface Role Sts Cost Prio.Nbr Type
─────────────────── ──── ─── ─────────────────────────────────────
Gi0/1 Desg FWD 4 128.1 P2p
Gi0/2 Desg FWD 4 128.2 P2p
Gi0/3 Altn BLK 4 128.3 P2p ← 阻塞端口
# 手动指定根桥(降低优先级)
SW1(config)# spanning-tree vlan 1 priority 4096
# 配置 PortFast(连接终端设备的端口,直接进入 Forwarding)
SW1(config-if)# spanning-tree portfast
# 配置 BPDU Guard(防止 PortFast 端口收到 BPDU 时自动关闭端口)
SW1(config-if)# spanning-tree bpduguard enable
Linux 下查看生成树信息
# Linux 网桥的生成树状态(Docker/KVM 会用到网桥)
brctl showstp br0
# 查看网桥上的接口
brctl show
# 创建网桥并启用 STP
ip link add name br0 type bridge
ip link set br0 type bridge stp_state 1
ip link set eth1 master br0
ip link set br0 up
常见故障与排查
故障 1:连接新设备后几秒才能通信
原因:STP 收敛(Listening→Learning→Forwarding)
解决:在接终端设备的端口启用 PortFast
故障 2:网络间歇性广播风暴
原因:某条 Blocked 链路 BPDU 超时,变为 Forwarding,形成临时环路
排查:
show spanning-tree detail | grep TCN # 查看拓扑变化次数
show log | grep SPANTREE # 查看 STP 日志
故障 3:交换机间链路接错形成单向链路
原因:光纤只接了单向(TX/RX 对调),STP 认为链路正常但实际单向
解决:启用 UDLD(单向链路检测)
故障 4:STP 选举了错误的根桥
原因:新接入的廉价交换机 MAC 地址小,变成了根桥
解决:手动设置核心交换机为根桥(设低优先级)
CCNA 对应考点
考纲位置:Domain 2.5 — Configure and verify Layer 2 discovery protocols Domain 2.6 — Configure and verify (Layer 2/Layer 3) EtherChannel
高频考题: - STP 根桥选举规则(优先级低优先,相同则 MAC 小优先) - 端口角色:Root Port / Designated Port / Alternate Port (RSTP) - PortFast 和 BPDU Guard 的作用 - RSTP vs STP 收敛时间差异
下一节:VLAN 配置与 Trunk 链路——生成树解决了环路问题。接下来用 VLAN 在一台物理交换机上划分多个逻辑网络,实现流量隔离。