1. 介绍

RSTP(Rapid Spanning Tree Protocol),快速生成树协议,标准为802.1w(已合入802.1D-2004)
RSTP是对STP技术的修改和补充,最大特点就是快速收敛

2. 概念

2.1 端口属性

RSTP定义了如下端口属性

 - 链路类型, Link Type
- 端口角色, Port Role
- 端口状态, Port State

.csharpcode, .csharpcode pre { font-size: small; color: rgba(0, 0, 0, 1); font-family: consolas, “Courier New”, courier, monospace; background-color: rgba(255, 255, 255, 1) }
.csharpcode pre { margin: 0 }
.csharpcode .rem { color: rgba(0, 128, 0, 1) }
.csharpcode .kwrd { color: rgba(0, 0, 255, 1) }
.csharpcode .str { color: rgba(0, 96, 128, 1) }
.csharpcode .op { color: rgba(0, 0, 192, 1) }
.csharpcode .preproc { color: rgba(204, 102, 51, 1) }
.csharpcode .asp { background-color: rgba(255, 255, 0, 1) }
.csharpcode .html { color: rgba(128, 0, 0, 1) }
.csharpcode .attr { color: rgba(255, 0, 0, 1) }
.csharpcode .alt { background-color: rgba(244, 244, 244, 1); 100%; margin: 0 }
.csharpcode .lnum { color: rgba(96, 96, 96, 1) }

2.2 链路类型

RSTP定义了三种链路类型

 - 点对点(Point-to-Point Link): 交换机间的连接
- 共享(Shared Link):           交换机到hub(集线器)的连接
- 边缘(Edge):                  交换机到终端设备的连接

.csharpcode, .csharpcode pre { font-size: small; color: rgba(0, 0, 0, 1); font-family: consolas, “Courier New”, courier, monospace; background-color: rgba(255, 255, 255, 1) }
.csharpcode pre { margin: 0 }
.csharpcode .rem { color: rgba(0, 128, 0, 1) }
.csharpcode .kwrd { color: rgba(0, 0, 255, 1) }
.csharpcode .str { color: rgba(0, 96, 128, 1) }
.csharpcode .op { color: rgba(0, 0, 192, 1) }
.csharpcode .preproc { color: rgba(204, 102, 51, 1) }
.csharpcode .asp { background-color: rgba(255, 255, 0, 1) }
.csharpcode .html { color: rgba(128, 0, 0, 1) }
.csharpcode .attr { color: rgba(255, 0, 0, 1) }
.csharpcode .alt { background-color: rgba(244, 244, 244, 1); 100%; margin: 0 }
.csharpcode .lnum { color: rgba(96, 96, 96, 1) }

2.3 端口角色

RSTP重新定义了端口角色

 - Root Port:       根端口
- Designated Port: 指定端口
- Alternate Port:  替代端口, 到根网桥的替换路径, 用以替换的根端口, 责任是为其他网桥的链路作备份
- Backup Port:     备份端口, 是指定端口的备份端口, 是为本网桥的端口作备份
- Edge Port:       边缘端口, 指网桥上连接到终端设备的端口, 此类端口可以实现快速迁移

.csharpcode, .csharpcode pre { font-size: small; color: rgba(0, 0, 0, 1); font-family: consolas, “Courier New”, courier, monospace; background-color: rgba(255, 255, 255, 1) }
.csharpcode pre { margin: 0 }
.csharpcode .rem { color: rgba(0, 128, 0, 1) }
.csharpcode .kwrd { color: rgba(0, 0, 255, 1) }
.csharpcode .str { color: rgba(0, 96, 128, 1) }
.csharpcode .op { color: rgba(0, 0, 192, 1) }
.csharpcode .preproc { color: rgba(204, 102, 51, 1) }
.csharpcode .asp { background-color: rgba(255, 255, 0, 1) }
.csharpcode .html { color: rgba(128, 0, 0, 1) }
.csharpcode .attr { color: rgba(255, 0, 0, 1) }
.csharpcode .alt { background-color: rgba(244, 244, 244, 1); 100%; margin: 0 }
.csharpcode .lnum { color: rgba(96, 96, 96, 1) }

RSTP介绍-风君雪科技博客    RSTP介绍-风君雪科技博客

TIP:
– 备份端口只存在于两种情况下
1. 两端口通过点到点链路相连成一个环路
2. 网桥与共享LAN网段有两条或两条以上的连接(如上方右图所示)

– 边缘端口与PortFast(in STP):
相同点: 都是连接到最终的工作站,当边缘端口禁用或启用时,不会产生拓扑改变
不同点: 当RSTP的边缘端口收到BPDU时,该端口立即失去边缘端口的状态,变成一个正常的生成树端口。

2.4 端口状态

RSTP端口状态定义如下

 - Discarding
- Learning
- Forwarding

.csharpcode, .csharpcode pre { font-size: small; color: rgba(0, 0, 0, 1); font-family: consolas, “Courier New”, courier, monospace; background-color: rgba(255, 255, 255, 1) }
.csharpcode pre { margin: 0 }
.csharpcode .rem { color: rgba(0, 128, 0, 1) }
.csharpcode .kwrd { color: rgba(0, 0, 255, 1) }
.csharpcode .str { color: rgba(0, 96, 128, 1) }
.csharpcode .op { color: rgba(0, 0, 192, 1) }
.csharpcode .preproc { color: rgba(204, 102, 51, 1) }
.csharpcode .asp { background-color: rgba(255, 255, 0, 1) }
.csharpcode .html { color: rgba(128, 0, 0, 1) }
.csharpcode .attr { color: rgba(255, 0, 0, 1) }
.csharpcode .alt { background-color: rgba(244, 244, 244, 1); 100%; margin: 0 }
.csharpcode .lnum { color: rgba(96, 96, 96, 1) }

STP端口状态和RSTP端口状态比较如下所示:

STP (802.1D) Port State RSTP (802.1w) Port State Is Port Included in Active Topology? Is Port Learning MAC Addresses? Is Port Send and Receive data?
Disabled Discarding No No No
Blocking Discarding No No No
Listening Discarding Yes No No
Learning Learning Yes Yes No
Forwarding Forwarding Yes Yes Yes

3. 比较

RSTP继承自STP,两者之间的差别如下

3.1 报文结构

 RSTP介绍-风君雪科技博客

RSTP和STP在报文之间的差别如下

 - [Version] : 0x00 -> 0x02
- [Message Type] : 0x00 -> 0x02
- Use all field in [Flags]
- Add [Version 1 Length] field

.csharpcode, .csharpcode pre { font-size: small; color: rgba(0, 0, 0, 1); font-family: consolas, “Courier New”, courier, monospace; background-color: rgba(255, 255, 255, 1) }
.csharpcode pre { margin: 0 }
.csharpcode .rem { color: rgba(0, 128, 0, 1) }
.csharpcode .kwrd { color: rgba(0, 0, 255, 1) }
.csharpcode .str { color: rgba(0, 96, 128, 1) }
.csharpcode .op { color: rgba(0, 0, 192, 1) }
.csharpcode .preproc { color: rgba(204, 102, 51, 1) }
.csharpcode .asp { background-color: rgba(255, 255, 0, 1) }
.csharpcode .html { color: rgba(128, 0, 0, 1) }
.csharpcode .attr { color: rgba(255, 0, 0, 1) }
.csharpcode .alt { background-color: rgba(244, 244, 244, 1); 100%; margin: 0 }
.csharpcode .lnum { color: rgba(96, 96, 96, 1) }

下面是STP BPDU和RSTP BPDU的抓包比较图

 RSTP介绍-风君雪科技博客

3.2 处理方式

RSTP新的BPDU处理方式如下

3.2.1 间隔发送BPDU

在STP中,只有RB才会定时发送C BPDU,其他网桥将RB的C BPDU进行中继
而在RSTP中,每个hello time(2s)就发送一个自己生成的C BPDU信息

3.2.2 快速的老化信息

STP中,必须等到20s的老化时间到,才能更新BPDU;
在RSTP中,两个网桥则采用keep-alive机制;当一台网桥在连续三次没有收到BPDU的情况下,认为邻居的根和指定根已经丢失,立即老化自己的BPDU配置信息;这种老化机制可以快速的检测故障

3.2.3 对Inferior BPDU处理

STP中指定端口收到下级的BPDU会马上把端口保存的更优的BPDU发送出去,但对非指定端口不会做同样处理
RSTP中不管是否是指定端口,收到inferior BPDU都会马上发送本地更优的BPDU给对端,或接受并覆盖原先的BPDU配置信息

3. 原理

RSTP的快速收敛是通过以下P/A协商机制、根端口快速切换机制和边缘端口机制来实现的

4. 拓扑

RSTP拓扑改变(Topology Change)

在STP中,Topology Change的处理时由两部分来完成
1. 利用TCN/TCA BPDU将拓扑变化上报的根桥
2. 根桥通过将FLAG中的TC比特置位(持续时间Max Age),通知所有其它交换机

在RSTP中,只有当非边缘端口进入转发(Forwarding)状态的时,才能导致拓扑改变;端口改变到其他状态不再引起拓扑改变

检测到拓扑改变后的网桥会做以下动作:
1. 本网桥为所有非边缘指定端口及根端口启动一个计时器TC While Timer(2倍的hello time);这个时间也是通知到全网网桥拓扑变更所需的时间
2. 清空这些端口上的MAC地址
3. 在TC While Timer有效期内,这些端口向外发送TC位置1的BPDU

其他网桥接收到TC置位的RSTP BPDU,做如下处理:
1. 清空除收到TC端口以外的所有端口的MAC地址
2. 在所有的端口和根端口上启动TC While Timer,并发送TC报文。然后在这段时间内,这些端口也向外发送TC。

通过上面的机制,TC快速地泛洪到整个网络中,而无需经过根桥

下图为实例,其中SW-4发生了TC

RSTP介绍-风君雪科技博客 

5. 兼容性

RSTP的端口在连续三次接收到STP BPDU,则端口协议将切换到STP协议,切换到STP协议的RSTP端口将丧失快速收敛特性,出现STP与RSTP混用的情况;故一般建议将STP设备放在网络边缘

参考:
<rstplib分析>
<CCNP生成树经典笔记>