HCIA-10.生成树 STP 3/3

2.8 STP 的计算过程

2.8.1 、根桥

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交换机将进行泛洪操作。

2、假设L3交换机已经学习到了PC3的MAC地址,则L3交换机不需要再向外进行泛洪操作。

3、在实际情况中,L3可能连接了其它交换机和PC。如果没有listening和learning状态,PC3将继续大量泛洪造成浪费。

2.10 STP 的接口状态迁移

1 **、**接口初始化或激活,自动进入阻塞状态

2 **、**接口被选举为根接口或指定接口,自动进入侦听状态

3 **、**转发延迟计时器超时且接口依然为根接口或指定接口

4 **、**接口不再是根接口或指定接口或指定状态

5 **、**接口被禁用或者链路失效

图中所示为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 )失效

故障发生:

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)失效

故障发生:

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 之间的链路故障

故障发生:

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需要多长时间?

思路 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 例如下:

A2 A3 中的 DP AP 进入 disable 状态,不认为拓扑发生变更的例如下:

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 、端口角色不同

通过接口角色的增补,简化了生成树协议的理解及部署。

RSTP的接口角色共有4种:根接口、指定接口、预备接口和备份接口。

从配置BPDU报文发送角度来看:

预备(Alternate)接口就是由于学习到其它网桥发送的配置BPDU报文而阻塞的接口。

备份(Backup)接口就是由于学习到自己发送的配置BPDU报文而阻塞的接口。

从用户流量角度来看:

Alternate接口提供了从指定桥到根的另一条可切换路径,作为根接口的备份接口。

Backup接口作为指定接口的备份,提供了另一条从根桥到相应网段的备份通路。

3.3 、边缘端口

如果指定端口位于整个域的边缘,不再与任何交换设备连接,这种端口叫做边缘端口。

边缘端口一般与用户终端设备直接连接,可以由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 )。

相关推荐
C#Thread5 分钟前
C# 上位机--变量
开发语言·c#
dal118网工任子仪9 分钟前
128,【1】buuctf [极客大挑战 2019]PHP
开发语言·php
一只小阿乐15 分钟前
JS对象拷贝的几种实现方法以及如何深拷贝(面试题)
开发语言·javascript·ecmascript·浅拷贝·深拷贝
武昌库里写JAVA27 分钟前
16.React学习笔记.React更新机制
java·开发语言·spring boot·学习·课程设计
Excuse_lighttime1 小时前
选择排序
java·开发语言·数据结构·算法·排序算法
Excuse_lighttime1 小时前
插入排序和希尔排序
java·开发语言·数据结构·算法·排序算法
爱是小小的癌1 小时前
数据结构与算法之排序算法-快速排序(分治)
java·开发语言·数据结构·算法·排序算法
不能只会打代码2 小时前
Python人工智能技术全景:从基础框架到DeepSeek的突破性创新
开发语言·人工智能·python·deepseek
pink大呲花2 小时前
利用ES6 Set去重
开发语言·javascript·es6