RSTP 的机制

什么是 RSTP 协议

2001 年,IEEE 引入了快速生成树协议(RSTP)作为IEEE 802.1w。RSTP 随后被纳入 IEEE 802.1D-2004,使原来的生成树协议(STP)标准过时。RSTP 协议被设计为向后兼容的 STP 协议。

相比 STP 协议,RSTP 协议提供了更快的收敛速度,通过引入新的收敛行为和端口角色来实现这一点。STP 协议可能需要 30 到 50 秒才能响应拓扑更改,但 RSTP 通常能够在 3 × hello 时间(默认值:3 × 2 秒)或物理链路故障后的几毫秒内响应更改。

新的端口状态

RSTP 中只剩下三个端口状态。STP 中 Disable/Blocking/Listening 状态合并为唯一的 Discarding 状态。

STP 协议 RSTP 协议 端口是否包含在活跃拓扑中 端口是否学习 MAC 地址
Disabled Discarding no no
Blocking Discarding no no
Listening Discarding yes no
Learning Learning yes yes
Forwarding Forwarding yes yes

新的端口角色

在 RSTP 中,根端口(Root Port)和指定端口(Designated port)的角色保持不变,而阻塞端口(Blocking port)的角色被拆分为替换端口(Alternate port)和备份端口 (Backup port)角色。

替换端口与备份端口

这两个端口角色对应于 STP 的 Blocking 状态。端口需要接收 BPDU 才能保持阻塞状态。为此,RSTP 引入了这两个角色。

简单地说,替换端口是根端口的备份;备份端口是指定端口的备份。

新的 BPDU 处理方式

BPDU 每 Hello 时间发送一次

BPDU 每隔一段时间就会发送一次,而不再是简单地中继。使用 STP 时,非根网桥仅在根端口上接收到 BPDU 时才生成 BPDU。网桥转发 BPDU 的次数多于实际生成的 BPDU。RSTP 并非如此。网桥每 秒(默认为 2 秒)发送一个包含其当前信息的 BPDU,即使它没有从根网桥接收任何信息。

更快的信息老化速度

在指定端口上,如果连续三次未收到 hello,则协议信息可能会立即过期(或者 max_age 过期)。由于前面提到的协议修改,BPDU 现在被用作网桥之间的保持活动机制。如果网桥连续丢失三个 BPDU,则认为它将失去与其直接邻居根或指定网桥的连接。如果网桥无法从邻居那里接收 BPDU,那么可以确定它与邻居的连接已经丢失。这与 STP 相反,在 STP 中,问题可能位于根路径上的任何位置。

接受劣质 BPDU

这个概念构成了 BackboneFast 引擎的核心。IEEE 802.1w 委员会将类似的机制纳入了 RSTP。当网桥从其指定网桥或根网桥接收到劣质信息时,它会立即接受它并替换之前存储的信息。

因为网桥 C 仍然知道根是活的,所以它会立即向网桥 B 发送一个 BPDU,其中包含有关根网桥的信息。因此,网桥 B 不会再发送自己的 BPDU,而是接受通向网桥 C 的端口作为新的根端口。

快速过渡到 Forwarding 状态

快速转换是 RSTP 引入的最重要功能。传统 STP 被动地等待网络收敛,然后再将端口转换为 Forwarding 状态。为了实现更快的收敛只能对保守的默认参数(forward delay 和 max_age 定时器)做更改,并且经常使网络的稳定性受到威胁。新的 RSTP 能够主动确认端口可以安全地过渡到 Forwarding 状态,而无需依赖任何计时器配置。为了在端口上实现快速收敛,RSTP 协议依赖于两个新变量:边缘端口(edge port)和链路类型(link type)。

边缘端口

网桥中所有直连终端的端口都无法在网络中创造环路。因此,边缘端口可以直接过渡到 Forwarding 状态,跳过 Listening 和 Learning 阶段。当链路切换时,边缘端口不会导致拓扑更改。

接收 BPDU 的边缘端口会立即失去边缘端口状态,并成为正常的 STP 端口。

链路类型

RSTP 只能在边缘端口和点对点链路上快速过渡到 Forwarding 状态。假定在全双工中运行的端口是点对点的,而默认情况下,半双工端口被视为共享端口。在当今的交换网络中,大多数链路都以全双工模式运行,并被 RSTP 视为点对点链路。这使它们成为快速过渡到转发状态的候选者。

Proposal/Agreement 机制(提议/同意机制,或简称P/A机制)

在 STP 中,网桥选择某个端口作为指定端口时,仍会等待两次 forward delay 时间(默认情况下为2 x 15),然后才能将其转换为 Forwarding 状态。

在 RSTP 中,此情况与具有指定角色但处于阻塞状态的端口相对应。下图说明了如何逐步实现快速转换。假设在根网桥和交换机 A 之间创建了一条新链路。此链路上的两个端口都置于指定的阻塞状态,直到它们从对等的端口收到 BPDU 为止。

当指定端口处于 Discarding 或 Learning 状态时(并且只有在这种情况下),它才会在其发送的 BPDU 中设置 Proposal 位。这是根网桥的端口 p0 所发生的情况,如上图的步骤 1 所示。由于交换机 A 收到高级信息,它会立即识别出 p1 是新的根端口。然后,交换机 A 开始同步(sync),以确保其所有端口均与此新信息同步。如果端口满足以下标准之一,则端口是同步的:

  • 端口处于阻塞状态,意味着稳定拓扑中的 Discarding 状态。

  • 端口是边缘端口。

为了说明同步机制对不同类型端口的影响,假设交换机 A 上存在替换端口 p2,指定转发端口 p3 和边缘端口 p4。请注意 p2 和 p4 已经满足其中一个条件。为了保持同步(参见上图的步骤2),交换机 A 只需阻塞端口 p3,并为其分配 Discarding 状态。既然其所有的端口都保持同步,交换机 A 就可以取消阻塞其新选择的根端口 p1 并发送 Proposal 信息以回复根网桥。(请参阅步骤 3。)此消息是 Proposal BPDU 的副本,其中设置了 Agreement 位而非 Proposal 位。这可确保端口 p0 确切地知道它接收的 Proposal 与哪个 Agreement 对应。

p0 收到该协议后,它可立即转换到 Forwarding 状态。这是上图的步骤4。请注意,同步之后,端口 p3 将继续保持指定的 Discarding 状态。在步骤 4 中,该端口所处的情况与步骤 1 中端口 p0 所处的情况完全相同。然后,它会开始向其相邻端口发出 Proposal,并且尝试快速转换到 Forwarding 状态。

由于 P/A 机制不依赖任何计时器,因此其速度非常快。此握手浪潮会快速传播到网络边缘,并在拓扑发生变化后快速恢复连接。

如果指定的 Discarding 端口在发送 Proposal 之后未收到 Agreement,它将缓慢转换到 Forwarding 状态,并退回到传统的 STP Listening/Learning 顺序。如果远端网桥不能理解 RSTP BPDU,或者如果远端网桥的端口处于阻塞状态,可能会发生这种情况。

新的拓扑更改机制

当 STP 网桥检测到拓扑更改时,它会使用可靠的机制首先通知根网桥。如下图所示:

一旦根网桥知道网络拓扑发生了变化,它就会在其发出的 BPDU 上设置 TC 标志,然后发送到网络中的所有网桥。当网桥收到设置了 TC 标志位的 BPDU 时,它会将其 MAC 地址表的老化时间缩短到 Forward delay 参数的秒数。这可以确保相对快速地刷新过期信息。此拓扑更改机制在 RSTP 中进行了很深层次的再造。

拓扑更改检测

在 RSTP 中,只有进入 Forwarding 状态的非边缘端口会导致拓扑更改。这意味着连接断开将不再视为拓扑更改,这与 STP 正好相反。当 RSTP 网桥检测到拓扑更改时,会发生以下操作:

  • 如有必要,它将为其所有非边缘指定端口和根端口启动 TC While 计时器,计时器的值为 hello-time 值的两倍。只要 TC While 计时器在端口上运行,从该端口发送的 BPDU 就会设置 TC 位。当计时器处于启动状态时,会向根端口上发送 BPDU。

  • 它将刷新与所有这些端口关联的 MAC 地址。

拓扑更改传播

当网桥从相邻网桥收到设置了 TC 位的 BPDU 时,会发生以下操作:

  • 它将清除其所有端口(接收 TC 的端口除外)上识别的 MAC 地址。

  • 它启动 TC While 计时器,并发送在所有指定端口和根端口上设置 TC 位的 BPDU(RSTP 不再使用特定的 TCN BPDU,除非传统网桥需要通知)。

这样,TCN 会快速传播到整个网络。TC 传播现在是一个单步过程。事实上,TC 的发起方会将此信息泛洪到整个网络,而 STP 则只有根网桥会泛洪此信息。此机制比 STP 的机制更快,无需等待通知根网桥,然后针对整个网络保持拓扑更改状态长达 <max age + forward delay> 秒钟。

仅在几秒钟或者几倍 hello-time 后,整个网络的 MAC 地址表中的大部分条目都将刷新。

兼容性

RSTP 可以与传统 STP 协议交互操作。但是务必注意,与传统网桥交互时,RSTP 固有的快速收敛优点将会丧失。

总结

无论在 STP 还是 RSTP 中,都不按照 VLAN 来定义端口,默认是全局定义。但是,在存在多个 VLAN 的以太网交换环境中,通常需要创建多个生成树,以便不同 VLAN 上的流量使用不同的链路。

于是,多生成树协议 (MSTP) 在 IEEE 802.1s-2002 中定义,后来合并到 IEEE 802.1Q-2005 中,它定义了对 RSTP 的扩展,以进一步开发 VLAN 的实用性。在 MSTP 下,可以为单个 VLAN 或 VLAN 组定义生成树,且 MSTP 与 RSTP 网桥完全兼容。

参考

[1] [Rapid Spanning Tree Protocol]: https://en.wikipedia.org/wiki/Spanning_Tree_Protocol#Rapid_Spanning_Tree_Protocol
[2] [Understand Rapid Spanning Tree Protocol (802.1w)]: https://www.cisco.com/c/en/us/support/docs/lan-switching/spanning-tree-protocol/24062-146.html

posted @ 2024-04-01 17:49  Désiré  阅读(247)  评论(0编辑  收藏  举报