STP介绍及工作原理

in 默认分类 with 0 comment

2024-03-28T01:55:03.png

STP生成树协议,为此次学习当中概念较多,机制较为复杂的一个协议。后续也将附上案例将逐渐完善。此文由躺平bro同学提供思维导图支持。

本文所借鉴网站:
STP工作原理及配置
STP 基本概念
STP 选举
STP 计算过程

运行stp服务的设备彼此之间可以交互各自的设备相关信息(BPDU)从而发现网络中的环路,并通过一系列计算阻塞其中一个端口从而达到破除环路的目的,最开始未被阻塞端口假如损坏的话,被阻塞端口就会重新运行。

STP工作过程

1)选举根桥(比桥ID)
2)选举根端口:(比较RPC,对端桥ID,对端端口ID)每一台非根桥上都有且只有一个根端口
3)选举指定端口:(比较RPC,链路对端桥ID,链路对端端口ID)每条链路上有且只有一个指定端口
4)选举预备端口:(阻塞端口),不是根端口也不是指定端口的就是预备端口。

STP名词介绍

1.选出根桥:每个交换机运行STP后,会有个桥ID,桥ID最小的交换机为根桥。每一台运行STP的交换机都拥有一个唯一的BID在STP网络中。桥ID由桥优先级+MAC地址组成。如桥优先级相同,则比较MAC地址大小,MAC地址小的为根桥。桥优先级是可配置,范围是0~65535,默认为32768, 可修改但修改值必须为4096的倍数。

2.选出根端口:RP。每个非根桥上,选出1个接口为根端口。收到BPDU最优的端口就是根端口。

3.Cost开销:每个激活了STP的接口都维护着一个cost值,接口的cost主要用于计算根路径开销,也就是达到根的开销,接口的缺省cost除了与速率,工作模式有关,还与交换机使用的STP Cost计算有关。接口带宽越大,cost值越小。用户可以根据通过命令调整接口的cost值.Cost标准需要一致。用户也可以根据需要通过命令调整接口的Cost。
2024-03-28T02:24:27.png

4.RPC:根路径开销。在STP的拓扑计算过程中,非常重要的环节即丈量交换机某个接口到根桥的成本,也就是RPC。一台设备从某个接口到达根桥的RPC等于根桥到该接口所有入方向的接口的cost的累加。请注意不是从交换机接口的到根桥的开销总和。而是从根桥到交换机接口的入方向的开销总和。计算RPC时,要以交换机进行计算,如一台交换机接入三个接口接入三台交换机,计算时要从此交换机中出发进行计算,非根桥通过对比多条路径的路径开销,选出到达根桥的最短路径,这条最短路径的路径开销被称为RPC,并生成无环树状网络。根桥的根路径开销是0。(用于选举根端口RP及指定端口DR)

5.Port ID:接口ID。运行STP的交换机使用接口ID来标识每个接口,接口ID主要用与在特定场景下选举指定接口。接口ID由两部分构成的,高4bit是接口优先级,低12bit是接口编码。激活STP的接口会维护一个缺省的接口优先级,在华为交换机上,该值为128。用户可以根据实际需要,通过命令修改该优先级。端口优先级取值范围是0到240,步长为16,即取值必须为16的整数倍。

6.BPDU:BPDU是STP能够正常工作的根本。BPDU是STP的协议报文。STP交换机之间会交互BPDU报文,这些BPDU报文携带一些重要信息。BPDU分为两种:BPDU即TCN BPDU。
1)配置BPDU:由根桥始发,发送给个非根交换机。
2)TCN BPDU:非根交换机假如发现网络拓扑发生变化的情况下才会被触发。
BPDU报文格式:
2024-03-31T13:10:25.png
配置BPDU的比较原则
2024-03-31T13:11:44.png

7.选出指定端口:DP。所有交换机,一个接口发送的BPDU比收到的BPDU更优,则是指定接口。(根桥所有接口的都是指定接口,而每条链有有且只有一个指定端口)

8.阻塞其他端口:非DP非RP的接口为阻塞接口。

STP运行过程

1.选举根桥
STP在交换网络中最开始工作后,每个交换机都认为自己是根桥,所以都对外发送配置BPDU,但是互相比较后选择出拥有最小桥ID的交换机作为根桥(也就是先比较优先级后比较mac地址 桥id=优先级+mac地址)。根桥的角色可抢占。当有更优的BID的交换机加入网络时,网络会重新进行STP计算,选出新的根桥.

2.选举根端口
2.1)在非根桥交换机上选择一个距离根桥最近的端口作为根端口(一个非根桥设备上最多只能有一个根端口),用来接收根桥不断发送的BPDU。
作用:保证了交换机与根桥之间只有唯一确定且是最优的一条工作路径。
小窍门:一般和根桥相对的端口就是根端口,因为一般情况下它距离根端口最近。
比较对象:同一台交换机上的不同端口。从同一台交换机中的所有链接的端口出发,到根桥的最短路径。
比较的值:从根桥通过不同路径到达本交换机的累计总开销。

2.2)选择
对于LSW11 判断根端口,将会收到LSW9和LSW10的BPDU,此时比较LSW9和LSW10的交换机的桥ID,对接桥ID小的端口则会成为根端口,所以在下面的LSW11的g0/0/2为根端口。(箭头为BPDU的发送方向)
2025-09-09T00:49:11.png

2.3)根端口比较过程:首先比较路径上的Cost值,cost相同的话比较对端的桥ID,对端桥ID如果还相同的就比较对端的端口ID(PID),对端端口如果还相同的话(接在hub上 几乎绝迹,理论存在)就比较自己的PID(都是越小越优先。箭头为BPDU的发送方向。)。

2025-09-09T01:00:24.png

3.选举指定端口
因为一般一台交换机上可能接入多个设备,所以必须选举出一个固定的接受BPDU的端口(根端口),以及一个固定的向其他交换机发送BPDU信息的端口(指定端口),每一条链路只有一个指定端口发送BPDU信息即可,一般根桥上都是指定端口。
指定端口比较过程:先比较RPC,相同的话比较链路两端的桥ID,还相同的比较链路两边的端口ID(都是越小越优先)。
比较对象:同一个物理网段上相连的不同交换机,不看端口,从整台交换机出发。
比较的值:每台交换机声称的、从根桥到达它自己的累计总开销。

4.确立阻塞端口
我们在stp网络中确立了根端口和指定端口后,交换机上剩余的所有非根端口和指定端口都为预备端口(阻塞端口),STP会对这些预备端口进行逻辑上的阻塞,使这些端口不能转发用户数据帧,当STP拓扑网络中产生了阻塞端口后,STP网络内也就没有了环路。

STP的接口状态

禁用(Disable):该接口不能收发BPDU,也不能收发业务数据帧。(接口down)
阻塞(Blocking):该接口被STP阻塞,处于阻塞状态的接口不能发送BPDU,但会持续侦听BPDU,而且不能收发业务数据帧,也不会进行MAC地址学习。
侦听(Listening):当网络拓扑有变化时,则会进行侦听。当接口处于该状态时,STP初步认定该接口为根接口或指定接口,但接口依旧处于STP计算的过程中,此时接口可已收发BPDU,但不能收发业务数据帧,也不会进行MAC地址学习。(持续时间为15S)
学习(learning):当接口处于该状态时,会侦听业务数据帧(但不能转达业务数据帧),并且收到业务数据帧后进行MAC地址学习,(持续时间为15S)
转发(Forwarding):处于该状态的接口可以正常地收发业务数据帧,也会进行BPDU处理。接口的角色需是根接口或指定接口才能进入转发状态。
2024-03-31T13:12:56.png
2024-03-31T13:13:28.png

配置命令

[Huawei] stp mode { stp | rstp | mstp } /*交换机支持STP、RSTP和MSTP(Multiple Spanning Tree Protocol)三种生成树工作模式,默认情况工作在MSTP模式。
[Huawei] stp root primary /*配置当前设备为根桥。缺省情况下,交换机不作为任何生成树的根桥。配置后该设备优先级数值自动为0,并且不能更改设备优先级。
[Huawei] stp root secondary /*配置当前交换机为备份根桥。缺省情况下,交换机不作为任何生成树的备份根桥。配置后该设备优先级数值为4096,并且不能更改设备优先级。
[Huawei] stp priority priority /*缺省情况下,交换机的优先级取值是32768,需要设置为4096的倍数,最小为0。
[Huawei] stp pathcost-standard { dot1d-1998 | dot1t | legacy } /*配置接口路径开销计算方法。缺省情况下,路径开销值的计算方法为IEEE 802.1t(dot1t)标准方法。同一网络内所有交换机的接口路径开销应使用相同的计算方法。
[Huawei-GigabitEthernet0/0/1] stp cost cost /*设置当前接口的路径开销值。
[Huawei-intf] stp priority priority /*配置接口的优先级。缺省情况下,交换机接口的优先级取值是128。需要设置为16的倍数,最小为0。
[Huawei] stp enable

根桥发生故障时,总共恢复时常要50S.
直连线路发生故障时,总共恢复时常要30S.
非直连线路发生故障时,总共恢复时常要50S.

RSTP

对于起标准STP,RSTP有快速收敛的作用且可以破除自环功能。

RSTP的接口角色有四种:根接口,指定接口,预备接口(Alternate port 根接口发生故障时,则会快速启动变成根端口)和备份端口 Backup port 指定端口故障时,则会快速启动变成预备端口,在交换机自环时此接口会发挥作用。

边缘端口:边缘端口一般与用户终端直连,可以跳过STP计算,由Disabled状态直接转到Forwarding状态,直接节约30s。

边缘端口开启命令:

[sw1]int g0/0/3 //进入对接PC的端口
[sw1-GigabitEthernet0/0/3]stp edged-port enable //开启边缘接口

全局下开启边缘端口,一旦边缘端口接受配置,则会丧失边缘属性,变成普通STP端口,从而引起网络震荡。(虽然端口下查看状态还是edged)
[sw1]stp edged-port default

2024-03-31T13:22:06.png
2024-03-31T13:22:22.png

RSTP报文格式
其报文与标准STP大差不离,BPDU type 中的状态发生了修改,从标准stp的0x00 变更为0x02,重点使用了Flag字段。

2025-09-11T02:55:50.png

第2-3 bit中代表现在端口角色,一共有三种状态形式:
1)01:则代表为BP端口或AP端口;
2)10:则代表为RP端口;
3)11:则代表为DP端口;

第4-5 bit中代表现在端口状态,一共有三种状态形式:
1)00:如出现此比特组合,则为Discarding 堵塞状态;
2)01:如出现此比特组合,则为Learning 学习状态;
3)11:如出现此比特组合,则为forwarding 转发状态;

端口状态不同
RSTP的状态3种
不装发用户流量也不学习MAC地址,那么接口状态就是Discarding,不转发用户流量但学习MAC地址,那么接口状态就是Learning,即转发用户流量又学习MAC地址,那么接口状态就是Forwarding。
2024-03-31T13:21:41.png

配置BPDU的处理

老化或失效时间从原来的20s缩短至6s,
直连线路发生故障时,总共恢复时常要1S.
非直连线路发生故障时,总共恢复时常要1S.

2025-09-11T05:42:02.png

快速收敛机制--P/A机制
P/A机制。RSTP通过P/A机制加快了上有端口进入Forwarding的状态速度。在RSTP中,当一个端口被选举成为指定端口之后,会先进入Discarding状态,再通过P/A机制快速进入Forwarding状态。

在STP中,该端口至少要等待一个Forward Delay(Learning)时间才会进入到Forwarding状态。(30s)而RSTP引用PA机制。

P/A机制,只存在于DP端口和RP端口之间且没有进入转发状态时发生,DP端口发送P=1即propose=1,RP端口进行A=1即agreement=1,工作过程如下:

1.由DP端口发出Propose=1的BPDU(此作用为提议对端RP端口是否可以补登30S,直接进入转发状态);
2.收到P-1的BPDU的交换机将所有DP端口临时堵塞,(SYNC同步);
3.完成SYNC同步后,RP端口回应A=1的BPDU;
4.RP端口收到后进入转发状态;
5.根桥的DP端口收到后知道了下游无环,立刻进入转发状态,其他A就是给P的回应;
6.后续交换机以此类推,只要存在DP,RP端口则继续进行,直至到最后出现AP端口和DP端口结束。

P/A机制目的就是为了临时堵住DP端口,创造无环状态,摆脱计时器。

2025-09-11T07:17:58.png

MSTP
RSTP在STP基础上进行了改进,实现了网络拓扑快速收敛。但在划分VLAN的网络中运行RSTP/STP,局域网内所有的VLAN共享一棵生成树,被阻塞后的链路将不承载任何流量,无法在VLAN间实现数据流量的负载均衡,导致链路带宽利用率、设备资源利用率较低。为了弥补RSTP/STP的缺陷,IEEE于2002年发布的802.1S标准定义了MSTP(Multiple Spanning Tree Protocol,多生成树协议)。MSTP兼容STP和RSTP,通过建立多棵无环路的树,解决广播风暴并实现冗余备份。

MSTP是IEEE 802.1S中定义的生成树协议,MSTP兼容STP和RSTP,既可以快速收敛,又提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN数据的负载均衡。
MSTP可以将一个或多个VLAN映射到一个Instance(实例),再基于Instance计算生成树,映射到同一个Instance的VLAN共享同一棵生成树。所谓实例就是一组VLAN的集合。当配置了MSTP后,STP的计算不再基于VLAN,而基于实例,大大的减少了STP计算时的资源消耗。同时还能解决之前所有VLAN共用一棵树无法流量负载分担的问题。

MSTP名词介绍

MST Region(Multiple Spanning Tree Region,多生成树域),也可简称MST域。MSTP域。就是一个名称,MSTP域名需一致。其中Digest 字段中使用md5加密,Digest的字段很重要且一定要一致,如各交换机出现不同的Digest则为配置区域时实例和vlan间的对应关系不同导致。

查看域的配置信息:

 display stp region-configuration disgest 

2025-09-15T08:44:45.png

MSTI(Multiple Spanning Tree Instance,多生成树实例)MSTI使用Instance ID标识,华为设备取值为0~4094。MSTP instance 实例=vlan 集合,交换机中的实例中的vlan需要一致。MSTP instance 实例一般缩写为MSTI。一般缩写实例1为MSTI1,实例2为MSTI2.配置MSTP中。所有交换机都要创建对应的VLAN。所有的trunk都要放行对应的vlan

2025-09-15T08:44:35.png

CST(Common Spanning Tree,公共生成树)是连接交换网络内所有MST域的一棵生成树。如果把每个MST域看作是一个节点,CST就是这些节点通过生成树协议计算生成的一棵生成树。
2025-09-15T08:44:23.png

IST(Internal Spanning Tree,内部生成树)是各MST域内的一棵生成树。IST是一个特殊的MSTI,MSTI的Instance ID为0实例0的转发根据标准生成树标准进行选举。
2025-09-15T08:45:34.png

CIST(Common and Internal Spanning Tree,公共和内部生成树)通过生成树协议计算生成的,连接一个交换网络内所有交换设备的单生成树。
2025-09-15T08:48:32.png

stp mode mstp
stp region-configuration
region-name xxx
instance 1 vlan x
instance 2 vlan y
revions-level 1(默认开启且为1)
active region-configuration //激活配置区域,方可显示区域内的配置信息,配置好后可以将上述的配置复制粘贴到其他交换机中,确保全部执行相同的配置。

LSW1中配置

stp instance 1 priority 0 //设置instance 1 及 vlan x的优先级,则全网的vlan x会从这个instance 1 的接口优先通过
stp instance 2 priority 4096 //设置instance 2 及 vlan y的次优先级

LSW2中配置
stp instance 2 priority 0 //设置instance 2 及 vlan y的优先级,则全网的vlan y会从这个instance 2 的接口优先通过
stp instance 1 priority 4096 //设置instance 1 及 vlan x的次优先级

LSW3中配置
display stp instance 1 brief
display stp instance 2 brief

总结

一个开启STP协议的非根桥交换机,端口会有三种可能性:根端口,指定端口及阻塞端口。先通过桥ID确立根桥,因为根桥上的端口均为指定端口。一条链路中有一个指定接口,那么对端为根接口。因为根端口一般为与根桥直连的端口,因为根路径开销最短。当确立非根交换机的根端口后,则可以确定剩下的的端口为根接口或阻塞端口。因为非根交换机只有一个根端口且链路中也只有一个指定端口。当根路径开销及对端桥ID比较出最优的则是指定端口,另外一个将变成阻塞端口。如下面例子:
开启STP后,当出现环路,各交换机会发送BPDU,比较各交换机的桥ID,越小越优,由于各交换机的优先级相同,那么比较MAC地址,可看出LSW2的MAC地址最小,那么LSW2的为这个STP环境中的根桥。
2024-03-28T03:44:33.png
确定好根桥,LSW1,LSW3,LSW4的上各接口到根桥的根路径花销中LSW1的G0/0/1和LSW2G的0/0/1是最小,由于对端为指定端口,一个非交换机只有一个根端口且一条链路中只有一个指定端口,所以LSW1的G0/0/1和LSW3的G0/0/1为根端口。当确定根端口后则确定指定端口,即LSW1的G0/0/2和LSW3的GG0/0/2。
2024-03-28T03:55:24.png
2024-03-28T05:51:10.png

因为非根交换机有一个根端口,所以LSW4要在两个接口中选举根端口,由于G0/0/1和G0/0/2的跟路径开销相同,那么则比较对端桥ID,由于LSW3的桥ID比LSW1的桥ID小,则LSW4的G0/0/1口为根端口。由于选出最后的根端口,则G0/0/2为阻塞端口。
2024-03-28T06:01:30.png

此处实验的阻塞端口有多个。
2024-03-29T02:51:45.png
各接口显示如下:
2024-03-29T03:23:55.png
2024-03-29T03:24:10.png
2024-03-29T03:24:25.png
2024-03-29T03:24:34.png

如将根桥中的两根线中做链路聚合。现在由于链路聚合是将多根网线聚合成一根逻辑链路。所以Eth-trunk1为一条链路,则不存在上述LSW2的G0/0/2及G0/0/3的端口状态。
2024-03-29T03:31:40.png

各接口显示如下:
2024-03-29T03:32:05.png
2024-03-29T03:32:23.png
2024-03-29T03:32:38.png
2024-03-29T03:34:46.png

Responses