生成树协议
[TOC]
生成树技术概述:
前言
以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路。但是使用冗余链路会在交换网络上产生环路,引发广播风暴以及MAC地址表不稳定等故障现象,从而导致用户通信质量较差,甚至通信中断。为解决交换网络中的环路问题,提出了生成树协议STP(Spanning Tree Protocol)。
运行STP协议的设备通过彼此交互信息发现网络中的环路,并有选择的对某个接口进行阻塞,最终将环形网络结构修剪成无环路的树形网络结构,从而防止报文在环形网络中不断循环,避免设备由于重复接收相同的报文造成处理能力下降。
RSTP(Rapid Spanning Tree Protocol)协议:快速生成树协议,基于STP协议,实现了网络拓扑快速收敛
二层交换机网络的冗余性与环路:

交换机在互连时一般都会使用冗余链路来实现备份。冗余链路虽然增强了网络的可靠性,但是也会产生环路,而环路会带来一系列的问题,继而导致通信质量下降和通信业务中断等问题。
在现实中,除了冗余链路会引起环路,还有一些人为错误导致的环路
问题一:广播风暴:
如果交换机从一个接口上接收到的是一个广播帧,或者是一个目的MAC地址未知的单播帧,则会将这个帧向除源接口之外的所有其他接口转发。
如果交换网络中有环路,则这个帧会被无限转发,此时便会形成广播风暴,网络中也会充斥着重复的数据帧
问题二:MAC地址表漂移
交换机是根据所接收到的数据帧的源地址和接收接口生成MAC地址表项的。

如图,SW3收到一个广播帧泛洪,SW1从GE0/0/1接口接收到广播帧后学习且泛洪,形成MAC地址5489-98EE-788A与GE0/0/1的映射;SW2收到广播帧后学习且泛洪,SW1再次从GE0/0/2收到源MAC地址为5489-98EE-788A的广播帧并进行学习,5489-98EE-788A会不断地在GE0/0/1与GE0/0/2接口之间来回切换,这被称为MAC地址漂移现象。
在网络中部署生成树后,交换机之间会进行生成树协议报文的交互并进行无环拓扑计算,最终将网络中的某个(或某些)接口进行阻塞(Block),从而打破环路

交换机上运行的生成树协议会持续监控网络的拓扑结构,当网络拓扑结构发生变化时,生成树能感知到这些变化,并且自动做出调整
因此,生成树既能解决二层环路问题,也能为网络的冗余性提供一种方案
环路类别:
常见环路主要分为二层环路和三层环路

- 二层环路主要因为网络中部署了二层冗余环境,或人为的误接线缆导致,可以通过借助特定的协议或机制实现二层防环
- 三层环路主要因为路由环路,可以通过动态路由协议防环和IP报文头部中的TTL字段用于防止报文被无止尽地转发
STP的基本概念及工作原理
- 选举一个根桥
- 每个非根交换机选举一个根接口
- 每个网段选举一个指定接口
- 阻塞非根、非指定接口
每个STP网络中,都会存在一个根桥,其他交换机为非根桥。
根桥或者根交换机位于整个逻辑树的根部,是STP网络的逻辑中心,非根桥是根桥的下游设备。当现有根桥产生故障时,非根桥之间会交互信息并重新选举根桥,交互的这种信息被称为BPDU。
STP中定义了三种接口角色:指定接口,根接口和预备接口
- 指定接口是交换机向所连网段转发配置BPDU的接口,每个网段有且只能有一个指定接口。一般情况下,根桥的每个接口总是指定接口
- 根接口是非根交换机去往根桥路径最优的接口。在一个运行STP协议的交换机上最多只有一个根接口,但根桥上没有根接口
- 如果一个接口既不是指定接口也不是根接口,则此接口为预备接口。预备接口将被阻塞
STP的基本概念:
桥ID(Bridge ID,BID)
IEEE 802.1D标准中规定BID由16位的桥优先级 [Bridge Priority] 与桥MAC地址构成
- 在STP中,每一台交换机都有一个标示符叫做Bridge ID或者桥ID,桥ID由16位的桥优先级(Bridge-Priority)和48位的MAC地址构成
- 在STP网络中,桥优先级是可以配置的,取值范围是0~65535,默认值为32768
- 可以修改,但是取值必须为4096的倍数
- 优先级最高的设备 [数值越小越优先] 会被选举为根桥
- 如果优先级相同,则会比较MAC地址,MAC地址越小则越优先
根桥(Root Bridge)
STP引入了根桥(Root Bridge)
对于一个STP网络,全网中只有一个根桥,是整个网络的逻辑中心。根桥会根据网络拓扑的变化而动态变化
网络收敛后,根桥会按照一定的时间间隔产生并向外发送配置BPDU,其他设备仅对该报文进行处理,传达拓扑变化记录,从而保证拓扑的稳定
开销(Cost)
每一个激活了STP的接口都维护着一个Cost值,接口的Cost主要用于计算根路径开销,也就是到达根的开销
- 接口的缺省Cost除了与其速率、工作模式有关,还与交换机使用的STP Cost计算方法有关
- 接口带宽越大,则Cost值越小
- 用户也可以根据需要通过命令调整接口的Cost

根路径开销(Root Path Cost)
一台设备从某个接口到达根桥的RPC等于从根桥到该设备沿途所有入方向接口的Cost累加
- 非根桥通过对比多条路径的路径开销,选出到达根桥的最短路径,这条最短路径的路径开销被称为RPC,并生成无环树状网络
- 根桥的根路径开销是0
接口ID(Port ID,PID)
- 运行STP的交换机使用接口ID来标识每个接口,接口ID主要用于在特定场景下选举指定接口
- 接口ID由两部分构成的,高4 bit是接口优先级,低12 bit是接口编号
- 激活STP的接口会维护一个缺省的接口优先级,取值范围是0到240,步长为16,即取值必须为16的整数倍。在缺省情况下,该值为128。用户可以根据实际需要,通过命令修改该优先级
BPDU(Bridge Protocol Data Unit,网桥协议数据单元)
BPDU是STP能够正常工作的根本。BPDU是STP的协议报文。
STP交换机之间会交互BPDU报文,这些BPDU报文携带着一些重要信息,正是基于这些信息,STP才能够顺利工作。
BPDU分为两种类型:
- 配置BPDU(Configuration BPDU)
- TCN BPDU(Topology Change Notification BPDU)
配置BPDU是STP进行拓扑计算的关键;TCN BPDU只在网络拓扑发生变更时才会被触发。
配置BPDU的报文格式:

配置BPDU的比较原则:

计时器:
STP协议中包含一些重要的时间参数
- Hello Time是指运行STP协议的设备发送配
- 置BPDU的时间间隔,用于检测链路是否存在故障。交换机每隔Hello Time时间会向周围的交换机发送配置BPDU报文,以确认链路是否存在故障。当网络拓扑稳定后,该值只有在根桥上修改才有效
- Message Age:如果配置BPDU是根桥发出的,则Message Age为0。否则,Message Age是从根桥发送到当前桥接收到BPDU的总时间,包括传输延时等。实际实现中,配置BPDU报文每经过一个交换机,Message Age增加1
- Max Age是指BPDU报文的老化时间,可在根桥上通过命令人为改动这个值。Max Age通过配置BPDU报文的传递,可以保证Max Age在整网中一致。非根桥设备收到配置BPDU报文后,会将报文中的Message Age和Max Age进行比较:如果Message Age小于等于Max Age,则该非根桥设备会继续转发配置BPDU报文。如果Message Age大于Max Age,则该配置BPDU报文将被老化掉。该非根桥设备将直接丢弃该配置BPDU,并认为是网络直径过大,导致了根桥连接失败。

配置BPDU报文每经过一个交换机,Message Age都加1。
如果Message Age大于Max Age,非根桥会丢弃该配置BPDU。
STP的计算过程
选举根桥
- 根桥是STP树的根节点
- 要生成一棵STP树,首先要确定出一个根桥,在一个连续的STP交换网络中只会存在一个根桥
- 根桥是整个交换网络的逻辑中心,但不一定是它的物理中心
- 当网络的拓扑发生变化时,根桥也可能发生变化
选举过程:
- STP交换机初始启动之后,都会认为自己是根桥,并在发送给其他交换机的BPDU中宣告自己为根桥。因此,此时BPDU中的根桥ID为各自设备的网桥ID
- 当交换机收到网络中其他设备发送来的BPDU后,会比较BPDU中的根桥ID和自己的BID
- 交换机不断交互BPDU,同时对BID进行比较,最终选举一台BID最小的交换机作为根桥,其他的则为非根桥
注意:
- 根桥的角色可抢占,当有更优的BID的交换机加入网络时,网络会重新进行STP计算,选出新的根桥
- 为了确保交换网络的稳定,建议提前规划STP组网,并将规划为根桥的交换机的桥优先级设置为最小值0
选举根接口
- 一个非根桥设备上会有多个端口与网络相连,为了保证从某台非根桥设备到根桥设备的工作路径是最优且唯一的,就必须从该非根桥设备的端口中确定出一个被称为“根端口”的端口,由根端口来作为该非根桥设备与根桥设备之间进行报文交互的端口
- 在选举出根桥后,根桥仍然持续发送BPDU,而非根桥将持续不断的收到根桥发送的BPDU。因此,在所有非根桥上选举一个距离根桥“最近”的端口 [根端口],在网络收敛后,根端口将不断的收到来自根桥的BPDU
- 根端口保证了交换机与根桥之间工作路径的唯一性和最优性
注意:一个非根桥设备上,最多只能有一个根端口
选举过程:
- 交换机有多个端口接入网络,各个端口都会收到BPDU报文,报文中会携带RootID、RPC、BID、PID等关键字段,端口会针对这些字段进行比较
- 首先比较根路径开销 [RPC],STP协议把根路径开销作为确定根端口的重要依据。RPC值越小,越优选,因此交换机会选RPC最小的端口作为根端口
- 当RPC相同时,比较上行交换机的BID,即比较交换机各个端口收到的BPDU中的BID,值越小,越优选,因此交换机会选上行设备BID最小的端口作为根端口
- 当上行交换机BID相同时,比较上行交换机的PID,即比较交换机各个端口收到的BPDU中的PID,值越小,越优先,因此交换机会选上行设备PID最小的端口作为根端口
- 当上行交换机的PID相同时,则比较本地交换机的PID,即比较本端交换机各个端口各自的PID,值越小,越优先,因此交换机会选端口PID最小的端口作为根端口
选举指定接口
网络中的每个链路与根桥之间的工作路径必须是唯一的且最优的。当一个链路有两条及以上的路径通往根桥时,与该链路相连的交换机就必须确定出一个唯一的指定端口
- 因此,每个链路选举一个指定端口,用于向这个链路发送BPDU
选举过程:
- 根接口选举出来后,非根桥会使用其在该接口上收到的最优BPDU进行计算,然后将计算得到的配置BPDU与除了根接口之外的其他所有接口所收到的配置BPDU进行比较:
- 如果前者更优,则该接口为指定接口
- 如果后者更优,则该接口为非指定接口
- 一般情况下,根桥的所有接口都是指定接口
阻塞非指定接口
什么是非指定端口:在确定了根端口和指定端口之后,交换机上所有剩余的非根端口和非指定端口统称为预备端口
阻塞非指定端口
STP会对这些非指定端口进行逻辑阻塞,即这些端口不能转发由终端计算机产生并发送的帧(用户数据帧)。
一旦非指定端口被逻辑阻塞后,STP树(无环路工作拓扑)就生成了
注意:
- 非指定端口可以接收并处理BPDU
- 根端口和指定端口既可以接收和发送BPDU,也可以转发用户数据帧
STP的接口状态
状态名称 | 状态描述 |
---|---|
禁用 Disable | 该接口不能收发BPDU,也不能收发业务数据帧 |
阻塞 Blocking | 该接口被STP阻塞。处于阻塞状态的接口不能发送BPDU,但是会持续侦听BPDU,而且不能收发业务数据帧,也不会进行MAC地址学习 |
侦听 Listening | 当接口处于该状态时,STP初步认定该接口为根接口或指定接口,但接口依然处于STP计算的过程中,此时接口可以收发BPDU,但是不能收发业务数据帧,也不会进行MAC地址学习 |
学习 Learning | 当接口处于该状态时,会侦听业务数据帧,但不能转发业务数据帧,并且在收到业务数据帧后进行MAC地址学习 |
转发 Forwarding | 处于该状态的接口可以正常地收发业务数据帧,也会进行BPDU处理。接口的角色需是根接口或指定接口才能进入转发状态 |
STP的接口状态迁移

STP的基础配置
配置生成树工作模式:
[Huawei] stp mode { stp | rstp | mstp }
交换机支持STP、RSTP和MSTP(Multiple Spanning Tree Protocol)三种生成树工作模式,默认情况工作在MSTP模式。
配置根桥和备份根桥:
stp [ instance instance-id ] root { primary | secondary }
[Huawei] stp root primary #配置当前设备为根桥,缺省情况下,交换机不作为任何生成树的根桥。配置后该设备优先级数值自动为0,并且不能更改设备优先级。
[Huawei] stp root secondary #配置当前交换机为备份根桥,缺省情况下,交换机不作为任何生成树的备份根桥。配置后该设备优先级数值为4096,并且不能更改设备优先级
参数 | 参数说明 |
---|---|
instance instance-id | 指定生成树实例的编号。如果不输入instance instance-id参数,则在CIST实例上生效 |
primary | 指定配置为生成树的根桥设备 |
secondary | 指定配置为生成树的备份根桥设备 |
配置交换机的STP优先级:
stp [ instance instance-id ] priority priority # 缺省情况下,交换机的优先级取值是32768
参数 | 参数说明 | 取值 |
---|---|---|
priority | 指定交换设备的优先级数值。优先级值越小,则优先级越高 | 整数形式,取值范围是0~61440,步长为4096 |
配置接口路径开销:
[Huawei] stp pathcost-standard { dot1d-1998 | dot1t | legacy }
# 配置接口路径开销计算方法。缺省情况下,路径开销值的计算方法为IEEE 802.1t标准方法
# 同一网络内所有交换机的接口路径开销应使用相同的计算方法
[Huawei-GigabitEthernet0/0/1] stp [process process-id][instance instance-id] cost cost
# 设置当前接口的路径开销值
参数 | 参数说明 |
---|---|
dot1d-1998 | 指定路径开销值的计算方法是IEEE 802.1d-1998标准方法 |
dot1t | 指定路径开销值的计算方法是IEEE 802.1t标准方法 |
legacy | 指定路径开销值的计算方法是华为计算方法 |
配置接口优先级:
[Huawei-intf] stp priority priority
配置接口的优先级。缺省情况下,交换机接口的优先级取值是128。
启用STP/RSTP/MSTP
[Huawei] stp enable
使能交换机的STP/RSTP/MSTP功能。缺省情况下,设备的STP/RSTP/MSTP功能处于启用状态。
RSTP对STP的改进
IEEE于2001年发布的802.1w标准定义了快速生成树协议RSTP(Rapid Spanning-Tree Protocol),RSTP在STP基础上进行了改进,实现了网络拓扑快速收敛。
RSTP(快速生成树)是从STP演化而来的,基本思想一样;当交换网络拓扑结构发生变化时, RSTP可以通过Proposal/Agreement机制更快地恢复网络的连通性。
根据STP的不足,RSTP删除了3种接口状态,新增加了2种接口角色,并且把接口属性充分的按照状态和角色解耦;此外,RSTP还增加了相应的一些增强特性和保护措施,实现网络的稳定和快速收敛。
- RSTP是可以向下兼容STP的,但不推荐这样的做,RSTP会失去其快速收敛的优势,而STP慢速收敛的缺点会暴露出来。
RSTP对STP的其他改进:
配置BPDU的处理发生变化:
- 拓扑稳定后,配置BPDU报文的发送方式进行了优化
- 使用更短的BPDU超时计时
- 对处理次等BPDU的方式进行了优化
配置BPDU格式的改变,充分利用了STP协议报文中的Flag字段,明确了接口角色
RSTP拓扑变化处理:相比于STP进行了优化,加速针对拓扑变更的反应速度
接口角色不同

-
从配置BPDU报文发送角度来看:
-
预备(Alternate)接口就是由于学习到其它网桥发送的配置BPDU报文而阻塞的接口
-
备份(Backup)接口就是由于学习到自己发送的配置BPDU报文而阻塞的接口
-
-
从用户流量角度来看:
- Alternate接口提供了从指定桥到根的另一条可切换路径,作为根接口的备份接口
- Backup接口作为指定接口的备份,提供了另一条从根桥到相应网段的备份通路
通过RSTP接口角色的增补,简化了生成树协议的理解及部署
边缘接口:
如果指定接口位于整个域的边缘,不再与任何交换设备连接,这种接口叫做边缘接口。
边缘接口一般与用户终端设备直接连接,不与任何交换设备连接。边缘接口正常情况下接收不到配置BPDU报文,不参与RSTP运算,可以由Disabled状态直接转到Forwarding状态,且不经历时延,就像在接口上将STP禁用了一样。但是,一旦边缘接口收到配置BPDU报文,就丧失了边缘接口属性,成为普通STP接口,并重新进行生成树计算,从而引起网络震荡

接口状态不同
-
RSTP的状态规范把原来的5种状态缩减为3种
STP接口状态 RSTP接口状态 接口在拓扑中的角色 Forwarding Forwarding 包括根接口、指定接口 Learning Learning 包括根接口、指定接口 Listening Discarding 包括根接口、指定接口 Blocking Discarding 包括Alternate接口、Backup接口 Disabled Discarding 包括Disable接口 - 如果不转发用户流量也不学习MAC地址,那么接口状态就是Discarding状态
- 如果不转发用户流量但是学习MAC地址,那么接口状态就是Learning状态
- 如果既转发用户流量又学习MAC地址,那么接口状态就是Forwarding状态
生成树技术进阶
STP/RSTP的缺陷
所有的VLAN共享一棵生成树
由于局域网内所有的VLAN共享一棵生成树,因此无法在VLAN间实现数据流量的负载均衡,链路被阻塞后将不承载任何流量,还有可能造成部分VLAN的报文无法转发
VBST:基于VLAN的生成树
VBST(VLAN-Based Spanning Tree)生成树解决方案。该解决方案中,生成树的形成是基于VLAN的,不同VLAN间可形成相互独立的生成树,不同VLAN内的流量沿着各自的生成树转发,进而可实现流量的负载分担,有效地提高了链路带宽的利用率;消除了网络中可能存在的通信环路;配置和维护简单,可降低配置和维护成本。但如果网络中VLAN的数量较多,为每个VLAN执行独立的生成树计算将耗费交换机大量的资源。
企业网中部署VBST:
- 可消除网络中可能存在的通信环路
- 可实现链路的复用和流量的负载分担,进而有效地提高链路带宽的利用率
- 配置和维护简单,进而可降低配置和维护成本
但是如果网络中VLAN的数量较多,为每个VLAN执行独立的生成树计算将耗费交换机大量的资源
MSTP:多生成树

为了弥补STP和RSTP的缺陷,IEEE于2002年发布的802.1s标准定义了MSTP。
MSTP兼容STP和RSTP,既可以快速收敛,又提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN数据的负载均衡。
MSTP把一个交换网络划分成多个域,每个域内形成多棵生成树,生成树之间彼此独立。
- 每棵生成树叫做一个多生成树实例MSTI Multiple Spanning Tree Instance
- 生成树实例是多个VLAN的集合所对应的生成树
- 通过将多个VLAN捆绑到一个实例,可以节省通信开销和资源占用率。
- MSTP各个实例拓扑的计算相互独立,在这些实例上可以实现负载均衡。
- 可以把多个相同拓扑结构的VLAN映射到一个实例里,这些VLAN在接口上的转发状态取决于接口在对应实例的状态

堆叠技术:
堆叠iStack(Intelligent Stack),是指将多台支持堆叠特性的交换机设备组合在一起,从逻辑上组合成一台整体交换设备
堆叠系统建立之前,每台交换机都是单独的实体,有自己独立的IP地址和MAC地址,对外体现为多台交换机,用户需要独立的管理所有的交换机;堆叠建立后堆叠成员对外体现为一个统一的逻辑实体,用户使用一个IP地址对堆叠中的所有交换机进行管理和维护
