4-6 生成树协议STP
STP在现在使用已经不多,现在的虚拟化、堆叠等技术已经能够很好地解决环路问题
生成树的技术背景
如图所示
- 交换机单链路上行,存在单点故障,线路和设备都不具备冗余性
- 任何一条链路或者设备故障,网络将面临断网

为解决上述单点故障问题,引入冗余设计,如环形的冗余架构设计

冗余拓扑能够解决单点故障问题,但是冗余拓扑带来了二层环路问题
实际网络环境中,经常产生二层环路从而引发网络故障如广播风暴
思考:为什么二层不参考三层一样使用TTL=255(最多传输255跳)来解决广播风暴
解答:
- 早期的二层设备处理性能相当有限,二层中引入较为复杂的机制,设备性能扛不住,因此二层没有TTL字段,会一直无限传输下去
- 技术发展到现在,解决二层环路的技术当中,很多就是参考三层
二层环路问题
广播风暴
交换机会将收到的广播帧从除接收端口之外的所有其他活动端口(即那些处于开启状态且不属于被禁止广播的端口)复制并发送出去。这样,同一广播域内的所有连接到交换机的设备都有机会接收到这个广播帧。
网络中若存在二层环路,一旦出现广播数据帧,这些数据帧将被交换机不断泛洪,造成广播风暴
广播风暴对网络危害非常大,将严重消耗设备CPU资源及网络带宽,需要格外注意
广播风暴现象:网络慢、交换机所有指示灯高速闪烁、CPU使用率高、CLI卡顿

MAC表震荡
- PC发送数据帧给Server
- SW3没有目的MAC表项,于是将数据帧进行泛洪
- SW1和SW2都收到这个帧并学习源MAC,同时将数据帧进一步泛洪
- SW3将从 GE0/0/1 和GE0/0/2都收到这个帧并学习源MAC,更新MAC地址表

或如下图所示,这是交换机 B 的帧交换表,这是其各接口的接口号。为了简单起见,假设各主机的名称也可作为其MAC地址。
- 当交换机 B 收到主机 H1 发送的广播帧后,进行登记工作,将帧的源 MAC 地址 H1 和帧进入交换机 B 的接口号一登记到帧交换表中,这条记录是正确的。
- 当交换机 B 再次收到交换机 C 转发来的该广播帧后,进行登记工作,将帧的源 MAC 地址 H1 和帧进入交换机 B 的接口号2 这条错误记录登记到帧交换表中,并删除原先正确的记录。
- 当交换机 B 再次收到交换机 A 转发来的该广播帧后,进行登记工作,将帧的源 MAC 地址 H1 和帧进入交换机 B 的接口号3 这条错误记录登记到帧交换表中,并删除原先错误的记录。
- 当交换机 B 再次收到交换机 C 转发来的该广播帧后,进行登记工作,将帧的原 MAC 地址 H1 和帧进入交换机 B 的接口号2 这条错误记录登记到帧交换表中,并删除原先错误的记录。

很显然,有关 MAC 地址 H1 的记录将在这两个错误记录之间反复震荡。
复杂的冗余性网络环境存在更多的物理二层环路
如下图所示,更为复杂的网络环境中,二层环路就更多了

STP
STP简介
采用生成树(Spanning-tree)技术,能够在网络中存在二层环路时通过逻辑阻塞(Block)特定端口,从而打破环路,并且在网络出现拓扑变更时及时收敛(即再及时打开特定接口),保障网络冗余性
如下图所示,当有环路时,逻辑阻塞SW3的某个接口

当网络出现故障时,再打开前面逻辑阻塞的SW3的该接口,保证网络的冗余性

STP的基本概念
桥ID(Bridge ID)
- 桥ID一共8个字节,由2个字节优先级和6个字节的MAC地址构成
- 桥优先级默认为 32768,可以手工修改
- MAC地址为交换机背板MAC

路径开销(Path Cost)
- 路径开销是一个端口量,是STP/RSTP协议用于选择链路的参考值。
- 端口路径开销的默认值及取值范围由选定的路径开销算法决定,路径开销与端口带宽成反比。
- 华为设备路径开销标准有:802.1d-1998、802.1t及私有的legacy,默认为802.1t标准。考试考察802.1d标准如下图红色字体标注

STP的操作(考点)
- 确定一个根桥(Root Bridge)【选优先级和MAC地址最小的桥】
- 每个交换机都有一个优先级,若该交换机优先级最小,则作为根桥
- 若两个交换机优先级相同,则选择MAC地址最小的作为根桥
- 确定其他网桥的根端口(Root Port)【非根桥的端口到根桥最近的端口】
- 其他非根交换机上,到达根桥最近的端口作为其他交换机的根端口
- 每个段选择一个指定端口(Designated Port)【先比较开销,开销相同时比较桥ID】
- 先比较开销,开销相同时比较桥ID,最后比较端口号决胜
- 选出非指定端口(NonDesignated Port):非指定端口将会被阻塞掉
关于指定桥的选举详细:
在STP(Spanning Tree Protocol)协议中,选择指定端口的过程遵循以下步骤和原则:
选举根桥:
- 首先,网络中所有运行STP的交换机会通过发送和接收BPDU(Bridge Protocol Data Units)来比较各自的桥ID(Bridge Identifier)。桥ID由两部分组成:桥优先级(Bridge Priority,一个可配置的16位数值,默认为32768)和交换机的MAC地址。具有最低桥ID的交换机将成为根桥。
确定根路径成本(Root Path Cost):
- 每个交换机根据其各个端口到根桥的路径成本(Cost,通常基于端口带宽)计算出到达根桥的最短路径。路径成本反映了端口的带宽,带宽越高,路径成本越低。在计算过程中,交换机会累加从本交换机到根桥经过的所有端口的成本。
选举指定端口:
- 在每一个物理网络段(即共享同一广播域的多个端口之间)上,STP会选举一个指定端口。选举原则如下:
- 最低路径成本:在同一网络段上,所有连接到该段的交换机端口中,选择通往根桥路径成本最低的端口作为指定端口。
- 最低发送者BID(如有必要):如果多个端口到根桥的路径成本相同,则进一步比较这些端口最近接收到的BPDU中发送者的桥ID。选择发送者BID(即发送BPDU的交换机的桥ID)最低的端口作为指定端口。
- 最低端口号(最后的决胜条件):如果路径成本和发送者BID均相同,将依据端口号(较低端口号优先)来决定指定端口。
当选定的端口成为指定端口后,它将进入转发状态,允许用户数据流通过。而该网络段上的其他端口则被视为非指定端口(Backup Ports),它们会被置为阻塞状态,避免形成环路。
总结来说,STP协议选择指定端口时,首先确保网络已选举出根桥,然后在每个物理网络段上,各交换机端口基于到根桥的最低路径成本、最低发送者BID(在成本相同的情况下)以及最低端口号(作为最后的决胜条件)来进行选举。当选定的端口满足这些条件时,它就被确定为该网络段的指定端口,负责转发该段的数据流量。

交换机的生成树协议STP-生成树算法STA(详细并以此为准)
以下来自【计算机网络第09讲-交换机的生成树协议STP-生成树算法STA(计算机网络简明教程及仿真实验)】
生成树算法STA(Spanning Tree Algorithm)是生成树协议STP(Spanning Tree Protocol)的核心。它的实现目标是:在包含有物理环路的网络中,构建出一个能够连通全网各节点的树型无环逻辑拓扑。
生成树算法的三个步骤:
- 选举根交换机
- 选举跟端口
- 选举指定端口并阻塞备用端口
注意:这里所谓的“选举”,是通过网络中各个交换机相互发送生成树协议专用的数据帧BPDU来实现的。交换机合适发送BPDU,BPDU中又包含着什么信息,我们暂时不管,这有助于理解生成树算法的三个步骤。
选举根交换机
- 根交换机的选举条件:网桥ID(BID)最小者当选
- 网桥ID由以下两部分组成:
- 优先级:
- 范围:0~61440
- 步长:4096(即以4096为单位增加或减少)
- 默认值:32768(网络管理员也可以在有效范围内自行设置网桥的优先级,网桥的优先级取值越小则优先级越高)
- 交换机的基本MAC地址:交换机除了每个端口自己的MAC地址之外,还有一个基本的MAC地址,也就是VLAN 1 的MAC地址
- 优先级:
- 网桥ID的比较方法:
- 优先级取值越小,则网桥ID(BID)就越小。
- 若优先级相同,则比较MAC地址,从MAC地址的左侧开始依次比较,数值小的,则网桥ID(BID)就小。
如下图所示,按照上述方法选举出了根交换机A

选举根端口
根端口是针对非根交换机而言的,在每一个非根交换机上选出一个根端口RP(Root Port),并且只能是1个
根端口RP用于接收根交换机发来的BPDU也用来转发普通流量
根端口的选举条件:
BPDU接收端口到根交换机的路径成本最小。下表是IEEE 802.1d规范中给出的链路带宽及其对应的路径成本值
链路带宽 成本值 4 Mb/s 250 10 Mb/s 100 16 Mb/s 62 100 Mb/s 19 1 Gb/s 4 10 Gb/s 2
当端口到根交换机的路径成本相同时,比较对端网桥ID(BID)最小。如本例中交换机D上方2个端口G0/1和G0/2到达根交换机路径成本相同,但G0/2的对端交换机C的网桥ID更小,因此D的G0/2端口应当确定为根端口。
当端口的对端网桥ID也相同时,比较对端的端口ID(PID)最小。
- 端口ID(PID)由2部分构成
- 优先级:
- 范围:0~240
- 步长:16
- 默认值:128
- 端口号
- 优先级:
- 端口ID(PID)的比较方法:
- 先比较优先级,优先级越小则端口ID越小
- 优先级相同时比较端口号,端口号越小则端口ID越小
- 端口ID(PID)由2部分构成
如本例中交换机E上方的2个端口Fa0/1和Fa0/2到达根交换机路径成本相同,二者的对端都是交换机D,则对端网桥ID也相同,但是E的Fa0/1的对端的端口为ID更小(优先级相同,比较端口号)
本例中使用100Mb/s和1Gb/s这两种链路带宽,其路径成本标注如下:

选举出交换机D的根端口标注如下图所示

选举出交换机E的根端口标注如下图所示

到此为止,所有非根交换机上的根端口就选举完成
选举指定端口并阻塞备用端口
- 在每一个网段上选出一个指定端口DP(Designated Port)并且只能是一个
- 指定端口DP用于转发根交换机发来的BPDU也用来转发普通流量
- 指定端口的选举条件
- 根交换机的所有端口都是指定端口,如本例选举根交换机A的G0/1和G0/2
- 根端口的对端端口一定是指定端口,如本例选举交换机C的G0/3和交换机D的Fa0/1
- BPDU转发端口到根交换机的路径成本最小,如本例选举交换机D的Fa0/2作为指定端口
- 本端的网桥ID(BID)最小,如本例选举交换机C的G0/2作为指定端口
- 剩余的端口成为备用端口AP(Alternate Port),将它们阻塞
本例中,根端口选举完成后结果如下图

根据根交换机的所有端口和根端口的对端端口能够确定的指定端口如下图所示

现在还剩3个网段,无法按照前面2种条件确定指定端口,下图曲线标注

如对D的Fa0/2到E的Fa0/2之间端口选举应当依据路径成本
- 根交换机A到D的Fa0/2端口的路径成本为:4 + 4 = 8

- 根交换机A到E的Fa0/2端口的路径成本为:4 + 4 + 19= 27

因此D的Fa0/2端口为指定端口,其他选举出B的G0/3和C的0/3作为指定端口与上述类似。
但是B的G0/2到C的G0/2这个网段,两个端口到根交换机的路径开销相同,则需要比较本端的网桥ID即比较交换机B和交换机C的BID,显然C的BID更小,如下图,选举C的G0/2作为指定端口

至此,根交换机、根端口、指定端口就都已经选举完成,阻塞其他备用端口,如下图所示

将备用端口阻塞,即可形成联通全网的、逻辑上无环的树形拓扑

三个选举过程的对比小结

STP的详细操作
确定一个根桥(Root Bridge)
每个广播域选择一个根桥(Root Bridge):选择BridgeID最小的交换机作为根交换机
下图三个交换机优先级相同,则选择MAC地址最小的SW1作为根交换机

确定其他网桥的根端口(Root Port)
每个非根桥上选择一个根端口(Root Port)
根端口:具有最低根路径的接口(即到根交换机开销最小的端口)。如果交换机上有多个端口拥有相同的根路径开销,则进一步比较接口上收到BPDU的优劣
下图中,对SW3,到达根交换机有2条路径
- 直接直连到达根交换机,开销为100(10M)
- 通过SW2到达根交换机,开销为119(10M + 100M)
因此根端口为图中SW3黄色标注端口

关于BPDU
STP协议中,BPDU(Bridge Protocol Data Unit)是指桥协议数据单元,它是生成树协议(Spanning Tree Protocol)用于交换机之间进行通信和维护网络拓扑稳定性的特殊数据包。BPDU承载着生成树算法所需的关键信息,使得参与STP的交换机能够协同工作,共同构建一个无环路的逻辑网络拓扑,并在出现拓扑变化时快速收敛。
每个段选择一个指定端口(Designated Port)
每个段选择一个指定端口(Designated Port)
指定端口:具有最低根路径的接口。如果一个链路上有多个端口具有相同的到跟的开销,则进一步比较接口上收到的BPDU优劣。详细如下:
在STP(Spanning Tree Protocol)协议中,选择指定端口的过程遵循以下步骤和原则:
选举根桥:
- 首先,网络中所有运行STP的交换机会通过发送和接收BPDU(Bridge Protocol Data Units)来比较各自的桥ID(Bridge Identifier)。桥ID由两部分组成:桥优先级(Bridge Priority,一个可配置的16位数值,默认为32768)和交换机的MAC地址。具有最低桥ID的交换机将成为根桥。
确定根路径成本(Root Path Cost):
- 每个交换机根据其各个端口到根桥的路径成本(Cost,通常基于端口带宽)计算出到达根桥的最短路径。路径成本反映了端口的带宽,带宽越高,路径成本越低。在计算过程中,交换机会累加从本交换机到根桥经过的所有端口的成本。
选举指定端口(注意注意):
- 在每一个物理网络段(即共享同一广播域的多个端口之间)上,STP会选举一个指定端口。选举原则如下:
- 最低路径成本:在同一网络段上,所有连接到该段的交换机端口中,选择通往根桥路径成本最低的端口作为指定端口。
- 最低发送者BID(如有必要):如果多个端口到根桥的路径成本相同,则进一步比较这些端口最近接收到的BPDU中发送者的桥ID。选择发送者BID(即发送BPDU的交换机的桥ID)最低的端口作为指定端口。
- 最低端口号(最后的决胜条件):如果路径成本和发送者BID均相同,将依据端口号(较低端口号优先)来决定指定端口。
- 在每一个物理网络段(即共享同一广播域的多个端口之间)上,STP会选举一个指定端口。选举原则如下:
当选定的端口成为指定端口后,它将进入转发状态,允许用户数据流通过。而该网络段上的其他端口则被视为非指定端口(Backup Ports),它们会被置为阻塞状态,避免形成环路。
总结来说,STP协议选择指定端口时,首先确保网络已选举出根桥,然后在每个物理网络段上,各交换机端口基于到根桥的最低路径成本、最低发送者BID(在成本相同的情况下)以及最低端口号(作为最后的决胜条件)来进行选举。当选定的端口满足这些条件时,它就被确定为该网络段的指定端口,负责转发该段的数据流量。
参照上述方法,我们在本例中指定端口的选择如下:
根桥的端口都为指定端口
所有的段都要选择一个指定端口
下图中100M的段和左下方10M的段已经由上一步选出了指定端口
右下方的段:
SW2这一端,到达根桥的最小开销为200(10M + 10M)
SW3这一端,到达根桥的最小开销为119(10M + 100M)
因此右下方的段,选择开销较小的SW2这一端作为指定端口

选出非指定端口(NonDesignated Port)
选出非指定端口(NonDesignated Port),将其阻塞

STP案例分析
案例分析1

- 确定一个根桥(Root Bridge)【选优先级和MAC地址最小的桥】
- SW1为根桥
- 确定其他网桥的根端口(Root Port)【非根桥的端口到根桥最近的端口】
- 其他非根交换机上,到达根桥最近的端口作为其他交换机的根端口
- 每个段选择一个指定端口(Designated Port)【先比较开销,开销相同时比较桥ID】
- 下方这一段中,左右两端到根桥的开销相同,因此需要比较桥ID
- SW2和SW3的优先级也相同,但是SW2的MAC地址更小,因此SW2优势
- 因此对该段来说,左边的端口为指定端口
- 选出非指定端口(NonDesignated Port):非指定端口将会被阻塞掉

案例分析2

结果如下:

案例分析3
假定几段链路开销相同

结果如下:

几种生成树协议
| 协议名称 | 所在标准 | 详细 |
|---|---|---|
| 生成树协议 | 802.1d | STP(拓扑收敛需要30-50s) |
| 快速生成树协议 | 802.1w | RSTP(6s内完成收敛) |
| 多生成树协议 | 802.1s | MSTP(实现多个VLAN负载均衡) |
例题


解析:
- 按照STP选举根端口的过程,根据路径成本确定92的根端口为连接网段b的端口
- 笔者注:图中拓扑应该不是交换式以太网,图中各个网段明显为总线型以太网,标注网桥ID的网络设备应当是集线器