生成树协议是一种二层管理协议,它通过选择性地阻塞网络中的冗余链路来消除二层环路,同时还具备链路备份的功能。

    与众多协议的发展过程一样,生成树协议也是随着网络的发展而不断更新的,从最初的 STP( Spanning Tree Protocol,生成树协议)到 RSTP( Rapid Spanning Tree Protocol,快速生成树协议),再到最新的 MSTP( Multiple Spanning Tree Protocol,多生成树协议)。本文将渐进式地对 STP、 RSTP 和 MSTP 各自的特点及其关系进行介绍。


STP 简介

    STP 是 IEEE 制定的 802.1D 标准定义,用于在局域网中消除数据链路层物理环路的协议。运行该协议的设备通过彼此交互报文发现网络中的环路,并有选择的对某些端口进行阻塞,最终将环路网络结构修剪成无环路的树型网络结构,从而防止报文在环路网络中不断增生和无限循环,避免主机由于重复接收相同的报文造成的报文处理能力下降的问题发生。

    STP 包含了两个含义:狭义的 STP 是指 IEEE 802.1D 中定义的 STP 协议;广义的 STP 是指包括IEEE 802.1D 定义的 STP 协议,以及各种在它的基础上经过改进的生成树协议。


  1. STP 的协议报文

    STP 采用的协议报文是 BPDU( Bridge Protocol Data Unit,桥协议数据单元),也称为配置消息。STP 通过在设备之间传递 BPDU 来确定网络的拓扑结构。 BPDU 中包含了足够的信息来保证设备完成生成树的计算过程。

    BPDU 在 STP 协议中分为两类:

   · 配置 BPDU( Configuration BPDU):用于进行生成树计算和维护生成树拓扑的报文。

   · TCN BPDU( Topology Change Notification BPDU):当拓扑结构发生变化时,用于通知相关设备网络拓扑结构发生变化的报文。


2. STP 的基本概念

    (1) 根桥

    树形的网络结构必须要有树根,于是 STP 引入了根桥( Root Bridge)的概念。根桥在全网中只有一个,而且根桥会根据网络拓扑的变化而改变,因此根桥并不是固定的。

    在网络初始化过程中,所有设备都视自己为根桥,生成各自的配置 BPDU 并周期性地向外发送;但当网络拓扑稳定以后,只有根桥设备才会向外发送配置 BPDU,其它设备则对其进行转发。

    (2) 根端口

    所谓根端口,是指一个非根桥的设备上离根桥最近的端口。根端口负责与根桥进行通信。非根桥设备上有且只有一个根端口,根桥上没有根端口。

    (3) 指定桥与指定端口

    指定桥与指定端口的含义,请参见 表 1-1 的说明。

H3C MSTP概述_MSTP

    

    指定桥与指定端口如 图 1-1 所示, AP1 、 AP2、 BP1 、 BP2、 CP1 、 CP2 分别表示设备Device A、Device B、 Device C的端口。

   · Device A 通过端口 AP1 向 Device B 转发配置消息,则 Device B 的指定桥就是 Device A,指定端口就是 Device A 的端口 AP1 ;

   · 与局域网 LAN 相连的有两台设备: Device B 和 Device C,如果 Device B 负责向 LAN 转发配置消息,则 LAN 的指定桥就是Device B,指定端口就是 Device B 的 BP2。

H3C MSTP概述_MSTP_02

    说明:根桥上的所有端口都是指定端口。


(4) 路径开销

    路径开销是 STP 协议用于选择链路的参考值。 STP 协议通过计算路径开销,选择较为“强壮”的链路,阻塞多余的链路,将网络修剪成无环路的树型网络结构。


3. STP 的基本原理

    STP 通过在设备之间传递 BPDU 来确定网络的拓扑结构。 配置消息中包含了足够的信息来保证设备完成生成树的计算过程,其中包含的几个重要信息如下:

   · 根桥 ID:由根桥的优先级和 MAC 地址组成。

   · 根路径开销:到根桥的最短路径开销。

   · 指定桥 ID:由指定桥的优先级和 MAC 地址组成。

   · 指定端口 ID:由指定端口的优先级和端口名称组成。

   · Message Age:配置消息在网络中传播的生存期。

   · Max Age:配置消息在设备中能够保存的最大生存期。

   · Hello Time:配置消息发送的周期。

   · Forward Delay:端口状态迁移的延时。

   说明:

    为描述方便,在下面的描述及举例中仅考虑配置消息的其中四项内容:

   · 根桥 ID(以设备的优先级表示)

   · 根路径开销(与端口所连的链路速率相关)

   · 指定桥 ID(以设备的优先级表示)

   · 指定端口 ID(以端口名称表示)


(1) STP 算法实现的具体过程

   · 初始状态

    各台设备的各个端口在初始时会生成以自己为根桥的配置消息,根路径开销为 0,指定桥 ID 为自身设备 ID,指定端口为本端口。

   · 最优配置消息的选择

    各台设备都向外发送自己的配置消息,同时也会收到其他设备发送的配置消息。最优配置消息的选择过程如 表 1-2所示。

H3C MSTP概述_MSTP_03

    说明:

    配置消息的比较原则如下:

   · 根桥 ID 较小的配置消息优先级高。

   · 若根桥 ID 相同,则比较根路径开销,比较方法为:用配置消息中的根路径开销加上本端口对应的路径开销,假设两者之和为 S,则 S 较小的配置消息优先级较高。

   · 若根路径开销也相同,则依次比较指定桥 ID、指定端口 ID、接收该配置消息的端口 ID 等,上述值较小的配置消息优先级较高。

   · 根桥的选择

    网络初始化时,网络中所有的 STP 设备都认为自己是“根桥”,根桥 ID 为自身的设备 ID。通过交换配置消息,设备之间比较根桥 ID,网络中根桥 ID 最小的设备被选为根桥。

    · 根端口、指定端口的选择

    根端口、指定端口的选择过程如 表 1-3所示。

H3C MSTP概述_MSTP_04

    说明:在拓扑稳定状态,只有根端口和指定端口转发流量,其他的端口都处于阻塞状态,它们只接收STP协议报文而不转发用户流量。

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

    下面结合例子说明STP算法实现的计算过程。具体的组网如 图 1-2所示。 Device A的优先级为 0,Device B的优先级为 1 , Device C的优先级为 2,各个链路的路径开销分别为 5、 10、 4。

H3C MSTP概述_MSTP_05

   · 各台设备的初始状态

    各台设备的初始状态如 表 1-4所示。

H3C MSTP概述_MSTP_06

H3C MSTP概述_MSTP_07

   · 各台设备的比较过程及结果

    各台设备的比较过程及结果如 表 1-5所示。

H3C MSTP概述_MSTP_08

H3C MSTP概述_MSTP_09

H3C MSTP概述_MSTP_10

    经过上表的比较过程,此时以Device A为根桥的生成树就确定下来了,形状如 图 1-3所示。

H3C MSTP概述_MSTP_11

    说明:为了便于描述,本例简化了生成树的计算过程,实际的过程要更加复杂。


   (2) STP 的配置消息传递机制

   · 当网络初始化时, 所有的设备都将自己作为根桥, 生成以自己为根的配置消息, 并以 Hello Time为周期定时向外发送。

   · 接收到配置消息的端口如果是根端口,且接收的配置消息比该端口的配置消息优,则设备将配置消息中携带的 Message Age 按照一定的原则递增,并启动定时器为这条配置消息计时,同时将此配置消息从设备的指定端口转发出去。

   · 如果指定端口收到的配置消息比本端口的配置消息优先级低时,会立刻发出自己的更好的配置消息进行回应。

   · 如果某条路径发生故障,则这条路径上的根端口不会再收到新的配置消息,旧的配置消息将会因为超时而被丢弃,设备重新生成以自己为根的配置消息并向外发送,从而引发生成树的重新计算,得到一条新的通路替代发生故障的链路,恢复网络连通性。

    不过,重新计算得到的新配置消息不会立刻就传遍整个网络,因此旧的根端口和指定端口由于没有发现网络拓扑变化,将仍按原来的路径继续转发数据。如果新选出的根端口和指定端口立刻就开始数据转发的话,可能会造成暂时性的环路。


(3) STP 定时器

    STP 计算中,需要使用三个重要的时间参数: Forward Delay、 Hello Time 和 Max Age。

   · Forward Delay 为设备状态迁移的延迟时间。链路故障会引发网络重新进行生成树的计算,生成树的结构将发生相应的变化。不过重新计算得到的新配置消息无法立刻传遍整个网络,如果新选出的根端口和指定端口立刻就开始数据转发的话,可能会造成暂时性的环路。为此,STP 采用了一种状态迁移的机制,新选出的根端口和指定端口要经过 2 倍的 Forward Delay延时后才能进入转发状态,这个延时保证了新的配置消息已经传遍整个网络。

   · Hello Time 用于设备检测链路是否存在故障。设备每隔 Hello Time 时间会向周围的设备发送hello 报文,以确认链路是否存在故障。

   · Max Age 是用来判断配置消息在设备内保存时间是否“过时”的参数,设备会将过时的配置消息丢弃。


RSTP 简介

    RSTP 由 IEEE 制定的 802.1w 标准定义,它在 STP 基础上进行了改进,实现了网络拓扑的快速收敛。其“快速”体现在,当一个端口被选为根端口和指定端口后,其进入转发状态的延时在某种条件下大大缩短,从而缩短了网络最终达到拓扑稳定所需要的时间。

    说明:

   · RSTP 中,根端口的端口状态快速迁移的条件是:本设备上旧的根端口已经停止转发数据,而且上游指定端口已经开始转发数据。

   · RSTP 中,指定端口的端口状态快速迁移的条件是:指定端口是边缘端口或者指定端口与点对点链路相连。如果指定端口是边缘端口,则指定端口可以直接进入转发状态;如果指定端口连接着点对点链路,则设备可以通过与下游设备握手,得到响应后即刻进入转发状态。


MSTP 简介

    1. MSTP 产生的背景

    (1) STP、 RSTP 存在的不足

    STP 不能快速迁移, 即使是在点对点链路或边缘端口(边缘端口指的是该端口直接与用户终端相连,而没有连接到其它设备或共享网段上),也必须等待 2 倍的 Forward Delay 的时间延迟,端口才能迁移到转发状态。

    RSTP 可以快速收敛,但是和 STP 一样存在以下缺陷:局域网内所有网桥共享一棵生成树,不能按VLAN 阻塞冗余链路,所有 VLAN 的报文都沿着一棵生成树进行转发。

    (2) MSTP 的特点

    MSTP 由 IEEE 制定的 802.1s 标准定义,它可以弥补 STP 和 RSTP 的缺陷,既可以快速收敛,也能使不同 VLAN 的流量沿各自的路径转发,从而为冗余链路提供了更好的负载分担机制。

    MSTP 的特点如下:

   · MSTP 设置 VLAN 映射表(即 VLAN 和生成树的对应关系表),把 VLAN 和生成树联系起来。通过增加“实例”(将多个 VLAN 整合到一个集合中)这个概念,将多个 VLAN 捆绑到一个实例中,以节省通信开销和资源占用率。

   · MSTP 把一个交换网络划分成多个域,每个域内形成多棵生成树,生成树之间彼此独立。

   · MSTP 将环路网络修剪成为一个无环的树型网络,避免报文在环路网络中的增生和无限循环,同时还提供了数据转发的多个冗余路径,在数据转发过程中实现 VLAN 数据的负载分担。

   · MSTP 兼容 STP 和 RSTP。


    2. MSTP 的基本概念

    图1-4 MSTP 的基本概念示意图

H3C MSTP概述_MSTP_12

    如 图 1-4所示,每台设备都运行MSTP, MSTP中的一些基本概念如下:

    (1) MST 域

    MST 域( Multiple Spanning Tree Regions,多生成树域)是由交换网络中的多台设备以及它们之间的网段构成。这些设备具有下列特点:

   · 都启动了 MSTP。

   · 具有相同的域名。

   · 具有相同的 VLAN 到生成树实例映射配置。

   · 具有相同的 MSTP 修订级别配置。

   · 这些设备之间在物理上有链路连通。

    例如 图 1-4中的区域A0,域内所有设备都有相同的MST域配置:

   · 域名相同。

   · VLAN 与生成树实例的映射关系相同( VLAN1 映射到生成树实例 1 , VLAN2 映射到生成树实例 2,其余 VLAN 映射到 CIST。其中, CIST 即指生成树实例 0)。

   · MSTP 修订级别相同(此配置在图中没有体现)。

    一个交换网络可以存在多个 MST 域。 用户可以通过 MSTP 配置命令把多台设备划分在同一个 MST域内。

    

    (2) VLAN 映射表

    VLAN 映射表是 MST 域的一个属性,用来描述 VLAN 和生成树实例的映射关系。

    例如 图 1-4中,域A0 的VLAN映射表就是: VLAN 1 映射到生成树实例 1 , VLAN 2 映射到生成树实例 2,其余VLAN映射到CIST。 MSTP就是根据VLAN映射表来实现负载分担的。


    (3) IST

    IST( Internal Spanning Tree,内部生成树)是 MST 域内的一棵生成树。

    IST 和 CST( Common Spanning Tree,公共生成树)共同构成整个交换网络的生成树 CIST( Common and Internal Spanning Tree,公共和内部生成树)。 IST 是 CIST 在 MST 域内的片段。

    例如 图 1-4中, CIST在每个MST域内都有一个片段,这个片段就是各个域内的IST。


    (4) CST

    CST 是连接交换网络内所有 MST 域的单生成树。如果把每个 MST 域看作是一个“设备”, CST就是这些“设备”通过 STP 协议、 RSTP 协议计算生成的一棵生成树。例如 图 1-4中红色线条描绘的就是CST。


    (5) CIST

    CIST 是连接一个交换网络内所有设备的单生成树,由 IST 和 CST 共同构成。例如 图 1-4中,每个MST域内的IST加上MST域间的CST就构成整个网络的CIST。


    (6) MSTI

    一个 MST 域内可以通过 MSTP 生成多棵生成树,各棵生成树之间彼此独立。每棵生成树都称为一个 MSTI( Multiple Spanning Tree Instance,多生成树实例)。

    例如 图 1-4中,每个域内可以存在多棵生成树,每棵生成树和相应的VLAN对应。这些生成树都被称为MSTI。


    (7) 域根

    MST 域内 IST 和 MSTI 的根桥就是域根。 MST 域内各棵生成树的拓扑不同,域根也可能不同。例如 图 1-4中,区域D0 中,生成树实例 1 的域根为设备B,生成树实例 2 的域根为设备C。


    (8) 总根

    总根( Common Root Bridge)是指 CIST 的树根。

    例如 图 1-4中,总根为区域A0 内的某台设备。


    (9) 域边界端口

    域边界端口是指位于 MST 域的边缘,用于连接不同 MST 域、 MST 域和运行 STP 的区域、 MST 域和运行 RSTP 的区域的端口。

    在进行MSTP计算的时候,域边界端口在MST实例上的角色与CIST的角色保持一致,但Master端口除外——Master端口在CIST上的角色为根端口,在其它实例上的角色才为Master端口。例如 图 1-4中,如果区域A0 的一台设备和区域D0 的一台设备的第一个端口相连,整个交换网络的总根位于A0内,则区域D0 中这台设备上的第一个端口就是区域D0 的域边界端口。


    (10) 端口角色

    在 MSTP 的计算过程中,端口角色主要有根端口、指定端口、 Master 端口、 Alternate 端口、 Backup端口等。

   · 根端口:负责向根桥方向转发数据的端口。

   · 指定端口:负责向下游网段或设备转发数据的端口。

   · Master 端口:连接 MST 域到总根的端口,位于整个域到总根的最短路径上。从 CST 上看,Master 端口就是域的“根端口”(把域看作是一个节点)。 Master 端口在 IST/CIST 上的角色是根端口,在其它各个实例上的角色都是 Master 端口。

   · Alternate 端口: 根端口和 Master 端口的备份端口。 当根端口或 Master 端口被阻塞后, Alternate端口将成为新的根端口或 Master 端口。

   · Backup 端口:指定端口的备份端口。当指定端口被阻塞后, Backup 端口就会快速转换为新的指定端口,并无时延的转发数据。当使能了 MSTP 协议的同一台设备的两个端口互相连接时就存在一个环路,此时设备会将其中一个端口阻塞, Backup 端口是被阻塞的那个端口。

    端口在不同的生成树实例中可以担任不同的角色。

H3C MSTP概述_MSTP_13

    请参考 图 1-5理解上述概念。图中:

   · 设备 A、 B、 C、 D 构成一个 MST 域。

   · 设备 A 的端口 1 、端口 2 向总根方向连接。

   · 设备 C 的端口 5、端口 6 构成了环路。

   · 设备 D 的端口 3、端口 4 向下连接其他的 MST 域。


    (11) 端口状态

    MSTP 中,根据端口是否学习 MAC 地址和是否转发用户流量,可将端口状态划分为以下三种:

   · Forwarding 状态:学习 MAC 地址,转发用户流量。

   · Learning 状态:学习 MAC 地址,不转发用户流量。

   · Discarding 状态:不学习 MAC 地址,不转发用户流量。

    说明:同一端口在不同的生成树实例中的端口状态可以不同。



    端口状态和端口角色是没有必然联系的, 表 1-6给出了各种端口角色能够具有的端口状态(“√”表示此端口角色能够具有此端口状态;“-”表示此端口角色不能具有此端口状态)。

H3C MSTP概述_MSTP_14


    3. MSTP 的基本原理

    MSTP 将整个二层网络划分为多个 MST 域,各个域之间通过计算生成 CST;域内则通过计算生成多棵生成树,每棵生成树都被称为是一个多生成树实例。其中实例 0 被称为 IST,其它多生成树实例为 MSTI。 MSTP 同 STP 一样,使用配置消息进行生成树的计算,只是配置消息中携带的是设备上 MSTP 的配置信息。

    (1) CIST 生成树的计算

    经过比较配置消息后,在整个网络中选择一个优先级最高的设备作为 CIST 的树根。在每个 MST 域内 MSTP 通过计算生成 IST;同时 MSTP 将每个 MST 域作为单台设备对待,通过计算在域间生成CST。 CST 和 IST 构成了整个网络的 CIST。

    (2) MSTI 的计算

    在MST域内, MSTP根据VLAN和生成树实例的映射关系, 针对不同的VLAN生成不同的生成树实例。每棵生成树独立进行计算,计算过程与STP计算生成树的过程类似。请参见“1.1.1 3. STP的基本原理”。

    MSTP 中,一个 VLAN 报文将沿着如下路径进行转发:

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

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


    4. MSTP 在设备上的实现

    MSTP 同时兼容 STP、 RSTP。 STP、 RSTP 两种协议报文都可以被运行 MSTP 的设备识别并应用于生成树计算。

    设备除了提供 MSTP 的基本功能外,还从用户的角度出发,提供了许多便于管理的特殊功能,如下所示:

   · 根桥保持。

   · 根桥备份。

   · ROOT 保护功能。

   · BPDU 保护功能。

   · 环路保护功能。

   · 防止 TC-BPDU 报文攻击功能。

   · MSTP 支持接口板的热插拔,同时支持主控板与备板的倒换。


STP 相关协议规范

    相关的协议规范有:

   · IEEE 802.1D: Spanning Tree Protocol

   · IEEE 802.1w: Rapid Spanning Tree Protocol

   · IEEE 802.1s: Multiple Spanning Tree Protocol


注意事项

    配置 MSTP 时需要注意如下事项:

    (1) 在两台或者多台使能了 MSTP 协议的设备上,只有当选择因子(缺省为 0,不可配)、域名、VLAN 映射表和 MSTP 修订级别的配置都相同,且这些设备之间有链路相通时,他们才能属于同一个 MST 域。

    (2) 当设备被配置为根桥或者备份根桥之后,不能再修改设备的桥优先级。

    (3) 在生成树根桥的选择过程中,如果设备的桥优先级相同,则 MAC 地址最小的设备将被选择为根。

    (4) 根桥 Forward Delay、 Hello Time 和 Max Age 的取值需要满足一定关系,否则会引起网络频繁震荡。建议用户指定设备的网络直径,由设备自动计算 Forward Delay、 Hello Time 和 MaxAge。

   · 2 ×( Forward Delay - 1 second) Max Age

   · Max Age 2 ×( Hello Time + 1 second)

    (5) 在设备没有使能 BPDU 保护的情况下,如果被设置为边缘端口的端口上收到来自其它端口的BPDU, 则该端口会重新变为非边缘端口。 此时, 只有重启端口才能将该端口恢复为边缘端口。

    (6) 对于直接与终端相连的端口,请将该端口设置为边缘端口,同时启动 BPDU 保护功能。这样既能够使该端口快速迁移到转发状态,也可以保证网络的安全。