2.8 、 STP 的计算过程
2.8.1 、根桥
![](https://i-blog.csdnimg.cn/direct/4a9b8551e2d843199d810826dade9957.png)
2.8.2 、根端口( RP - root port)
2.1、非根桥交换机去往根桥最近的接口
(非根桥交换机,每一个接口累加计算开销,计算开销最小的接口就是根接口)
RP端口就是接收最好BPDU的接口;
每一个非根交换机只有一个根端口。
2.8.3 、指定端口( DP - destination port)
3.1、DP端口就是发送最好BPDU的接口
根桥的端口都是DP端口。
3.2、就是链路上去往根桥最近的接口
2.8.4 、阻塞端口
没有成为DP且没有成为RP的端口就是阻塞端口;
被阻塞的接口不能转发数据,逻辑上是down的;
阻塞端口只能接收BPDU,不能发送BPDU。
2.9 、 STP 的端口状态过程
|-----------------|--------------|----------|---------|
| 1、禁用 Disable | 不收发BPDU | 不学习MAC地址 | 不转发业务数据 |
| 2、阻塞 Blocking | 收BPDU、不发BPDU | 不学习MAC地址 | 不转发业务数据 |
| 3、侦听 Listening | 收发BPDU | 不学习MAC地址 | 不转发业务数据 |
| 4、学习 Learning | 收发BPDU | 学习MAC地址 | 不转发业务数据 |
| 5、转发 Forwarding | 收发BPDU | 学习MAC地址 | 转发业务数据 |
|-----------------|------------------|--------------------|
| 1、禁用 Disable | | |
| 2、阻塞 Blocking | | |
| 3、侦听 Listening | 就是进行端口角色的选举 | 需要等待一个转发延迟的时间(15s) |
| 4、学习 Learning | 就是防止大量未知单播数据帧的泛洪 | 需要等待一个转发延迟的时间(15s) |
| 5、转发 Forwarding | | |
++因为++ ++listening++ ++和++ ++learning++ ++状态等待的转发延迟时间,所以在设备联通的状态下,需要等待++ ++30s++ ++时间网络才可用。++
例:
1、PC1访问PC3,发出报文后,L1、L2、L3交换机将进行泛洪操作。
![](https://i-blog.csdnimg.cn/direct/02bf833fba224cab887f1dbf24292a7c.png)
2、假设L3交换机已经学习到了PC3的MAC地址,则L3交换机不需要再向外进行泛洪操作。
![](https://i-blog.csdnimg.cn/direct/9b7802646c5844ec881845fa03f39f0f.png)
3、在实际情况中,L3可能连接了其它交换机和PC。如果没有listening和learning状态,PC3将继续大量泛洪造成浪费。
![](https://i-blog.csdnimg.cn/direct/96019b91483c42e8927da87609081740.png)
2.10 、 STP 的接口状态迁移
1 **、**接口初始化或激活,自动进入阻塞状态
2 **、**接口被选举为根接口或指定接口,自动进入侦听状态
3 **、**转发延迟计时器超时且接口依然为根接口或指定接口
4 **、**接口不再是根接口或指定接口或指定状态
5 **、**接口被禁用或者链路失效
![](https://i-blog.csdnimg.cn/direct/fc47f46977aa418183b9931e2245e8e2.png)
图中所示为STP的端口状态迁移机制,运行STP协议的设备上端口状态有5种:
Forwarding:转发状态。端口既可转发用户流量也可转发BPDU报文,只有根端口或指定端口才能进入Forwarding状态。
Learning:学习状态。端口可根据收到的用户流量构建MAC地址表,但不转发用户流量。增加Learning状态是为了防止临时环路。
Listening:侦听状态。端口可以转发BPDU报文,但不能转发用户流量。
Blocking:阻塞状态。端口仅仅能接收并处理BPDU,不能转发BPDU,也不能转发用户流量。此状态是预备端口的最终状态。
Disabled:禁用状态。端口既不处理和转发BPDU报文,也不转发用户流量。
2.11 、 STP 故障
2.11.1 、直连故障
A1 、非 AP 端口直连故障( DP 、 RP 端口失效):需要 30s 的收敛时间。
例子: S2-S1 的直连端口( RP 和 AP )失效
![](https://i-blog.csdnimg.cn/direct/01f6e9b9a1da47d1b591000243f51f8b.png)
故障发生:
S2的端口2(RP)连接到 S1的链路突然断开。
STP的反应:
S2检测到端口2失效,立即停止通过该端口转发数据。
S2开始重新计算生成树,寻找新的路径到达根网桥(S1)。
状态转换:
S2的备用端口3(DP)会从 DP 进入 RP。
同时,S3连接S2的阻塞端口会从 阻塞状态 进入 侦听状态(15秒)。
接着进入 学习状态(15秒),学习新的MAC地址。
最后进入 转发状态,开始正常转发数据。
总收敛时间:
由于需要经过 侦听 和 学习 两个状态,每个状态持续15秒,因此总收敛时间为 30秒。
A2 、 AP 端口直连故障:不需要恢复时间。
这是因为AP端口本身处于 阻塞状态,不参与数据转发。当AP端口失效时,网络拓扑没有实质性变化,因此不需要重新计算生成树。
例子:S 3 的替代端口(AP)失效
![](https://i-blog.csdnimg.cn/direct/78efbece6a7d4b768115ebd8ed6ebaa5.png)
故障发生:
S3的端口3(AP)连接到 S2的链路突然断开。
STP的反应:
S3检测到端口3失效,但由于该端口是 阻塞状态,不参与数据转发,因此网络拓扑没有变化。
S3仍然通过其他端口(端口2,RP口)连接到网络,数据转发不受影响。
恢复时间:
由于AP端口本身不参与数据转发,其失效不会影响网络的正常运行,因此 不需要恢复时间。
STP 的本质:
在逻辑上阻塞一条链路当作备份链路,如果主链路失效,则备份链路会继续转发数据。
2.11.2 、非直连故障
A1 、非 AP 端口非直连故障:需要 50s 的收敛时间,这包括:
20秒:BPDU的老化时间(Max Age)。
30秒:STP状态转换时间(15秒侦听 + 15秒学习)。
例子:HUB与S 2 之间的链路故障
![](https://i-blog.csdnimg.cn/direct/f934c694e48848468520bb19af33ace5.png)
故障发生:
HUB与S2之间的链路突然断开,但S2并未直接检测到故障(因为故障发生在HUB与S2之间,是非直连故障)。
BPDU老化:
S2的端口2(RP)原本通过HUB接收来自S1的BPDU。
由于链路断开,Switch B 无法收到新的BPDU。
S2会等待 20秒(Max Age),直到旧的BPDU过期。
STP重新计算:
当BPDU过期后,S2认为与根网桥(S1)的连接已失效。
S2开始重新计算生成树,寻找新的路径到达根网桥。
状态转换:
S2的备用端口3(DP)会从 DP 进入 RP。
同时,S3连接S2的阻塞端口会从 阻塞状态AP 进入DP状态,并开始 侦听状态(15秒)。
接着进入 学习状态(15秒),学习新的MAC地址。
最后进入 转发状态,开始正常转发数据。
总收敛时间:
20秒(BPDU老化) + 30秒(状态转换) = 50秒。
A2 、 AP 端口非直连故障:不需要恢复时间。
但如果AP端口需要切换为DP或RP,则需要额外的收敛时间:
AP切换为DP:需要 50秒 收敛时间(20秒BPDU老化 + 30秒状态转换)。
AP切换为RP:需要 30秒 收敛时间(仅状态转换)。
例子1:HUB与S 3 之间的链路故障
故障发生:
HUB与S3之间的链路突然断开,但S3并未直接检测到故障(因为故障发生在HUB与S3之间,是非直连故障)。
AP端口失效:
S3的端口3(AP)原本处于 阻塞状态,不参与数据转发。
由于AP端口失效,S3的网络拓扑没有实质性变化,因此 不需要恢复时间。
思考题: S3 的AP口切换为DP或RP需要多长时间?
![](https://i-blog.csdnimg.cn/direct/bfc93fa5dabd40bba9da3f3c3f8b70a9.png)
思路 1 :判断 AP 口连接的链路需不需要 BPDU 老化即可。
如果需要,则:如果S3的端口3(AP)需要切换为指定端口(DP),则需要等待 20秒(BPDU老化) + 30秒(状态转换) = 50秒。
如果不需要,则:如果Switch C 的端口1(AP)需要切换为根端口(RP),则只需要 30秒 的状态转换时间(15秒侦听 + 15秒学习)。
思路 2 :怎么判断需不需要 BPDU 老化?
S3端口3之所以是AP接口,是因为S3从S2的端口3接收到了最好的BPDU。那么当其端口2的链路断开时,不需要等待BPDU老化,只需要走最好的路线,直接从S2的端口3转发通信即可。所以只需要30秒即可。
2.12 、 STP 的拓扑改变
拓扑变更机制:
一开始STP认为所有端口进入转发状态或进入disable则认为拓扑发生了变更。
优化后的:
A1、当RP失效或进入转发状态会认为拓扑发生了变更;
A2、DP进到forwarding认为拓扑发生了变更,不同的是DP进入到disable(失效)认为拓扑没有发送变更;
A3、AP进入转发认为拓扑发生变更,AP进入disable(失效)不认为拓扑发生变更。
A1 例如下:
![](https://i-blog.csdnimg.cn/direct/1bbbb1ab3d544e86a719c826282ad4c2.png)
A2 、 A3 中的 DP 和 AP 进入 disable 状态,不认为拓扑发生变更的例如下:
![](https://i-blog.csdnimg.cn/direct/d0d5988f8f494a64bd762d1b00be9fe5.png)
2.13 、非根桥设备拓扑变更流程
A1、非根桥设备判定拓扑发生了变更后:
A1.1、会生成TCN BPDU(拓扑改变通知),向去往根桥的上游设备通告。
A2、上游设备收到TCN BPDU后:
A2.1、回复一个TCA BPDU配置BPDU,告知已接收到TCN BPDU;
A2.2、同时,上游设备也会生成(复制)TCN BPDU,向根桥的上游设备通告;
A2.3、一直将TCN BPDU通告至根桥为止。
A3、根桥收到了TCN BPDU后:
A3.1、对收到 TCN BPDU 的一端,发送TCA 配置 BPDU 和 TC 配置 BPDU(告知全网设备拓扑发生了改变);
A3.2、对没有收到 TCN BPDU 的一端,发送 TC 配置 BPDU。
A4、非根桥设备收到TC配置BPDU后:
A4.1、为了防止原有MAC地址表项存在错误映射关系,需要将所有接口对应的MAC地址老化时间设置为一个转发延迟时间。
注: ENSP 模拟器在拓扑变更后,不会老化 MAC 地址表项,所以会导致数据按照错误 MAC 地址表项转发,导致不通信。
3 、 RSTP 对 STP 的其它改进( HCIP 内容)
3.1 、配置BPDU的处理发生变化:
A1、拓扑稳定后,配置BPDU报文的发送方式进行了优化;
A2、使用更短的BPDU超时计时;
A3、对处理次等BPDU的方式进行了优化。
配置BPDU格式的改变,充分利用了STP协议报文中的Flag字段,明确了接口角色。
RSTP拓扑变化处理:相比于STP进行了优化,加速针对拓扑变更的反应速度。
3.2 、端口角色不同
通过接口角色的增补,简化了生成树协议的理解及部署。
![](https://i-blog.csdnimg.cn/direct/fcbe67b0375f469b97948d67fe1ac35f.png)
RSTP的接口角色共有4种:根接口、指定接口、预备接口和备份接口。
从配置BPDU报文发送角度来看:
预备(Alternate)接口就是由于学习到其它网桥发送的配置BPDU报文而阻塞的接口。
备份(Backup)接口就是由于学习到自己发送的配置BPDU报文而阻塞的接口。
从用户流量角度来看:
Alternate接口提供了从指定桥到根的另一条可切换路径,作为根接口的备份接口。
Backup接口作为指定接口的备份,提供了另一条从根桥到相应网段的备份通路。
3.3 、边缘端口
如果指定端口位于整个域的边缘,不再与任何交换设备连接,这种端口叫做边缘端口。
![](https://i-blog.csdnimg.cn/direct/b1eed7b587c54a81aa5f872b2553928d.png)
边缘端口一般与用户终端设备直接连接,可以由Disabled状态直接转到Forwarding状态。
在STP中++用户终端接入交换设备端口++状态由Disabled状态转到Forwarding状态需要经过15s,那么用户在这段时间无法上网,如果网络频繁变化,用户上网状态非常不稳定,时断时续。
++例:公司有++ ++1000++ ++台终端设备,每天早上++ ++9++ ++点员工陆续开机后网络会非常缓慢,直到++ ++10++ ++点++ ++30++ ++左右才有所好转,就是因为上述的端口状态转换导致的。++
边缘端口一般与用户终端设备直接连接,不与任何交换设备连接。边缘端口正常情况下接收不到配置BPDU报文,不参与RSTP运算,可以由Disabled状态直接转到Forwarding状态,且不经历时延,就像在端口上将STP禁用了一样。
但是,一旦边缘端口收到配置BPDU报文,就丧失了边缘端口属性,成为普通STP端口,并重新进行生成树计算,从而引起网络震荡。
3.4 、端口状态不同
|------------|------------|------------------------|
| STP接口状态 | RSTP接口状态 | 接口在拓扑中的角色 |
| Forwarding | Forwarding | 包括根接口、指定接口 |
| Learning | Learning | 包括根接口、指定接口 |
| Listening | Discarding | 包括根接口、指定接口 |
| Blocking | Discarding | 包括Alternate接口、Backup接口 |
| Disabled | Discarding | 包括Disable接口 |
RSTP 对 STP 的所有改进,都是为了更快的收敛。
课外,网络演进的小简史:
1、最早的网络,STP+VRRP为了保证三大冗余:链路冗余、设备冗余、网关冗余,就是简单的设备堆积。
2、为了提升带宽,变成了:STP+VRRP+ETH-Trunk。
3、后来引入:堆叠+ETH-Trunk(ISLACK/CSS):设备升级和优化很难实现,需要先拆堆叠再重新组建(大量的窗口时间)。
4、M-lag:Vxlan,Evpn。
注:
在学习过程 中所说的STP是标准的STP;实验演示的STP是华为优化后的STP。
指令集:
|-----------------------------------------|-----------------------------|
| 指令 | 功能 |
| stp disable | 关闭生成树功能 |
| stp enable | 开启生成树功能 |
| dis stp interface GigabitEthernet 0/0/2 | 查看STP接口的相关信息 |
| stp pathcost-standard | 修改STP开销计算标准 |
| stp mode stp | 设置STP的模式为STP (默认是MSTP模式) |
| stp timer forward-delay | 设置转发延迟的时间,单位毫秒 |
| dis stp brief | 查看生成树的信息 |
| undo in en | 关闭日志显示 |
| stp edged-port enable | 将某端口设置为边缘端口,就不用等待30秒的转发问题了。 |
往往越复杂的、理论越多的协议,它的配置就一点点,两条或一条命令就结束了(如 OSPF );而没有什么理论的知识点协议,它的配置会很多(如 VPN )。