1. STP概述
1.1 STP的产生背景
在以太网交换网络中,为了提高可靠性,通常会部署冗余链路。然而,冗余链路会导致广播风暴、MAC地址表震荡、多帧复制等问题。STP(Spanning Tree Protocol,生成树协议)由IEEE 802.1D定义,用于在存在物理环路的网络中构建逻辑无环的树形拓扑,同时保留冗余路径,确保网络的高可用性。
1.2 STP的核心目标
- 消除环路:通过阻塞(Blocking)冗余端口,防止广播风暴。
- 提供冗余备份:当主链路故障时,被阻塞的端口可快速切换为转发(Forwarding)状态。
- 动态适应拓扑变化:自动检测链路状态并重新计算最优路径。
2. STP的工作原理
2.1 STP的基本概念
术语 | 说明 |
BPDU(Bridge Protocol Data Unit) | STP协议报文,用于交换拓扑信息 |
根桥(Root Bridge) | 整个STP网络的逻辑中心,所有流量最优路径指向根桥 |
根端口(Root Port) | 非根交换机上到达根桥的最优路径端口 |
指定端口(Designated Port) | 每个网段上负责转发流量的端口 |
阻塞端口(Blocking Port) | 被STP阻塞的端口,不转发数据 |
2.2 STP的选举机制
STP通过以下步骤构建无环拓扑:
- 选举根桥:
所有交换机发送BPDU,比较桥ID(Bridge ID),值最小的成为根桥。
桥ID = 桥优先级(默认32768) + MAC地址(优先级越小越优,若相同则比较MAC地址)。
- 选举根端口:
每个非根交换机选择一个到达根桥路径开销最小的端口作为根端口。
路径开销取决于链路带宽(如100Mbps=19,1Gbps=4,10Gbps=2)。
- 选举指定端口:
每个网段选举一个指定端口,负责转发流量。
比较原则:根路径开销 → 发送者桥ID → 发送者端口ID。
- 阻塞非指定端口:
未被选为根端口或指定端口的端口进入阻塞状态。
2.3 STP的端口状态
状态 | 描述 | 持续时间 |
Disabled | 端口关闭或未启用STP | - |
Blocking | 不转发数据,仅接收BPDU | 20秒(Max Age) |
Listening | 参与STP计算,不学习MAC | 15秒 |
Learning | 学习MAC地址,但仍不转发数据 | 15秒 |
Forwarding | 正常转发数据 | - |
STP的收敛时间通常为30-50秒(Blocking 20s + Listening 15s + Learning 15s)。
3. STP的改进版本
3.1 RSTP(快速生成树协议,IEEE 802.1w)
- 优化收敛时间(1-2秒):
- 取消Listening状态,合并为Discarding状态。
- 引入Proposal/Agreement机制,加速端口切换。
- 端口角色扩展:
- 根端口(Root Port)
- 指定端口(Designated Port)
- 替代端口(Alternate Port):备份根端口
- 备份端口(Backup Port):备份指定端口
3.2 MSTP(多生成树协议,IEEE 802.1s)
- 允许多个VLAN映射到一个生成树实例(MSTI),减少计算开销。
- 适用于大型企业网络,支持VLAN负载均衡。
3.3 PVST/PVST+(Cisco私有协议)
- 每个VLAN运行一个独立的STP实例,提供更精细的控制。
- 缺点:资源消耗较大。
4. STP详细配置方法
4.1 基础STP配置(以Cisco交换机为例)
(1)启用STP
Switch(config)# spanning-tree mode rapid-pvst # 使用RSTP(推荐)
Switch(config)# spanning-tree vlan 1 priority 4096 # 手动设置VLAN 1的桥优先级(越小越优先)(2)配置根桥和备份根桥
# 设置主根桥
Switch(config)# spanning-tree vlan 1 root primary
# 设置备份根桥
Switch(config)# spanning-tree vlan 1 root secondary(3)调整端口开销影响路径选择
Switch(config)# interface GigabitEthernet0/1
Switch(config-if)# spanning-tree cost 10 # 手动设置路径开销(值越小越优先)(4)配置边缘端口(连接PC/服务器)
Switch(config)# interface FastEthernet0/1
Switch(config-if)# spanning-tree portfast # 立即进入Forwarding状态
Switch(config-if)# spanning-tree bpduguard enable # 防止非法设备接入导致环路4.2 STP保护机制
(1)Root Guard(防止非法根桥)
Switch(config)# interface GigabitEthernet0/1
Switch(config-if)# spanning-tree guard root # 如果收到更优BPDU,则阻塞该端口(2)BPDU Guard(防止非法BPDU攻击)
Switch(config)# spanning-tree portfast bpduguard default # 全局启用
Switch(config)# interface FastEthernet0/1
Switch(config-if)# spanning-tree bpduguard enable # 接口启用(3)Loop Guard(防止单向链路故障导致环路)
Switch(config)# spanning-tree loopguard default # 全局启用
Switch(config)# interface GigabitEthernet0/1
Switch(config-if)# spanning-tree guard loop # 接口启用4.3 MSTP配置(多实例生成树)
Switch(config)# spanning-tree mode mst # 启用MSTP
Switch(config)# spanning-tree mst configuration
Switch(config-mst)# name REGION1 # 配置MST区域名称
Switch(config-mst)# revision 1 # 修订号
Switch(config-mst)# instance 1 vlan 10,20 # 将VLAN 10和20映射到实例1
Switch(config-mst)# instance 2 vlan 30,40 # 将VLAN 30和40映射到实例2
Switch(config-mst)# exit
Switch(config)# spanning-tree mst 1 priority 4096 # 设置实例1的优先级5. STP故障排查
5.1 常见问题
- STP收敛慢 → 改用RSTP/MSTP
- 根桥位置不合理 → 手动指定根桥
- 端口被错误阻塞 → 检查BPDU是否被过滤
5.2 常用排错命令
# 查看STP状态
Switch# show spanning-tree
# 查看指定VLAN的STP信息
Switch# show spanning-tree vlan 1
# 查看接口STP状态
Switch# show spanning-tree interface GigabitEthernet0/1
# 查看MSTP配置
Switch# show spanning-tree mst configuration6. 总结
STP是构建稳定、冗余网络的基础协议,其核心在于:
- 通过BPDU选举根桥、根端口和指定端口,构建无环拓扑。
- 提供30-50秒的收敛时间(RSTP优化至1-2秒)。
- 支持多种改进版本(RSTP/MSTP/PVST+),适应不同网络需求。
- 可配置保护机制(Root Guard/BPDU Guard/Loop Guard),增强安全性。
在实际部署时,建议:
- 手动指定根桥,避免网络震荡。
- 启用RSTP或MSTP,提高收敛速度。
- 配置边缘端口+BPDU Guard,优化接入层性能。
- 结合监控工具(如SNMP/NetFlow),实时检测STP状态。
