交换机工作原理与生成树协议
High Contrast
Dark Mode
Light Mode
Sepia
Forest
2 min read336 words

交换机工作原理与生成树协议

多台交换机互联提供冗余,但也带来"二层环路"的风险——广播帧在环路中无限循环,几秒内就能让整个网络瘫痪。生成树协议(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 在一台物理交换机上划分多个逻辑网络,实现流量隔离。