一、RSTP 对 STP 的改进
IEEE 于 2001 年发布的 802.1W 标准定义了快速生成树协议 RSTP(Rapid Spanning Tree Protocol),该协议基于 STP 协议,对原有的 STP 协议进行了更加细致的修改和补充。
STP 的不足之处
STP 协议虽然能够解决环路问题,但是由于网络拓扑收敛慢,影响了用户通信质量。如果网络中的拓扑结构频繁变化,网络也会随之频繁失去连通性,从而导致用户通信频繁中断,这是用户无法忍受的。
STP 的不足之处如下:
1、首先, STP 没有细致区分端口状态和端口角色,不利于初学者学习及部署。
网络协议的优劣往往取决于协议是否对各种情况加以细致区分。
A、从用户角度来讲, Listening、 Learning 和 Blocking 状态并没有区别,都同样不转发用户流量。
B、从使用和配置角度来讲,端口之间最本质的区别并不在于端口状态,而是在于端口扮演的角色。
根端口和指定端口可以都处于 Listening 状态,也可能都处于 Forwarding 状态。
2、其次, STP 算法是被动的算法,依赖定时器等待的方式判断拓扑变化,收敛速度慢。
3、最后, STP 的算法要求在稳定的拓扑中,根桥主动发出配置 BPDU 报文,而其他设备进行处理,传遍整个 STP 网络。
这也是导致拓扑收敛慢的主要原因之一。
RSTP 对 STP 的改进
根据 STP 的不足, RSTP 删除了 3 种端口状态,新增加了 2 种端口角色,并且把端口属性充分的按照状态和角色解耦;此外, RSTP 还增加了相应的一些增强特性和保护措施,实现网络的稳定和快速收敛。
1、通过端口角色的增补,简化了生成树协议的理解及部署。
RSTP 的端口角色共有 4 种:根端口、指定端口、 Alternate 端口和 Backup 端口。
根端口和指定端口的作用同 STP 协议中定义, Alternate 端口和 Backup 端口的描述如下:
从配置 BPDU 报文发送角度来看:
Alternate 端口就是由于学习到其它网桥发送的配置 BPDU 报文而阻塞的端口。
Backup 端口就是由于学习到自己发送的配置 BPDU 报文而阻塞的端口。
从用户流量角度来看:
Alternate 端口提供了从指定桥到根的另一条可切换路径,作为根端口的备份端口。
Backup 端口作为指定端口的备份,提供了另一条从根桥到相应网段的备份通路。
给一个 RSTP 域内所有端口分配角色的过程就是整个拓扑收敛的过程。
2、端口状态的重新划分
RSTP 的状态规范把原来的 5 种状态缩减为 3 种。根据端口是否转发用户流量和学习 MAC 地址来划分:
如果不转发用户流量也不学习 MAC 地址,那么端口状态就是 Discarding 状态。
如果不转发用户流量但是学习 MAC 地址,那么端口状态就是 Learning 状态。
如果既转发用户流量又学习 MAC 地址,那么端口状态就是 Forwarding 状态。
3、配置 BPDU 格式的改变,充分利用了 STP 协议报文中的 Flag 字段,明确了端口角色。
在配置 BPDU 报文的格式上,除了保证和 STP 格式基本一致之外, RSTP 作了一些小变化:
Type 字段,配置 BPDU 类型不再是 0 而是 2,所以运行 STP 的设备收到 RSTP 的配置BPDU 时会丢弃。
Flags 字段,使用了原来保留的中间 6 位,这样改变的配置 BPDU 叫做 RST BPDU,如图所示。
4、配置 BPDU 的处理发生变化
A、拓扑稳定后,配置 BPDU 报文的发送方式
拓扑稳定后,根桥按照 Hello Timer 规定的时间间隔发送配置 BPDU。
其他非根桥设备在收到上游设备发送过来的配置 BPDU 后,才会触发发出配置 BPDU,此方式使得 STP协议计算复杂且缓慢。
RSTP 对此进行了改进,即在拓扑稳定后,无论非根桥设备是否接收到根桥传来的配置 BPDU 报文,非根桥设备仍然按照 Hello Timer 规定的时间间隔发送配置 BPDU,该行为完全由每台设备自主进行。
B、更短的 BPDU 超时计时
如果一个端口连续 3 个 Hello Time 时间内没有收到上游设备发送过来的配置 BPDU,那
么该设备认为与此邻居之间的协商失败。而不像 STP 那样需要先等待一个 Max Age。
C、处理次等 BPDU
当一个端口收到上游的指定桥发来的 RST BPDU 报文时,该端口会将自身存储的 RST BPDU 与收到的 RST BPDU 进行比较。
如果该端口存储的 RST BPDU 的优先级高于收到的 RST BPDU,那么该端口会直接丢弃收到的 RST BPDU,立即回应自身存储的 RST BPDU。
当上游设备收到下游设备回应的 RST BPDU 后,上游设备会根据收到的 RST BPDU 报文中相应的字段立即更新自己存储的 RST BPDU。
由此, RSTP 处理次等 BPDU 报文不再依赖于任何定时器通过超时解决拓扑收敛,从而加快了拓扑收敛。
5、快速收敛
Proposal/Agreement 机制
当一个端口被选举成为指定端口之后,在 STP 中,该端口至少要等待一个 Forward Delay(Learning)时间才会迁移到 Forwarding 状态。而在 RSTP 中,此端口会先进入 Discarding状态,再通过 Proposal/Agreement 机制快速进入 Forward 状态。这种机制必须在点到点全双工链路上使用。
根端口快速切换机制
如果网络中一个根端口失效,那么网络中最优的 Alternate 端口将成为根端口,进入Forwarding 状态。因为通过这个 Alternate 端口连接的网段上必然有个指定端口可以通往根桥。这种产生新的根端口的过程会引发拓扑变化,详细描述请见 RSTP 技术细节中的 RSTP拓扑变化处理。
边缘端口的引入
在 RSTP 里面,如果某一个指定端口位于整个网络的边缘,即不再与其他交换设备连接,而是直接与终端设备直连,这种端口叫做边缘端口。
边缘端口不接收处理配置BPDU,不参与 RSTP运算,可以由 Disable直接转到 Forwarding状态,且不经历时延,就像在端口上将 STP 禁用。但是一旦边缘端口收到配置 BPDU,就丧失了边缘端口属性,成为普通 STP 端口,并重新进行生成树计算,从而引起网络震荡。
6、保护功能
保护功能 |
场景 |
原理 |
BPDU 保护
|
在交换设备上,通常将直接与用户终端(如 PC 机)或文件服务器等非交换设备相连的端口配置为边缘端口。 |
交换设备上启动了 BPDU 保护功能后,如果边缘 端 口 收 到 RST BPDU , 边 缘 端 口 将 被error-down,但是边缘端口属性不变,同时通知网管系统。
|
根保护
|
由于维护人员的错误配置或网络中的恶意攻击,网络中合法根桥有可能会收到优先级更高的 RSTBPDU,使得合法根桥失去根地位,从而引起网络拓扑结构的错误变动。这种不合法的拓扑变化,会导致原来应该通过高速链路的流量被牵引到低速链路上,造成网络拥塞。
|
对于启用 Root 保护功能的指定端口,其端口角色只能保持为指定端口。一旦启用 Root 保护功能的指定端口收到优先级更高的 RST BPDU 时,端口状态将进入 Discarding 状态,不再转发报文。在经过一段时间(通常为两倍的 Forward Delay),如果端口一直没有再收到优先级较高的RST BPDU , 端 口 会 自 动 恢 复 到 正 常 的Forwarding 状态。
|
环路保护
|
在运行 RSTP 协议的网络中,根端口和其他阻塞端口状态是依靠不断接收来自上游交换设备的 RSTBPDU 维持。
|
在启动了环路保护 功能后,如果根端口或Alternate 端口长时间收不到来自上游的 RST BPDU 时,则向网管发出通知信息(如果是根端口则进入 Discarding 状态)。而阻塞端口则会一直保持在阻塞状态,不转发报文,从而不会在网络中形成环路。直到根端口或 Alternate 端口收到 RST BPDU , 端 口 状 态 才 恢 复 正 常 到Forwarding 状态。
|
防
|
交换设备在接收到 TC BPDU 报文后,会执行 MAC 地址表项和 ARP表项的删除操作。如果有人伪造TC BPDU 报文恶意攻击交换设备时,交换设备短时间内会收到很多 TC BPDU 报文,频繁的删除操作会给设备造成很大的负担,给网络的稳定带来很大隐患
|
启用防 TC-BPDU 报文攻击功能后,在单位时间内,交换设备处理 TC BPDU 报文的次数可配置。如果在单位时间内,交换设备在收到 TC BPDU报文数量大于配置的阈值,那么设备只会处理阈值指定的次数。对于其他超出阈值的 TCN BPDU报文,定时器到期后设备只对其统一处理一次。这样可以避免频繁的删除 MAC 地址表项和ARP 表项,从而达到保护设备的目的。
|
二、RSTP 技术细节
Proposal/Agreement 机制,其目的是使一个指定端口尽快进入 Forwarding 状态。如图所示,根桥S1 和 S2 之间新添加了一条链路。在当前状态下, S2 的另外几个端口 p2 是 Alternate 端口, p3 是指定端口且处于 Forwarding 状态, p4 是边缘端口。
新链路连接成功后, P/A 机制协商过程如下:
1. p0 和 p1 两个端口马上都先成为指定端口,发送 RST BPDU。
2. S2 的 p1 口收到更优的 RST BPDU,马上意识到自己将成为根端口,而不是指定端口,停止发送 RST BPDU。
3. S1 的 p0 进入 Discarding 状态,于是发送的 RST BPDU 中把 proposal 置 1。
4. S2 收到根桥发送来的携带 proposal 的 RST BPDU,开始将自己的所有端口进入 sync 变量置位。
5. p2 已经阻塞,状态不变;p4 是边缘端口,不参与运算;所以只需要阻塞非边缘指定端口 p3。
6. p2、 p3、 p4 都进入 Discarding 状态之后,各端口的 synced 变量置位,根端口 p1 的 synced也置位,于是便向 S1 返回 Agreement 位置位的回应 RST BPDU。该 RST BPDU 携带和刚才根桥发过来的 BPDU 一样的信息,除了 Agreement 位置位之外(Proposal 位清零)。
7. 当 S1 判断出这是对刚刚发出的 Proposal 的回应,于是端口 p0 马上进入 Forwarding 状态。
以上 P/A 过程可以向下游继续传递。
事实上对于 STP,指定端口的选择可以很快完成,主要的速度瓶颈在于:为了避免环路,必须等待足够长的时间,使全网的端口状态全部确定,也就是说必须要等待至少一个 Forward Delay 所有端口才能进行转发。而 RSTP 的主要目的就是消除这个瓶颈,通过阻塞自己的非根端口来保证不会出现环路。而使用 P/A 机制加快了上游端口转到 Forwarding 状态的速度。
说明:P/A 机制要求两台交换设备之间链路必须是点对点的全双工模式。一旦 P/A 协商不成功,指定端口的选择就需要等待两个 Forward Delay,协商过程与 STP 一样。
RSTP 拓扑变化处理:
在 RSTP 中检测拓扑是否发生变化只有一个标准:一个非边缘端口迁移到 Forwarding 状态。一旦检测到拓扑发生变化,将进行如下处理:
为本交换设备的所有非边缘指定端口启动一个 TC While Timer,该计时器值是 Hello Time 的两倍。
在这个时间内,清空状态发生变化的端口上学习到的 MAC 地址。
同时,由这些端口向外发送 RST BPDU,其中 TC 置位。一旦 TC While Timer 超时,则停止发送 RST BPDU。
其他交换设备接收到 RST BPDU 后,清空所有端口学习到 MAC 地址,除了收到 RST BPDU的端口。然后也为自己所有的非边缘指定端口和根端口启动 TC While Timer,重复上述过程。
如此,网络中就会产生 RST BPDU 的泛洪。
RSTP 与 STP 的互操作
RSTP 可以和 STP 互操作,但是此时会丧失快速收敛等 RSTP 优势。
当一个网段里既有运行 STP 的交换设备又有运行 RSTP 的交换设备, STP 交换设备会忽略 RSTBPDU。运行 RSTP 的交换设备在某端口上接收到运行 STP 的交换设备发出的配置 BPDU,在两个Hello Time 时间之后,便把自己的端口转换到 STP 工作模式,发送配置 BPDU,从而实现了互操作。
在华为的数据通信设备上可以配置运行 STP 的交换设备被撤离网络后,运行 RSTP的交换设备可迁移回到 RSTP 工作模式。