RSTP协议
RSTP
RSTP是从STP发展而来,实现的基本思想一致。
- RSTP标准版本为IEEE802.1w
- RSTP具备STP的所有功能,可以兼容STP运行
- RSTP和STP有所不同:
- 减少了端口状态
- 增加了端口角色
- BPDU格式及发送方式不同
- 当交换网络拓扑结构发生变化时,RSTP可以更快地恢复网络的连通性。
RSTP的端口状态
STP端口状态:
- Disabled(端口没有启用):此状态下端口不转发数据帧,不学习MAC地址表,不参与生成树
计算。 - Blocking(阻塞状态):此状态下端口不转发数据帧,不学习MAC地址表,此状态下端口
接收并处理BPDU,但是不向外发送BPDU。 - Listening(侦听状态):此状态下端口不转发数据帧,不学习MAC地址表,只参与生成树
计算,接收并发送BPDU。 - Learning(学习状态):此状态下端口不转发数据帧,但是学习MAC地址表,参与计算生
成树,接收并发送BPDU。 - Forwarding(转发状态):此状态下端口转发数据帧,但是学习MAC地址表,参与计算生
成树,接收并发送BPDU。
RSTP把Disabled、Blocking、Listening合成一个Discading状态。
RSTP的端口角色
STP中有根端口(Root Port)、指定端口(Designated Port)、阻塞端口(Alternate Port),而RSTP中增加了Backup端口、边缘端口(也可以说是特殊的指定端口)。
Backup Port 也可以理解成交换机自己成环时的端口(同一链路指定端口的备份)。
Alternate Port也可以理解成交换机与交换机成环时的端口(同一网桥根端口的备份)。
边缘端口:
- 边缘端口指网桥上直接和终端相连的端口。
- 边缘端口可以直接进入转发状态,不需要延时,并且不会触发拓扑改变。
- 边缘端口收到BPDU后,会转变为非边缘端口。
RSTP BPDU格式
RSTP BPDU 的 Flags 字段详解(对比 STP)
以下是 RSTP(802.1w)与 STP(802.1D)在 BPDU 格式及 Flags 字段的关键区别及具体含义:
1. BPDU 格式差异
字段 | STP (802.1D) | RSTP (802.1w) | 说明 |
---|---|---|---|
Protocol Version ID | 0 | 2 | RSTP 使用版本号 2 标识。 |
BPDU Type | 0x00 (配置 BPDU) | 0x02 (RSTP BPDU) | RSTP 的 BPDU 类型为 0x02。 |
Flags 字段利用率 | 仅用 2 位(TC/TCA) | 使用全部 8 位 | RSTP 通过 Flags 传递更多信息。 |
Version 1 Length | 无 | 新增(兼容 STP) | 用于向后兼容 STP 设备。 |
2. Flags 字段 8 位的具体含义
RSTP 的 Flags 字段充分利用了所有 8 位,各标志位含义如下:
位 | 名称 | 功能说明 |
---|---|---|
0 | Topology Change (TC) | 标识网络拓扑变化(类似 STP)。 |
1 | Proposal § | 用于 P/A 机制,提议端口成为指定端口(快速收敛)。 |
2-3 | Port Role | 两位组合表示端口角色: - 00: 未知 - 01: Alternate/Backup - 10: Root Port - 11: Designated Port |
4 | Learning (L) | 端口处于学习状态(正在构建 MAC 表)。 |
5 | Forwarding (F) | 端口处于转发状态(可正常转发数据)。 |
6 | Agreement (A) | 用于 P/A 机制,确认对端的 Proposal 请求(快速收敛)。 |
7 | Topology Change Ack (TCA) | 确认收到拓扑变化通知(类似 STP)。 |
3. 关键机制对比
-
端口角色标识(位2-3)
- STP 不显式携带端口角色,需通过计算确定。
- RSTP 直接在 BPDU 中声明角色(如 Root Port、Alternate Port),加速收敛决策。
-
P/A 机制(位1和位6)
- Proposal §: 发起快速切换请求(如指定端口竞选)。
- Agreement (A): 对端同意后,端口立即进入转发状态(跳过 STP 的 30 秒延迟)。
-
状态标识(位4-5)
- 直接通过
Learning
和Forwarding
位声明端口状态,避免依赖计时器。
- 直接通过
4. 示例场景
场景:RSTP 快速收敛(P/A 机制)
- 交换机A的新端口激活,发送 Proposal (P=1) 的 BPDU。
- 交换机B收到后,阻塞其他端口,回复 Agreement (A=1)。
- 交换机A收到后,立即将端口置为 Forwarding (F=1),完成秒级收敛。
5. 总结
- RSTP 的 Flags 字段是快速收敛的核心,通过显式携带端口角色、状态和协商标志,取代了 STP 的被动等待机制。
- 关键改进:
- 端口角色与状态直接编码在 BPDU 中。
- P/A 机制实现点到点链路的秒级收敛。
- 完全利用 8 位 Flags,增强信息传递效率。
当网络拓扑发生变化时,RSTP(快速生成树协议)会通过BPDU中的Flags字段来传递这一信息。以下是拓扑变化发生时BPDU中相关字段的具体设置:
1. 拓扑变化触发的字段设置
当检测到拓扑变化(如链路故障或新链路加入)时,RSTP BPDU的Flags字段会按以下方式设置:
字段 | 值 | 说明 |
---|---|---|
Topology Change (TC) (位0) | 1 | 表示网络拓扑已发生变化,需要其他交换机快速更新转发表。 |
Topology Change Ack (TCA) (位7) | 1 | 用于确认收到拓扑变化通知(仅在响应TC标志时由下游交换机设置)。 |
Port Role (位2-3) | 根据实际角色 | 可能变为: - 00 (未知,如新端口)- 01 (Alternate/Backup端口)- 10 (新选举的Root Port)- 11 (Designated Port) |
Learning (L) (位4) | 0或1 | 若端口需重新学习MAC地址,则置1。 |
Forwarding (F) (位5) | 0或1 | 根据新拓扑决定是否转发数据(如新Root Port置1,阻塞端口置0)。 |
2. 拓扑变化的具体流程
场景1:链路故障
-
检测故障:
- 交换机发现某端口(如Root Port)失效,立即将本地BPDU的 TC位(位0)置1,并通过所有Designated Port发送。
- 端口角色字段更新(如原Alternate Port变为新Root Port,位2-3从
01
变为10
)。
-
传播TCN:
- 下游交换机收到TC=1的BPDU后:
- 将 TCA位(位7)置1 作为确认。
- 清空相关端口的MAC表(通过Learning位=1触发重新学习)。
- 下游交换机收到TC=1的BPDU后:
场景2:新链路加入
-
P/A机制:
- 新端口的BPDU中:
- Proposal (P=1)(位1):请求成为Designated Port。
- Port Role=11(位2-3):声明为Designated Port候选。
- 对端交换机回复:
- Agreement (A=1)(位6):同意提案,端口立即进入Forwarding状态(F=1)。
- 新端口的BPDU中:
-
拓扑更新:
- 若新链路改变了最优路径,触发TC=1通知全网更新。
3. BPDU示例(拓扑变化时)
假设交换机A的Root Port失效,新选举Alternate Port为Root Port:
RSTP BPDU Flags字段值:
位0 (TC) = 1 # 拓扑变化
位1 (P) = 0 # 非P/A过程
位2-3 (Port Role) = 10 # 新Root Port
位4 (L) = 1 # 重新学习MAC
位5 (F) = 1 # 新Root Port需转发
位6 (A) = 0 # 未使用
位7 (TCA) = 0 # 仅响应时置1
4. 与STP的对比
行为 | STP (802.1D) | RSTP (802.1w) |
---|---|---|
拓扑变化通知 | 依赖TCN BPDU(单独消息) | 直接通过TC标志位(位0)在配置BPDU中传递 |
MAC表更新 | 等待Max Age计时器超时(20秒) | 立即清空相关端口MAC表(TC=1触发) |
端口角色切换 | 依赖计时器(30秒) | 通过Flags字段显式声明角色,秒级切换 |
5. 总结
- TC=1:核心标志,表示拓扑变化,触发全网快速更新。
- Port Role字段:动态反映端口角色变化(如Alternate→Root Port)。
- P/A机制(P=1/A=1):用于新链路快速协商,避免等待计时器。
- 与STP的区别:RSTP通过Flags字段的精细控制,将收敛时间从分钟级缩短到秒级。
通过这种设计,RSTP 将收敛时间从 STP 的 30~50 秒缩短到 1 秒以内,显著提升网络可靠性。
RSTP(快速生成树协议)的3个快速收敛机制
RSTP(IEEE 802.1w)是STP(802.1D)的改进版,主要优化了收敛速度。它的3个核心快速收敛机制如下:
1. 边缘端口(Edge Port)
- 作用:加速终端设备的接入,避免不必要的STP计算。
- 特点:
- 直接连接终端设备(如PC、服务器、IP电话等),不会形成环路。
- 不参与STP计算,默认立即进入Forwarding状态(无需经历Listening/Learning状态)。
- 需手动配置(如Cisco的
spanning-tree portfast
)。
- 优势:
- 终端设备接入时立即可用(传统STP需要30~50秒收敛)。
- 避免因终端频繁上下线触发STP重新计算。
注意:如果错误地将边缘端口连接到交换机(可能形成环路),会导致广播风暴!
2. 根端口快速切换(Root Port Fast Transition)
- 作用:当根端口失效时,快速启用备份端口(Alternate Port)作为新根端口。
- 条件:
- 新根端口的对端端口必须已经是Designated Port(DP)且处于Forwarding状态。
- 过程:
- 传统STP中,新根端口需要经历Listening→Learning→Forwarding(30秒)。
- RSTP中,如果对端DP已处于Forwarding状态,说明链路无环路,新根端口直接进入Forwarding状态(无需等待)。
- 优势:
- 根端口切换时间从30秒缩短到几毫秒。
根端口快速切换的扩展讨论:对端端口非DP或非Forwarding状态的情况
在RSTP中,根端口快速切换(Root Port Fast Transition) 的核心思想是:如果新根端口的对端端口已经是Designated Port(DP)且处于Forwarding状态,则新根端口可以直接进入Forwarding状态。但若这一条件不满足(例如对端端口不是DP或未处于Forwarding状态),RSTP的处理逻辑会有所不同。以下是详细分析:
1. 对端端口不是Designated Port(DP)
可能场景:
- 对端端口是 Alternate Port 或 Backup Port(阻塞状态)。
- 对端端口尚未完成角色选举(例如新链路刚激活)。
RSTP的行为:
- 无法直接快速切换,因为对端端口未承担转发职责,可能存在环路风险。
- 触发 P/A机制(Proposal/Agreement):
- 新根端口会发送带有 Proposal标志(P=1) 的BPDU,请求对端同意其成为根端口。
- 对端交换机需阻塞其他冗余端口(确保无环路),然后回复 Agreement标志(A=1)。
- 收到Agreement后,新根端口才能进入Forwarding状态。
- 收敛时间:通常为1~2秒(比STP的30秒快,但比“直接切换”略慢)。
示例:
交换机A(原根端口失效) 交换机B
-------------------------- --------------------------
新根端口(RP候选) ----------- 对端端口(Alternate Port)
- 交换机A的新根端口发送P=1的BPDU。
- 交换机B将Alternate Port切换为DP,阻塞其他端口,回复A=1。
- 交换机A收到后,新根端口进入Forwarding状态。
2. 对端端口是DP但未处于Forwarding状态
可能原因:
- 对端DP因拓扑变化临时阻塞(例如刚完成角色选举,尚未进入Forwarding)。
- 链路不稳定导致状态未同步。
RSTP的行为:
- 需等待对端DP完成状态转换(Listening→Learning→Forwarding)。
- RSTP会通过 BPDU中的Learning(L)和Forwarding(F)标志 同步状态:
- 若对端DP的F=0,新根端口需等待其变为F=1。
- 收敛时间:取决于对端DP的状态转换速度(通常小于1秒)。
优化机制:
- RSTP的 同步机制(Sync) 会强制对端DP快速进入Forwarding状态(通过P/A机制协商)。
3. 对比STP的局限性
场景 | STP (802.1D) | RSTP (802.1w) |
---|---|---|
对端是DP且Forwarding | 固定30秒延迟 | 直接切换(毫秒级) |
对端非DP或未Forwarding | 依赖计时器(50秒以上) | 触发P/A机制(1~2秒) |
链路不稳定 | 多次计时器重置 | 通过BPDU标志快速同步状态 |
4. 总结
- 理想情况(对端是DP且Forwarding):RSTP实现毫秒级切换。
- 非理想情况(对端非DP或未Forwarding):
- 依赖P/A机制协商,收敛时间1~2秒。
- 仍远快于STP的30~50秒。
- 核心优势:RSTP通过显式协商(Flags字段)和状态同步,避免了STP的被动等待,适应复杂拓扑变化。
关键点:RSTP的快速切换不仅依赖条件满足时的“直接生效”,更通过灵活的协商机制覆盖所有场景,确保快速收敛。
3. 指定端口快速切换(Proposal/Agreement机制,P/A)
- 作用:在点到点链路(如交换机直连)中快速协商指定端口状态。
- 过程(以两台交换机A和B为例):
- Proposal(提议):
- 交换机A检测到新链路,发送RSTP BPDU,其中包含
Proposal
标志,请求成为该网段的指定端口(DP)。
- 交换机A检测到新链路,发送RSTP BPDU,其中包含
- Agreement(同意):
- 交换机B收到后,阻塞所有非边缘端口,确保无环路风险,然后回复
Agreement
标志。 - 交换机A收到
Agreement
后,立即将端口置为Forwarding状态(无需等待)。
- 交换机B收到后,阻塞所有非边缘端口,确保无环路风险,然后回复
- 逐链路收敛:
- 该机制在点到点链路上逐跳生效,实现全网快速收敛(传统STP需要逐设备等待)。
- Proposal(提议):
- 优势:
- 指定端口的收敛时间从30秒缩短到1~2秒。
非点到点链路(共享链路/多访问网络)中的P/A机制行为
在RSTP中,Proposal/Agreement(P/A)机制 的设计初衷是针对 点到点链路(Point-to-Point Link) 的快速收敛。当链路类型为 非点到点(如共享式Hub或多访问网络) 时,P/A机制的行为会发生变化,甚至可能无法生效。以下是详细分析:
1. 非点到点链路的典型场景
- 共享式Hub环境:多个设备通过Hub连接,形成单一冲突域。
- 多访问网络:如传统以太网广播域(未启用全双工或未配置为点对点链路)。
- 无线网络:AP与多个客户端共享的无线介质。
在这些场景中,无法保证链路的独占性,因此RSTP会采取保守策略。
2. P/A机制在非点到点链路中的限制
(1)P/A机制默认不生效
- RSTP会检测链路类型(通过双工模式或手动配置):
- 全双工链路:自动识别为点对点,启用P/A机制。
- 半双工链路:识别为共享介质,禁用P/A机制。
- 行为差异:
链路类型 P/A机制 收敛方式 点对点(全双工) 启用 快速协商(1~2秒) 共享式(半双工) 禁用 回退到STP的监听/学习状态(30秒)
(2)收敛过程回退到STP模式
- 指定端口的选举仍需通过传统的 Listening→Learning→Forwarding 状态机:
- Listening(监听):15秒,检测环路。
- Learning(学习):15秒,构建MAC表。
- Forwarding(转发):最终状态。
- 总延迟:30秒(与STP相同)。
(3)原因分析
- 共享链路的环路风险:
在非点到点链路中,多个端口可能竞争成为指定端口,P/A机制无法确保所有端口的同步阻塞,可能导致临时环路。 - BPDU传播不可靠:
共享介质中BPDU可能被冲突或延迟,P/A的“提议-同意”握手无法保证原子性。
3. 实际案例
场景:交换机通过Hub连接
交换机A ----------------- Hub ----------------- 交换机B|交换机C
- 问题:
- Hub是共享介质,交换机A和交换机B的端口均可能成为指定端口。
- 若启用P/A机制,交换机A和B可能同时发送Proposal(P=1),但Hub无法保证BPDU的顺序,导致协商失败。
- 结果:
- RSTP禁用P/A机制,回退到STP的30秒收敛。
解决方案:
- 更换为交换机:将Hub替换为交换机,配置全双工点对点链路。
- 手动强制点对点模式:在交换机端口配置
spanning-tree link-type point-to-point
(需确认物理链路支持)。
4. 与点对点链路的对比
特性 | 点对点链路(P/A生效) | 非点到点链路(P/A不生效) |
---|---|---|
收敛时间 | 1~2秒 | 30秒 |
BPDU交互 | 直接握手(P/A) | 依赖计时器 |
环路风险 | 无(同步阻塞保证) | 需保守等待 |
典型场景 | 交换机直连、全双工光纤 | Hub连接、半双工无线网络 |
5. 总结
- P/A机制仅在点对点链路中生效:这是RSTP实现秒级收敛的核心前提。
- 非点到点链路的表现:
- 禁用P/A机制,回退到STP的30秒收敛。
- 因无法保证环路安全,必须保守等待端口状态机完成。
- 优化建议:
- 避免使用Hub等共享设备,优先部署全双工点对点链路。
- 检查交换机端口配置,确保链路类型正确识别(如
show spanning-tree interface
)。
关键结论:RSTP的快速收敛能力高度依赖网络拓扑的确定性设计,非点到点环境会丧失其核心优势。
对比传统STP的改进
机制 | 传统STP(802.1D) | RSTP(802.1w) |
---|---|---|
边缘端口 | 无,所有端口需经历30秒收敛 | 手动配置,立即Forwarding |
根端口切换 | 需30秒(Listening+Learning) | 对端DP已Forwarding则立即生效 |
指定端口协商 | 无,依赖计时器 | P/A机制,1~2秒完成 |
总结
- 边缘端口:加速终端接入,避免STP计算。
- 根端口快速切换:利用对端DP状态跳过等待时间。
- P/A机制:通过握手协议实现点到点链路的秒级收敛。
RSTP通过这些机制将网络收敛时间从STP的30~50秒缩短到1秒以内,适用于现代高可用网络。
RSTP中BPDU的处理
- 网桥自行从指定端口发送RST BPDU,不需要等待来自根桥的RST BPDU。发送周期为2sHello Time
- 在标准RSTP实现中,若连续3个Hello Time未收到邻居BPDU,网桥会触发邻居失效检测机制。
阻塞端口(Discarding状态):通常是Alternate Port或Backup Port,不转发数据,但会持续监听BPDU。
• 收到低优先级BPDU:
◦ 若收到的BPDU中根桥ID或路径开销比自己存储的更差(即优先级更低),可以立即回应自身存储的更优BPDU。
◦ 目的:帮助邻居快速纠正错误的拓扑信息,加速收敛。
RSTP拓扑改变处理机制详解
您提供的图示描述了RSTP(快速生成树协议)中拓扑改变(Topology Change, TC)的触发条件和处理流程。以下是专业解析和补充说明:
1. 拓扑改变的触发条件
-
正确描述:
- 只有当非边缘端口(Non-Edge Port)转变为Forwarding状态时,才会触发拓扑改变(TC)。
- **边缘端口(Edge Port)**的状态变化(如PortFast端口)不会触发TC,因为它们直接连接终端设备,不会引入环路风险。
-
常见触发场景:
- 新链路激活(端口从Discarding/Learning → Forwarding)。
- 故障链路恢复(Alternate Port切换为Forwarding)。
2. 拓扑改变的处理流程
(1)TC报文的发送
- 发送者:检测到拓扑改变的交换机(如端口变为Forwarding的交换机)。
- 发送范围:
- 在两倍Hello Time时间内(默认Hello Time=2秒,即4秒),向以下端口发送TC标志位置1的BPDU:
- 所有指定端口(Designated Ports)
- 根端口(Root Port)
- 在两倍Hello Time时间内(默认Hello Time=2秒,即4秒),向以下端口发送TC标志位置1的BPDU:
- 目的:快速通知全网交换机更新拓扑。
(2)MAC地址表清除
- 清除规则:
- 交换机收到TC BPDU后,会清除除接收端口外的所有指定端口和根端口学习到的MAC地址。
- 例外:边缘端口的MAC表项通常保留(因其连接终端,无环路风险)。
- 作用:强制重新学习MAC地址,避免因拓扑变化导致数据包转发错误。
3. 完整流程示例
场景:SW1的端口G0/1从Discarding变为Forwarding(非边缘端口)。
- SW1检测到TC:
- 端口G0/1变为Forwarding,触发TC事件。
- SW1发送TC BPDU:
- 在4秒内,向所有指定端口和根端口发送TC=1的BPDU。
- 邻居交换机(如SW2)处理:
- 收到TC BPDU后:
- 清除除接收端口外的所有指定端口和根端口的MAC表项。
- 继续向其他下游端口转发TC BPDU(形成泛洪效应)。
- 收到TC BPDU后:
- 全网更新:
- 所有交换机在短时间内(秒级)完成MAC表更新和路径收敛。
4. 与STP的对比
行为 | STP (802.1D) | RSTP (802.1w) |
---|---|---|
TC触发条件 | 端口变为Forwarding或阻塞 | 仅非边缘端口变为Forwarding |
TC传播机制 | 依赖根桥发起TCN BPDU | 本地交换机直接发送TC BPDU |
MAC表清除范围 | 所有端口 | 仅指定端口和根端口 |
收敛时间 | 30~50秒 | 1~2秒 |
5. 华为设备的特殊处理
- TC报文发送周期:默认两倍Hello Time(4秒),但可通过命令调整:
stp tc-protection interval ? # 修改TC发送间隔
- MAC表老化时间:通常与标准一致,但可通过
mac-address aging-time
独立配置。
6. 常见配置问题
-
边缘端口误配置:
若将非边缘端口错误配置为edge-port
,可能导致TC事件无法触发,形成临时环路。
解决方法:# Huawei undo stp edged-port interface GigabitEthernet0/0/1# Cisco no spanning-tree portfast interface Gi1/0/1
-
TC风暴防护:
频繁TC事件可能引发CPU过载。建议启用防护:# Huawei stp tc-protection enable# Cisco spanning-tree portfast bpduguard
7. 总结
- 触发精准:仅非边缘端口的Forwarding状态变化触发TC,避免不必要的收敛。
- 快速传播:TC BPDU直接泛洪,无需依赖根桥中转。
- 定向清除MAC:最小化对转发性能的影响。
如需验证实际网络中的TC行为,可通过以下命令:
# Huawei
display stp tc-bpdu statistics# Cisco
show spanning-tree detail | include TC