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) }
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和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的抓包比较图
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
5. 兼容性
RSTP的端口在连续三次接收到STP BPDU,则端口协议将切换到STP协议,切换到STP协议的RSTP端口将丧失快速收敛特性,出现STP与RSTP混用的情况;故一般建议将STP设备放在网络边缘
参考:
<rstplib分析>
<CCNP生成树经典笔记>
最新评论