STP生成树协议

STP生成树协议
[TOC]
初认知
根桥的选举(树根)
BID
BID 是 Bridge ID( 网桥标识符 )的缩写,它是 STP(生成树协议)选举 根桥 时的核心依据
你可以把它理解为“交换机在 STP 世界里的身份证”
BID 由两部分组成:
BID = 桥优先级(Bridge Priority) + MAC 地址
-
桥优先级:16 位(2 字节),默认值是 32768
-
MAC 地址:48 位(6 字节),是交换机的背板 MAC(不是某个接口的 MAC)
✅ 总长度:64 位(8 字节)
例如:
-
交换机
MAC是 00e0-fc12-3456我们通常用两个
-来区分 -
默认优先级是
32768范围0-65535 ,步长是
4096 -
那么它的
BID就是:32768.00e0-fc12-3456
🔍 BID 用来干什么???
STP(生成树) 通过比较所有交换机的 BID,选出最小的那个作为“根桥”(Root Bridge)
🏆 根桥 选举规则:(树根)
-
比较 Bridge Priority(优先级) 数值越小越优
-
如果优先级相同 → 比较 MAC 地址
MAC地址越小越优
根端口(R)的选举
🍔距离 树根 最近的端口,除 根桥 外,每个交换机都要有一个 根端口 ,有且只有一个
- 若 相同 则比较下一个,若不同则直接得出结论
①比较根路径开销
(从根桥到交换机)

-
根路径开销低的为根端口
-
从
根桥出发到交换机的端口进去才是端口的 根路径开销
这里
LSW4为根桥LSW1的GE0/0/4的
根路径开销是2万LSW1的GE0/0/1的
根路径开销是4万
路径开销

上图这样的端口的
路径开销设置特别容易弄混所以建议两端的端口的路径开销一致
②比较上行设备BID

-
BID = 优先级 + MAC地址
(优先级默认等于32768 ,范围0-65535 ,步长是4096)
比如LSW8是根网桥(树根)
则LSW6到根网桥的根路径开销(①)相同,我们就要比较②了
上行设备BID
其实就是与端口连接的设备,比较他们的BID
③比较上行设备PID
-
PID = 端口优先级 + 端口标识
端口优先级默认等于128,端口优先级的范围0-240,步长为16 -
端口标识是e0/0/1之类的号码(e0/0/1比e0/0/2的端口标识小)
-
先比较 端口优先级 ,低的入选
-
若端口优先级相同再比较 端口标识 ,低的入选

LSW10是根网桥,那么
E0/0/1和E0/0/2哪个是根端口呢??
很显然,①路径开销和②对应端口的上行设备的BID都相同
则需要比较
与之对应端口(上行设备)的PID(端口ID)一般端口的优先级是相同的,只要比较端口标识就行了
看的是
LSW10端口的PID则在
LSW9中 E0/0/1 为根端口
④比较自己的PID

这个的①②③都是一样的,所以只有比较自己端口的PID
指定端口(D)的选举
-
❤️每个
主干链路上一定要选举一个 指定端口 ,且只有一个根端口(R)不参与选举 根桥 上的端口全为
指定端口

若第一个相同则比较下一个,若不同则直接得出结论
-
①比较根路径开销(从各自当前交换机的 根端口(R) 到 根桥 )低的获选
把一条链路劈开,两个端口,自然是从这两个端口上选,比较根路径开销
-
②比较各自本交换机的BID
如果根路径开销相同的时候,则比较各自端口所在的交换机的BID
-
③比较各自的本端口的PID
当①②都相同的时候,就比较自己端口的PID
阻塞端口(A)
把
根端口和指定端口选出来后,剩下的就是阻塞端口
- 既不是 根端口 也不是 指定端口 的端口
基础命令
<Huawei><Huawei>sysEnter system view, return user view with Ctrl+Z.[Huawei]sys SW1
1.生成树的类型[SW1]stp mode ? mstp Multiple Spanning Tree Protocol (MSTP) mode rstp Rapid Spanning Tree Protocol (RSTP) mode stp Spanning Tree Protocol (STP) mode# 生成树的类型,我们后面的实验都是以stp为准# 所以我们需要手动修改为stp[SW1]stp mode stpInfo: This operation may take a few seconds. Please wait for a moment...done.'一定要强制修改为STP模式'
2.手动指定根桥优先级[SW1]stp root ? primary Primary root switch #primary是主根桥 secondary Secondary root switch #secondary是副根桥'也可以直接修改优先级为多少 stp priority 4096'stp root primary 根网桥(前面两个字节优先级就为0)stp root secondary 副网桥 (前面两个字节优先级就为4096)
3.显示stp的整体运行状态[SW1]dis stp-------[CIST Global Info][Mode STP]-------CIST Bridge :32768.4c1f-cc29-1345'这个就是根桥的BID'Config Times :Hello 2s MaxAge 20s FwDly 15s MaxHop 20Active Times :Hello 2s MaxAge 20s FwDly 15s MaxHop 20...............
4.查看端口的角色[LSW4]dis stp briMSTID Port Role STP State Protection0 Ethernet0/0/1 ALTE DISCARDING NONE'ALTE备份端口'0 Ethernet0/0/3 ALTE DISCARDING NONE0 Ethernet0/0/9 DESI FORWARDING NONE'DESI指定端口'0 G...rnet0/0/1 ALTE DISCARDING NONE0 G...rnet0/0/2 ROOT FORWARDING NONE'ROOT根端口'
- 相同的实验,不同的根桥 ,不同的端口
综合实验

关闭生成树协议,体验mac地址表的震荡!
<Huawei>sysEnter system view, return user view with Ctrl+Z.[Huawei]sys SW1[SW1]stp disableWarning: The global STP state will be changed. Continue? [Y/N]Y# 输入Y确定!Info: This operation may take a few seconds. Please wait for a moment...done.'SW2,和SW3类似,三台设备都要进行关闭生成树协议'# 别忘记配PC机的IP地址和子网掩码# 接着测试PC1和PC2的连通性!PC>ping 10.0.0.2Ping 10.0.0.2: 32 data bytes, Press Ctrl_C to breakRequest timeout!......Request timeout!'自然是ping不通的,请求超时'# 我们来进行抓包看一下
现象:广播风暴,一直再问mac地址
# 我们也来看一下,SW3的mac地址表( dis mac-address )5489-985c-6841 #他就是PC1的mac地址5489-98b7-1fed #他是PC2的mac地址[SW3]dis mac-addressMAC address table of slot 0:---------------------5489-985c-6841 1 - - GE0/0/1 dynamic 0/-5489-98b7-1fed 1 - - GE0/0/2 dynamic 0/----------------------Total matching items on slot 0 displayed = 2'再来简单查看几次,一直在震荡!!!''主要变的是接口地址,一直在变化'---------------------5489-985c-6841 1 - - GE0/0/2 dynamic 0/-5489-98b7-1fed 1 - - GE0/0/4 dynamic 0/----------------------5489-985c-6841 1 - - GE0/0/2 dynamic 0/-5489-98b7-1fed 1 - - GE0/0/2 dynamic 0/----------------------5489-985c-6841 1 - - GE0/0/1 dynamic 0/-5489-98b7-1fed 1 - - GE0/0/4 dynamic 0/----------------------'当我们开始stp功能后,一切就都恢复正常了'[SW1]stp enableWarning: The global STP state will be changed. Continue? [Y/N]Y# Y确认Info: This operation may take a few seconds. Please wait for a moment...done.
- SW1

- SW2

- SW3

- SW4

STP的缺点
STP 为什么慢,因为依靠计时器完成计算!
STP 的3种的计时器
-
hello时间:端口发送的BPDU报文的时间间隔:默认是 2秒-
转发延迟(forward delay):
-
侦听—学习:15秒
-
学习—转发:15秒
-
阻塞(接收,但不转发,等待(根网桥)发的BPDU)
阻塞端口发现等不到根的BPDU(老化时间20秒),就从阻塞—>监听—>学习—>转发(30秒)
-
-
-
最大老化时间(Max Age)(这个时间可以自己设置)一个端口最大的“没有接收BPDU”的时间间隔:20秒
-
STP的最大收敛时间:30秒~50秒根交换机故障:STP的收敛时间约50秒 链路故障:STP的收敛时间约30~50秒
STP收敛速度慢:30秒~50秒,导致网络中断时间过长
故障案例
直接故障

- 存在AP端口(阻塞端口)的非根交换机出现RP的直连链路故障时
(图中SW3的RP所在链路故障)在经历阻塞—>监听—>学习—>转发(30秒),AP 成为新的 RP,故障恢复
❤️RP链路直接故障,不需要等待20秒的老化时间
SW3的 RP 失效,但 AP 收到的一直都是最优的,AP也不用经历老化时间,被选举为新的RP
-
不存在AP端口的非根交换机出现RP的直连链路故障时
(图中SW2的RP所在链路故障)
-
该交换机(SW2),连续 20 秒(Max Age) 没有收到更优的 BPDU
同时 SW3 的 AP端口 也收不到最优BPDU,它也要等待20s的最大老化时间
-
SW2以为根网桥挂了,认为自己可以当老大了,会发送以自己为根的BPDU
同时 SW3 等了20s后,仍未收到根交换机的BPDU,AP端口在经历阻塞—>监听—>学习—>转发(30秒)
此时 SW3 的 AP(阻塞端口) 变为 DP(指定端口) 同时处理 SW2 自以为是的BPDU
并转发通过其他路径(SW3的RP端口)传来更优BPDU给SW2
SW2 收到更优 BPDU 后,会撤销自己“当老大”的想法,重新选举,恢复正确拓扑
这种故障类型恢复需要50s
根交换机故障

-
当根桥发生故障时,SWB 和 SWC 都会经历一个20s的老化时间,在此之后仍然没有收到最优的BPDU,则它们会认为根交换机失效,此时会发送以自己为
根交换机的BPDU -
当两台交换机开始交互彼此的BPDU报文时,不管选举的结果如何,一定是一个为
RP,一个为DP都要经历从listening----->learning----->fowarding的状态,经历30s的时间
故这种故障类型恢复需要也需要50s
间接故障

存在 AP端口 的交换机出现RP的间接故障后
RP的BPDU老化需要20秒,AP成为新的RP需要30秒,50s故障恢复
❤️如果是RP直接故障,不需要等待20秒的老化时间
不存在AP端口的交换机出现RP的间接故障,这个也同理,需要50s故障恢复
解决方案:RSTP
快速生成树
STP端口状态
-
Disabled(端口没有启用)(就是用shoutdown关闭了) 此状态下端口不转发数据帧,不学习MAC地址表,不参与生成树计算
-
Blocking(阻塞状态) 此状态下端口不转发数据帧,不学习MAC地址表,此状态下端口
只接收并处理BPDU处理的是原根桥的BPDU,如果是邻居的BPDU需要老化时间,但是不转发BPDU
-
Listening(侦听状态) 此状态下端口不转发数据帧,不学习MAC地址表, 只参与生成树计算,接收并发送BPDU
-
Learning(学习状态) 此状态下端口
不转发数据帧,但是学习MAC地址表,参与计算生成树,接收并发送BPDU -
Forwarding(转发状态) 此状态下端口正常转发数据帧,学习MAC地址表,参与计算生成树,接收并发送BPDU
RSTP端口状态
接下来就是 RSTP 的端口状态: 端口状态的重新划分
- 如果不转发用户流量也不学习MAC地址,那么端口状态就是
Discarding状态 - 如果不转发用户流量但是学习MAC地址,那么端口状态就是
Learning状态 - 如果既转发用户流量又学习MAC地址,那么端口状态就是
Forwarding状态
对比表
| STP端口状态 | RSTP端口状态 | 端口在拓扑中的角色 |
|---|---|---|
| Disabled | Discarding | 包括Disable |
| Blocking | Discarding | 包括Alternate端口、Backup端口 |
| Listening | Discarding | 包括根端口、指定端口 |
| Learning | Learning | 包括根端口、指定端口 |
| Forwarding | Forwarding | 包括根端口、指定端口 |
| 功能 | STP | RSTP |
|---|---|---|
| 端口状态数量 | 5 种 | 3 种(更简洁) |
| 收敛速度 | 慢(30~50 秒) | 快(通常 < 1 秒) |
| 端口角色 | 无明确角色区分 | 明确区分(根/指定/Alternate/Backup) |
| 链路类型感知 | 否 | 是(点到点 / 共享) |
端口角色

以前(STP),RP,DP都是由
AP来备份的而现(RSTP)在就不用了;AP备份RP,BP备份DP
根端口/指定端口快速切换
【Alternate-替代】端口---->根端口R故障,直接启用替代端口
【Backup-备份】端口---->指定端口D,直接启用备份端口
边缘端口

有些特殊情况,我们已经知道这个端口不能连其他交换机了,就把他的BPDU功能给关了,而他又偏偏出现了BPDU;🙉可能出现了安全隐患
边缘端口【Edge Port】
-
不再与交换设备连接,只与终端设备直连,这种接口设置为 边缘端口
-
边缘端口不参与RSTP计算,由Discarding直接进入Forwarding状态
-
注(如果没有开启保护):边缘端口接入交换设备收到配置BPDU,丧失边缘端口属性,成为普通STP端口,重新计算生成树,导致网络震荡
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!



