一篇文章详解STP/RSTP/MSTP 二层防环技术

一、STP 出现的背景
STP 是一个用于局域网中消除环路的协议。运行该协议的设备通过彼此交互信息而发现网络中的环路,并适当对某些端口进行阻塞以消除环路。由于局域网规模的不断增长,生成树协议已经成为了当前最重要的局域网协议之一。

环路的网络中,会产生如下两种情况:
1、广播风暴导致网络不可用。

2、MAC 地址表震荡导致 MAC 地址表项被破坏。

二、STP 基本概念

一个根桥
树形的网络结构必须有树根,于是 STP 引入了根桥(Root Bridge)概念。
对于一个 STP 网络,根桥在全网中只有一个,它是整个网络的逻辑中心,但不一定是物理中心。根桥会根据网络拓扑的变化而动态变化。
网络收敛后,根桥会按照一定的时间间隔产生并向外发送配置 BPDU,其他设备仅对该报文进行处理,传达拓扑变化记录,从而保证拓扑的稳定。


两种度量
生成树的生成计算有两大基本度量依据:ID 和路径开销。
ID
ID 又分为:BID(Bridge ID)和 PID(Port ID)。
BID:桥 ID
IEEE 802.1D 标准中规定 BID 是由 16 位的桥优先级(Bridge Priority)与桥 MAC 地址构成。BID 桥优先级占据高 16 位,其余的低 48 位是 MAC 地址。
在 STP 网络中,桥 ID 最小的设备会被选举为根桥。
PID:端口 ID
PID 由两部分构成的,高 4 位是端口优先级,低 12 位是端口号。
PID 只在某些情况下对选择指定端口有作用。

路径开销
路径开销(Path Cost)是一个端口变量,是 STP 协议用于选择链路的参考值。STP 协议通过计算路径开销,选择较为“强壮”的链路,阻塞多余的链路,将网络修剪成无环路的树形网络结构。在一个 STP 网络中,某端口到根桥累计的路径开销就是所经过的各个桥上的各端口的路径开销累加而成,这个值叫做根路径开销(Root Path Cost)。

三要素选举
从环形网络拓扑结构到树形结构,总体来说有三个要素:根桥、根端口和指定端口
根桥 RB(Root Bridge)
根桥就是网桥 ID 最小的桥,通过交互配置 BPDU 协议报文选出最小的 BID。
根端口 RP(Root Port)
所谓根端口就是去往根桥路径开销最小的端口,根端口负责向根桥方向转发数据,这个端口的选择标准是依据根路径开销判定。在一台设备上所有使能 STP 的端口中,根路径开销最小者,就是根端口。很显然,在一个运行 STP 协议的设备上根端口有且只有一个,根桥上没有根端口。
指定端口 DP(Designated Port)

一旦根桥、根端口、指定端口选举成功,则整个树形拓扑建立完毕。在拓扑稳定后,只有根端口和指定端口转发流量,其他的非根非指定端口都处于阻塞(Blocking)状态,它们只接收 STP 协议报文而不转发用户流量。

四个比较原则
STP 选举有四个比较原则,构成消息优先级向量:{ 根桥 ID,累计根路径开销,发送设备 BID,发送端口 PID }。


在 STP 计算过程中,都遵循数值越小越好的原则。
最小 BID:用来选举根桥。运行 STP 协议的设备之间根据表 2 所示根桥 ID 字段选择最小的BID。
最小累计根路径开销:用来在非根桥上选择根端口。在根桥上,每个端口到根桥的根路径开销都是 0。

最小发送者 BID:当一台运行 STP 协议的设备要在两个以上根路径开销相等的端口之中选择根端口时,通过 STP 协议计算,将选择接收到的配置消息中发送者 BID 较小的那个端口。

最小 PID:用于在根路径开销相同的情况下,不阻塞最小 PID 的端口,而是阻塞 PID 值较大的端口。

五种端口状态

对于 STP,影响端口状态和端口收敛有以下 3 个参数。
Hello Time
运行 STP 协议的设备发送配置消息 BPDU 的时间间隔,用于设备检测链路是否存在故障。设备每隔 Hello Time 时间会向周围的设备发送 hello 报文,以确认链路是否存在故障。当网络拓扑稳定之后,该计时器的修改只有在根桥修改后才有效。新的根桥会在发出的 BPDU报文中填充适当的字段以向其他非根桥传递该计时器修改的信息。但当拓扑变化之后, TCN PDU 的发送不受这个计时器的管理。
Forward Delay
设备状态迁移的延迟时间。链路故障会引发网络重新进行生成树的计算,生成树的结构将发生相应的变化。不过重新计算得到的新配置消息无法立刻传遍整个网络,如果新选出的根端口和指定端口立刻就开始数据转发的话,可能会造成临时环路。为此, STP 采用了一种状态迁移机制,新选出的根端口和指定端口要经过 2倍的Forward Delay延时后才能进入转发状态,这个延时保证了新的配置消息传遍整个网络,从而防止了临时环路的产生。
说明:Forward Delay Timer 指一个端口处于 Listening 和 Learning 状态的各自持续时间,默认是 15秒。即 Listening 状态持续 15 秒,随后 Learning 状态再持续 15 秒。这两个状态下的端口会处于 Blocking 状态,这正是 STP 用于避免临时环路的关键。
Max Age
端口的 BPDU 报文老化时间,可在根桥上通过命令人为改动老化时间。
Max Age 通过配置 BPDU 报文的传输,可保证 Max Age 在整网中一致。运行 STP 协议的网络中非根桥设备收到配置 BPDU 报文后,报文中的 Message Age 和 Max Age 会进行比较:
如果 Message Age 小于等于 Max Age,则该非根桥设备继续转发配置 BPDU 报文。
如果 Message Age 大于 Max Age,则该配置 BPDU 报文将被老化。该非根桥设备直接丢弃该配置 BPDU,可认为网络直径过大,导致根桥连接失败。
说明:如果配置 BPDU 是根桥发出的,则 Message Age 为 0。否则, Message Age 是从根桥发送到当前桥接收到 BPDU 的总时间,包括传输延时等。实际实现中,配置 BPDU 报文经过一个桥,Message Age 增加 1。

三、STP 报文格式

桥 ID、路径开销和端口 ID 等信息,所有这些信息都是通过 BPDU 协议报文传输。
配置 BPDU 是一种心跳报文,只要端口使能 STP,则配置 BPDU 就会按照 Hello Time 定时器规定的时间间隔从指定端口发出。
TCN BPDU 是在设备检测到网络拓扑发生变化时才发出。
BPDU 报文被封装在以太网数据帧中,目的 MAC 是组播 MAC:01-80-C2-00-00-00, Length/Type字段为 MAC 数据长度,后面是 LLC 头, LLC 之后是 BPDU 报文头。以太网数据帧格式如下图。

配置 BPDU
通常所说的 BPDU 报文多数指配置 BPDU。
在初始化过程中,每个桥都主动发送配置 BPDU。但在网络拓扑稳定以后,只有根桥主动发送配置BPDU,其他桥在收到上游传来的配置 BPDU 后,才触发发送自己的配置 BPDU。配置 BPDU 的长度至少要 35 个字节,包含了桥 ID、路径开销和端口 ID 等参数。只有当发送者的 BID 或端口的 PID两个字段中至少有一个和本桥接收端口不同, BPDU 报文才会被处理,否则丢弃。这样避免了处理和本端口信息一致的 BPDU 报文。
配置 BPDU 在以下 3 种情况下会产生:
只要端口使能 STP,则配置 BPDU 就会按照 Hello Time 定时器规定的时间间隔从指定端口发出。
当根端口收到配置 BPDU 时,根端口所在的设备会向自己的每一个指定端口复制一份配置BPDU。
当指定端口收到比自己差的配置 BPDU 时,会立刻向下游设备发送自己的 BPDU。

BPDU 报文基本格式

标志字段STP 中只使用了其最高位和最低位。
Flags 字段格式

TCN BPDU
TCN BPDU 内容比较简单,只有表 1 中列出的前 3 个字段:协议号、版本和类型。类型字段是固定值 0x80,长度只有 4 个字节。
TCN BPDU 是指在下游拓扑发生变化时向上游发送拓扑变化通知,直到根节点。

TCN BPDU 在如下两种情况下会产生:
端口状态变为 Forwarding 状态,且该设备上至少有一个指定端口。
指定端口收到 TCN BPDU,复制 TCN BPDU 并发往根桥。

四、STP 拓扑计算

网络中所有的设备使能 STP 协议后,每一台设备都认为自己是根桥。此时,每台设备仅仅收发配置 BPDU,而不转发用户流量,所有的端口都处于 Listening 状态。所有设备通过交换配置 BPDU后,进行选举工作,选出根桥、根端口和指定端口。

BPDU  报文的交互过程

如图 1 所示,用{}标注的四元组表示了由根桥 ID(图中以 S1_MAC 和 S2_MAC 代表两台设备的BID)、累计根路径开销、发送者 BID、发送端口 PID 构成的有序组。配置 BPDU 会按照 Hello Timer规定的时间间隔来发送。

STP 算法实现的基本过程
1. 初始状态
由于每个桥都认为自己是根桥,所以在每个端口所发出的 BPDU 中,根桥字段都是用各自的 BID, Root Path Cost 字段是累计的到根桥的开销,发送者 BID 是自己的 BID,端口 PID是发送该 BPDU 端口的端口 ID。
2. 选择根桥
网络初始化时,网络中所有的 STP 设备都认为自己是“根桥”,根桥 ID 为自身的设备 ID。通过交换配置消息,设备之间比较根桥 ID,网络中根桥 ID 最小的设备被选为根桥。
3. 选择根端口和指定端口
根端口和指定端口的选择过程如表 1 所示

一旦根桥、根端口和指定端口选举成功,整个树形拓扑就建立完毕了。

STP 拓扑变化

STP 拓扑变化处理过程如图 3 所示。

1. 在网络拓扑发生变化后,下游设备会不间断地向上游设备发送 TCN BPDU 报文。
2. 上游设备收到下游设备发来的 TCN BPDU 报文后,只有指定端口处理 TCN BPDU 报文。其它端口也有可能收到 TCN BPDU 报文,但不会处理。
3. 上游设备会把配置 BPDU 报文中的 Flags 的 TCA 位设置 1,然后发送给下游设备,告知下游设备停止发送 TCN BPDU 报文。
4. 上游设备复制一份 TCN BPDU 报文,向根桥方向发送。
5. 重复步骤 1、 2、 3、 4,直到根桥收到 TCN BPDU 报文。
6. 根桥把配置 BPDU 报文中的 Flags 的 TC 位置 1 后发送,通知下游设备直接删除桥 MAC 地址表项。
说明:
TCN BPDU 报文主要用来向上游设备乃至根桥通知拓扑变化。
置位的 TCA 标记的配置 BPDU 报文主要是上游设备用来告知下游设备已经知道拓扑变化,通知下游设备停止发送 TCN BPDU 报文。
置位的 TC 标记的配置 BPDU 报文主要是上游设备用来告知下游设备拓扑发生变化,请下游设备直接删除桥 MAC 地址表项,从而达到快速收敛的目的。

一、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 机)或文件服务器等非交换设备相连的端口配置为边缘端口。
正常情况下,边缘端口不会收到RST BPDU。如果有人伪造 RST BPDU 恶意攻击交换设备,当边缘端口接收到 RST BPDU 时,交换设备会自动将边缘端口设置为非边缘端口,并重新进行生成树计算,从而引起网络震荡。

交换设备上启动了 BPDU 保护功能后,如果边缘 端 口 收 到 RST BPDU , 边 缘 端 口 将 被error-down,但是边缘端口属性不变,同时通知网管系统。

根保护

由于维护人员的错误配置或网络中的恶意攻击,网络中合法根桥有可能会收到优先级更高的 RSTBPDU,使得合法根桥失去根地位,从而引起网络拓扑结构的错误变动。这种不合法的拓扑变化,会导致原来应该通过高速链路的流量被牵引到低速链路上,造成网络拥塞。

对于启用 Root 保护功能的指定端口,其端口角色只能保持为指定端口。一旦启用 Root 保护功能的指定端口收到优先级更高的 RST BPDU 时,端口状态将进入 Discarding 状态,不再转发报文。在经过一段时间(通常为两倍的 Forward Delay),如果端口一直没有再收到优先级较高的RST BPDU , 端 口 会 自 动 恢 复 到 正 常 的Forwarding 状态。
说明:Root 保护功能只能在指定端口上配置生效。

环路保护

在运行 RSTP 协议的网络中,根端口和其他阻塞端口状态是依靠不断接收来自上游交换设备的 RSTBPDU 维持。
当由于链路拥塞或者单向链路故障导致这些端口收不到来自上游交换设备的 RST BPDU 时,此时交换设备会重新选择根端口。原先的根端口会转变为指定端口,而原先
的阻塞端口会迁移到转发状态,从而造成交换网络中可能产生环路。

在启动了环路保护 功能后,如果根端口或Alternate 端口长时间收不到来自上游的 RST BPDU 时,则向网管发出通知信息(如果是根端口则进入 Discarding 状态)。而阻塞端口则会一直保持在阻塞状态,不转发报文,从而不会在网络中形成环路。直到根端口或 Alternate 端口收到 RST BPDU , 端 口 状 态 才 恢 复 正 常 到Forwarding 状态。
说明:环路保护功能只能在根端口或 Alternate 端口上配置生效。


TC-BPDU
攻击

交换设备在接收到 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 工作模式。

一、MSTP 出现的背景:

RSTP 在STP 基础上进行了改进,实现了网络拓扑快速收敛。但 RSTP和 STP 还存在同一个缺陷:由于局域网内所有的VLAN 共享一棵生成树,因此无法在 VLAN间实现数据流量的负载均衡,链路被阻塞后将不承载任何流量,造成带宽浪费,还有可能造成部分 VLAN的报文无法转发。

为了弥补 STP 和RSTP 的缺陷, IEEE于 2002 年发布的802.1S 标准定义了 MSTP。MSTP兼容 STP和RSTP,既可以快速收敛,又提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN 数据的负载均衡。

通过MSTP 把一个交换网络划分成多个域,每个域内形成多棵生成树,生成树之间彼此独立。每棵生成树叫做一个多生成树实例MSTI(MultipleSpanning Tree Instance),每个域叫做一个 MST域(MSTRegion:MultipleSpanning Tree Region)。

说明:所谓实例就是多个VLAN 的一个集合。通过将多个 VLAN捆绑到一个实例,可以节省通信开销和资源占用率。MSTP各个实例拓扑的计算相互独立,在这些实例上可以实现负载均衡。可以把多个相同拓扑结构的 VLAN映射到一个实例里,这些 VLAN 在端口上的转发状态取决于端口在对应MSTP实例的状态。

MSTP 通过设置VLAN 映射表(即 VLAN和 MSTI 的对应关系表),把VLAN 和MSTI联系起来。每个 VLAN 只能对应一个MSTI,即同一 VLAN的数据只能在一个 MSTI 中传输,而一个MSTI 可能对应多个 VLAN。

二、MSTP 基本概念

1、MSTP 的网络层次

如图所示,MSTP 网络中包含 1 个或多个MST 域(MSTRegion),每个 MST Region 中包含一个或多个MSTI。组成 MSTI的是运行 STP/RSTP/MSTP 的交换设备,MSTI 是所有运行STP/RSTP/MSTP的交换设备经 MSTP 协议计算后形成的树状网络

2、MST 域(MST Region

MST 域是多生成树域(MultipleSpanning Tree Region),由交换网络中的多台交换设备以及它们之间的网段所构成。同一个MST 域的设备具有下列特点:·都启动了 MSTP。·具有相同的域名。·具有相同的 VLAN 到生成树实例映射配置。·具有相同的 MSTP 修订级别配置。一个局域网可以存在多个MST 域,各 MST域之间在物理上直接或间接相连。用户可以通过 MSTP配置命令把多台交换设备划分在同一个MST 域内。

如图所示的 MST Region D0中由交换设备 S1、S2、 S3和 S4 构成,域中有3 个 MSTI。

3、VLAN 映射表

VLAN 映射表是MST 域的属性,它描述了 VLAN和 MSTI 之间的映射关系。如上图所示,MST 域 D0的 VLAN 映射表是:·VLAN1 映射到 MSTI1·VLAN2 和 VLAN3映射到MSTI2·其余 VLAN 映射到MSTI0

4、域根

域根(Regional Root)分为IST(InternalSpanning Tree)域根和 MSTI 域根。IST 生成树中距离总根(CISTRoot)最近的交换设备是 IST 域根

一个MST 域内可以生成多棵生成树,每棵生成树都称为一个 MSTI。

MSTI 域根是每个多生成树实例的树根。

如图所示,域中不同的MSTI 有各自的域根。

MSTI 之间彼此独立,MSTI 可以与一个或者多个 VLAN对应。但一个 VLAN 只能与一个MSTI 对应。

5、主桥

主桥(Master Bridge)也就是IST Master,它是域内距离总根最近的交换设备。如果总根在MST 域中,则总根为该域的主桥。

6、总根

总根是 CIST(Commonand Internal Spanning Tree)的根桥,如下图总根是区域 A0中的某台设备。

7、CST

公共生成树 CST(CommonSpanning Tree)是连接交换网络内所有 MST域的一棵生成树。

如果把每个MST 域看作是一个节点, CST就是这些节点通过 STP 或RSTP 协议计算生成的一棵生成树。

如上图所示,较粗的线条连接各个域构成CST。

8、IST

内部生成树 IST(InternalSpanning Tree)是各 MST 域内的一棵生成树。
IST 是一个特殊的MSTI, MSTI的 ID 为0,通常称为 MSTI0。
IST 是CIST 在 MST域中的一个片段。如上图所示,较细的线条在域中连接该域的所有交换设备构成IST。

9、SST

构成单生成树 SST(SingleSpanning Tree)有两种情况:运行STP 或 RSTP的交换设备只能属于一个生成树。

MST 域中只有一个交换设备,这个交换设备构成单生成树。如上图所示,B0 中的交换设备就是一棵单生成树。

10、端口角色

MSTP 在RSTP 的基础上新增了 2种端口, MSTP 的端口角色共有7 种:根端口、指定端口、 Alternate端口、Backup 端口、边缘端口、 Master端口和域边缘端口。

根端口、指定端口、Alternate 端口、 Backup端口和边缘端口的作用同 RSTP 协议中定义,MSTP中定义的所有端口角色如表所示。

根端口

在非根桥上,离根桥最近的端口是本交换设备的根端口。根交换设备没有根端口。根端口负责向树根方向转发数据。

指定端口

对一台交换设备而言,它的指定端口是向下游交换设备转发  BPDU 报文的端口

Alternate  端
 口

·从配置 BPDU 报文发送角度来看,  Alternate 端口就是由于学习到其它网桥发送的配置  BPDU 报文而阻塞的端口。
 ·从用户流量角度来看, Alternate  端口提供了从指定桥到根的另一条可切换路径,作为根端口的备份端口。

Backup  端
 口

·从配置 BPDU 报文发送角度来看,  Backup 端口就是由于学习到自己发送的配置BPDU  报文而阻塞的端口。
 ·从用户流量角度来看, Backup  端口作为指定端口的备份,提供了另外一条从根节点到叶节点的备份通路。

Master端口

Master  端口是 MST 域和总根相连的所有路径中最短路径上的端口,它是交换设备上连接  MST 域到总根的端口。
 Master 端口是域中的报文去往总根的必经之路。
 Master 端口是特殊域边缘端口, Master  端口在 CIST 上的角色是  Root Port,在其它各实例上的角色都是  Master 端口。

域  边 缘 端
 口

域边缘端口是指位于  MST 域的边缘并连接其它 MST  域或 SST 的端口。进行  MSTP 计算时,域边缘端口在 MSTI  上的角色和 CIST 实例的角色保持一致。即如果边缘端口在  CIST 实例上的角色是 Master  端口(域和总根相连的所有路径中最短路径上的端口),则它在域内所有 MSTI  上的角色也是Master 端口。

边缘端口

如果指定端口位于整个域的边缘,不再与任何交换设备连接,这种端口叫做边缘端口。
 边缘端口一般与用户终端设备直接连接。

说明:除边缘端口外,其他端口角色都参与MSTP 的计算过程。同一端口在不同的生成树实例中可以担任不同的角色。

MSTP 的端口状态

端口状态和端口角色对应表

说明:Yes:表示端口支持的状态。No:表示端口不支持的状态。

三、MSTP 报文

MSTP 使用多生成树桥协议数据单元MST BPDU(MultipleSpanning Tree Bridge Protocol Data Unit)作为生成树计算的依据。MSTBPDU 报文用来计算生成树的拓扑、维护网络拓扑以及传达拓扑变化记录。STP 中定义的配置 BPDU、RSTP 中定义的RSTBPDU、 MSTP 中定义的MST BPDU 及 TCNBPDU差异对比如表所示。

MSTP 报文格式

无论是域内的 MST BPDU 还是域间的,前36 个字节和 RSTBPDU 相同。从第37 个字节开始是 MSTP专有字段。最后的 MSTI 配置信息字段由若干MSTI 配置信息组连缀而成。

MSTP 报文格式可配置:

目前 MSTP 的BPDU 报文存在两种格式:

·dot1s:IEEE802.1s规定的报文格式。

·legacy:私有协议报文格式。

如果端口收发报文格式为默认支持dot1s 或者 legacy,这样就存在一个缺点:需要人工识别对端的BPDU报文格式,然后手工配置命令来决定支持哪种格式。人工识别报文格式比较困难,且一旦配置错误,就有可能导致 MSTP计算错误,出现环路。

华为采用的端口收发MSTP 报文格式可配置(stpcompliance)功能,能够实现对 BPDU报文格式的自适应,这样报文收发不但支持dot1s 和 legacy格式,还能通过 auto 方式根据收到的BPDU 报文格式自动切换端口支持的 BPDU报文格式,使报文格式与对端匹配。在自适应的情况下,端口初始支持 dot1s格式,收到报文后,格式则和收到的报文格式保持一致。

每个 Hello Time 时间内端口最多能发送BPDU 的报文数可配置。

Hello Time 用于生成树协议定时发送配置消息维护生成树的稳定。

如果交换设备在一段时间内没有收到BPDU 报文,则会由于消息超时而对生成树进行重新计算。

当交换设备成为根交换设备时,该交换设备会按照该设置值为时间间隔发送BPDU 报文。非根交换设备采用根交换设备所设置的 HelloTime 时间值。

华为数据通信设备提供的每个Hello Time 时间内端口最多能够发送的BPDU 报文个数可配置(MaxTransmitted BPDU Number in Hello Time is Configurable)功能,可以设定当前端口在Hello Time 时间内配置BPDU 的最大发送数目。

用户配置的数值越大,表示每 HelloTime 时间内发送的报文数越多。

适当的设置该值可以限制端口每 HelloTime 时间内能发送的 BPDU 数目,防止在网络拓扑动荡时,BPDU 占用过多的带宽资源。

四、MSTP 拓扑计算

 

1、MSTP 的基本原理

MSTP 将整个二层网络划分为多个 MST域,各个域之间通过计算生成 CST。

域内则通过计算生成多棵生成树,每棵生成树都被称为是一个多生成树实例。

其中实例0 被称为 IST,其他的多生成树实例为MSTI。

MSTP同 STP 一样,使用配置消息进行生成树的计算,只是配置消息中携带的是设备上MSTP 的配置信息。

2、优先级向量

MSTI 和CIST 都是根据优先级向量来计算的,这些优先级向量信息都包含在MST BPDU 中。

各交换设备互相交换 MSTBPDU 来生成 MSTI 和CIST。

§参与 CIST 计算的优先级向量为:{ 根交换设备 ID,外部路径开销,域根ID,内部路径开销,指定交换设备 ID,指定端口ID,接收端口 ID}

§参与 MSTI 计算的优先级向量为:{ 域根 ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID }括号中的向量的优先级从左到右依次递减。

比较原则

同一向量比较,值最小的向量具有最高优先级。优先级向量比较原则如下。

1. 首先,比较根交换设备 ID。

2. 如果根交换设备 ID相同,再比较外部路径开销。

3. 如果外部路径开销相同,再比较域根 ID。

4. 如果域根 ID仍然相同,再比较内部路径开销。

5. 如果内部路径仍然相同,再比较指定交换设备 ID。

6. 如果指定交换设备 ID仍然相同,再比较指定端口 ID。

7. 如果指定端口 ID还相同,再比较接收端口 ID。

如果端口接收到的 BPDU 内包含的配置消息优于端口上保存的配置消息,则端口上原来保存的配置消息被新收到的配置消息替代。端口同时更新交换设备保存的全局配置消息。反之,新收到的BPDU 被丢弃。

3、CIST 的计算

经过比较配置消息后,在整个网络中选择一个优先级最高的交换设备作为 CIST的树根。

在每个MST 域内MSTP 通过计算生成 IST;同时MSTP 将每个 MST域作为单台交换设备对待,通过计算在 MST 域间生成CST。

CST和 IST 构成了整个交换设备网络的CIST。


4、MSTI 的计算

在MST 域内, MSTP根据 VLAN 和生成树实例的映射关系,针对不同的VLAN 生成不同的生成树实例。

每棵生成树独立进行计算,计算过程与STP 计算生成树的过程类似,请参见 STP拓扑计算。

MSTI 的特点:

·每个 MSTI 独立计算自己的生成树,互不干扰。

·每个 MSTI 的生成树计算方法与STP 基本相同。

·每个 MSTI 的生成树可以有不同的根,不同的拓扑。

·每个 MSTI 在自己的生成树内发送BPDU。

·每个 MSTI 的拓扑通过命令配置决定。

·每个端口在不同 MSTI 上的生成树参数可以不同。

·每个端口在不同 MSTI 上的角色、状态可以不同。

在运行MSTP 协议的网络中,一个 VLAN报文将沿着如下路径进行转发:

·在 MST 域内,沿着其对应的MSTI 转发。

·在 MST 域间,沿着CST 转发。

5、MSTP 对拓扑变化的处理

MSTP 拓扑变化处理与 RSTP拓扑变化处理过程类似,请参见 RSTP 技术细节中的RSTP 拓扑变化处理。

五、MSTP 快速收敛机制

MSTP 支持普通方式和增强方式两种 P/A(Proposal/Agreement)机制:

·普通方式
MSTP 支持普通方式的 P/A 机制实现与 RSTP 支持的 P/A 机制实现相同。

·增强方式

如图所示,在 MSTP 中,P/A 机制工作过程如下:
1. 上游设备发送Proposal 报文,请求进行快速迁移。下游设备接收到后,把与上游设备相连的端口设置为根端口,并阻塞所有非边缘端口。
2. 上游设备继续发送Agreement 报文。下游设备接收到后,根端口转为 Forwarding状态。
3. 下游设备回应Agreement 报文。上游设备接收到后,把与下游设备相连的端口设置为指定端口,指定端口进入Forwarding 状态。

缺省情况下,华为数据通信设备使用增强的快速迁移机制。如果华为数据通信设备和其他制造商的设备进行互通,而其他制造商的设备P/A 机制使用普通的快速迁移机制,此时,可在华为数据通信设备上通过设置P/A 机制为普通的快速迁移机制,从而实现华为数据通信设备和其他制造商的设备进行互通。

发布了6 篇原创文章 · 获赞 1 · 访问量 416

猜你喜欢

转载自blog.csdn.net/sinat_38673660/article/details/105212156