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 )。

相关推荐
ServBay12 小时前
垃圾堆里编码?真的不要怪 PHP 不行
后端·php
用户9623779544815 小时前
CTF 伪协议
php
BingoGo3 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack3 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo4 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack4 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack5 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo5 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack6 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理6 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php