主要改进点对比
| 特性维度 | STP (IEEE 802.1D) | RSTP (IEEE 802.1w) | 改进点分析 |
|---|---|---|---|
| 收敛速度 | 慢(30-50秒) | 快(1-2秒,理想情况下亚秒级) | 这是最根本的改进。RSTP通过下面的一系列机制消除了STP中不必要的等待时间。 |
| 端口角色 | 3种: • 根端口 • 指定端口 • 阻塞端口 | 4种: • 根端口 • 指定端口 • 替代端口 • 备份端口 | 关键改进 :增加了"替代端口"和"备份端口"。它们相当于备用端口 ,预先计算好替代方案。当根端口或指定端口失效时,可以立即切换,无需重新计算。 |
| 端口状态 | 5种: • 禁用 • 阻塞 • 侦听 • 学习 • 转发 | 精简为3种 : • 丢弃 • 学习 • 转发 | 状态简化 :RSTP将STP中的阻塞、侦听 状态合并为 "丢弃" 状态。端口要么在丢弃数据(但不学习MAC),要么在学习MAC,要么在转发数据。逻辑更清晰,去掉了不必要的中间状态。 |
| 收敛机制 | 依赖计时器 : • Max Age (20s) • Forward Delay (15s x 2) 必须等待计时器超时才能切换。 | 主动协商(P/A机制) : • 点到点链路通过提议/同意 握手机制。 • 可以在几秒内将端口快速转变为转发状态。 | 革命性改进 :P/A机制允许端口在确信不会形成环路后,跳过侦听和学习状态,直接进入转发状态。这极大地加快了新链路连接或根端口切换的速度。 |
| BPDU处理 | • 仅由根桥定期(每2秒)发送。 • 非根桥只是转发。 • 丢失3个BPDU才认为链路故障。 | • 每个桥都会定期(每2秒)发送BPDU ,即使收不到根的BPDU。 • BPDU作为保活机制:连续3个Hello时间(6秒)没收到BPDU就认为邻居丢失。 | 增强稳定性:这使得故障检测更快、更可靠。交换机能主动感知链路故障,而不必被动等待根桥的BPDU。 |
| 对次优BPDU的处理 | 当收到一个次优BPDU(即比当前端口保存的BPDU更差)时,端口会忽略它,直到Max Age超时。 | 当收到一个次优BPDU时,端口会立即回复一个自己保存的更优的BPDU。 | 加速收敛:这能快速纠正因临时配置错误或BPDU丢失导致的网络拓扑不一致问题,使对方端口快速进入正确的角色和状态。 |
端口角色
通过端口角色的增补 简化了生成树协议的理解与部署

端口状态
RSTP的状态规范缩减为3种,根据端口是否转发用户流量和学习MAC地址来划分
- discarding 不转发用户流量也不学习mac地址
- learning 不转发用户流量但学习mac地址
- forwarding 转发用户流量也学习mac地址

Flag位
RSTP配置BPDU充分利用STP报文中的Flag位置 明确端口角色 除了保证和STP格式基本一致外,RSTP做了如下变化:
- Type字段:STP类型 配置BPDU类型不再是0而是2,所以STP设备收到RSTP设备的配置BPDU时会丢弃
- Flag字段:使用了原来保留的中间6位,这样的改变的配置BPDU叫做RST BPDU
RST BPDU报文格式

配置BPDU的处理(1)

- 在STP模式下 只有根桥可以主动发送BPDU报文 其他非根桥设备为接收与转发BPDU STP计算过程复杂且缓慢
- RSTP模式 每台设备都可以自主的发送BPDU报文
- 默认Hello Time时间为2秒
配置BPDU的处理(2)

- 在STP模式下 需要等待超时时间后 才能判断根桥是否故障 MaxAge时间20秒
- RSTP模式下 只需要等待6秒 即认为邻居失效 华为设备存在一个时间因子 时间因子可以修改 默认为 helloTime(2秒) ✕ 3 ✕ 时间因子(3) = 18秒
配置BPDU的处理(3)

- STP模式下 只有指定接口会处理次优BPDU报文 其他端口会忽略次优BPDU
- RSTP模式下 接收到次优的BPDU会与自身缓存的BPDU进行比较 选择更优的BPDU 且立即回应自身的BPDU
- 图示下 SW2与上游链路故障 会认为自己是根桥 发送BPDU报文 然后SW3比较SW1与SW2的BPDU报文 选择优秀的BDPU,也就是选择更好的根桥 并且会把结果告诉给次优BPDU方向的SW2 告诉他不是根桥 (在STP下会忽略次优BPDU报文)
配置BPDU的处理总结
- 每台设备可以自主的发送BPDU报文 加快收敛时间
- 更短的BPDU超时时间 18s ( STP 20s )
- 收到次优BPDU报文会选择更优并且回复消息
快速收敛机制
机制一 端口角色快速切换
当设备根端口失效时,原本阻塞端口不需等待30s时间。直接成为Forwarding状态

- 在STP模式下 根端口故障 阻塞端口切换为根端口需要30s时间
- RSTP模式下 只要根端口存在故障 最优的阻塞端口会立即成为根端口
机制二 边缘端口

- 边缘端口不参与RSTP计算 直接进入Forwarding状态 但是一但接收到BPDU报文 就会丧失BPDU边缘端口属性 成为STP端口 重新进行生成树计算 导致网络震荡
机制三 PA机制

- 根桥指定端口 会发一个P位置1的报文 告诉别人自己想要进入Forwording状态 下联设备 发送A置位为1的报文 告诉上联接口可以并且将自己的根端口进入转发状态
- STP(生成树协议)设计Forwarding Delay(转发延迟)的主要目的是为了在拓扑变化时给网络足够的时间来避免临时环路。下面详细解释原因。
PA机制详解


- SW2收到根桥P置为的RST BPDU,开始将所有端口进入同步状态(不转发数据)上游端口进入转发状态并且回复A置位的RST bpdu 从而防止临时环路

拓扑变更机制(TC报文发送机制)

- 一个非边缘端口(阻塞端口)变为Forwarding状态 即拓扑发生改变
- 边缘端口因为不会参与到STP的计算 所以边缘端口由up到down 以及down到up都不会进行拓扑变更
- SW3上行链路故障 原本AP接口切换为RP,进入转发状态。SW3接口会在hellotime的2倍时间,进行清除除边缘端口外所有端口的mac地址表项。同时会在根端口与指定端口发送TC置位的RST BPDU报文。一旦hellotime2倍时间超时,停止发送报文。其他接口收到RST-BPDU报文,清空除来源方向的所有接口的mac地址,同时启动TC While Time时间。
- 当交换机检测到链路故障,其备用端口会转换为转发状态。此时,该交换机会生成并向外传播TC位置位的RSTP BPDU。收到该报文的交换机会清空除接收端口外所有端口的MAC地址表项,并继续泛洪此拓扑变更消息。
TC置位为1的BPDU报文

STP拓扑变更机制

- STP只有根桥可以主动发送BPDU报文 所以在拓扑发生改变时候,需先向根桥发送TCN报文 然后由根桥发送TC报文
保护功能
BPDU保护

h3c
# 在端口视图下开启
interface g1/0/1
stp port bpdu-protection enable
# 开启后检测到bpdu报文后 会自动关闭接口 需要手动开启 或则配置自动启动时间
# 全局视图下开启 配置边缘端口自动生效
stp bpdu-protection
error-down auto-recovery cause bpdu-protection 300
根保护功能

- 防止根桥被其他设备抢占 根桥不允许改变
h3c
# 在接口下开启根保护功能(对接口保持为指定端口)
stp root-protection
# 在一个端口下 不可以同时配置根保护和环路保护功能
环路保护

-
问题场景为光纤双纤 其中一纤发生故障 导致SW3收不到SW1根桥的bpdu 然后SW3的AP口切换为转发状态导致的网络环路问题
-
开启环路保护功能后 如果在指定时间没有接收到上游交换机的bpdu报文 则直接进入Discarding状态
h3c
# 全局开启环路检测,并检测所有VLAN
loopback-detection global enable vlan all
# 出现环路时,采取的动作是shutdown
loopback-detection global action shutdown
# 指定环路检测的时间间隔为10秒
loopback-detection interval-time 10
# 接口视图下配置
loopback-detection enable vlan all
loopback-detection action shutdown
防TC-BPDU保护

- 限定一定时间内处理tc报文的个数 默认处理TC-BPDU时间为2秒 个数为1
h3c
# 在一个周期内可以处理多少个tc-bpdu报文 默认为1
# 可以避免频繁的删除mac地址表项
# 全局视图下配置
stp tc-protection threshold <1-255>