「STP」- 3.Problem Solving (how-to)

这里“拓扑变化”指交换机协议层面的拓扑变化,而非物理层面拓扑变化。

问题描述

问题:根桥故障

在 Max Age 内,20s,交换机未收到 Root Bridege 的 BPDU 帧:
1)在 20s 后,交换机 SWB/SWC 认为链路故障,开始发送 BPDU 帧;
2)端口状态迁移(Forward Delay)的延时,Listening ⇒ Learning ⇒ Forwarding,15s * 2 = 30s
3)总共为 50s 时间

问题:直连链路故障

在这个拓扑中,SWA/SWB 之间有两条链路,其中虚线链路不转发流量。
1)当 SWA/D ⇒ SWB/R 故障,SWB/A 会迅速变为 SWB/R 状态,无需等待 20s 老化。
2)但是为 Blocking 状态,到 Forwarding 状态,需要 30s 时间(Forward Delay)。

可见,STP 重收敛过程慢

问题:非直连链路故障

此时,假如 SWB 与 SWA 之间有 Hub 存在,并且 SWB 到 Root Bridge 的链路出现故障,但 SWB 的接口为 UP 状态:
1)SWB 无法收到 Root Bridge 的 BPDU 帧,因此 SWB 无法向 SWC 转发 BPDU 帧,而 SWC 能收到来自 SWA 的 BPDU 帧;
2)SWC.A 切换到 SWC.P 状态,由 Blocking 进入 Forwarding 状态,整个过程需要 30s 时间;
3)然后,SWC.P 开始发送 BPDU 帧,然后 SWB.P 切换到 SWB.R 状态(因为 SWB 无法直接收到 Root Bridge 的 BPDU 帧,而是经过 SWC 设备,因此这个端口是 Root Port 状态,而非 Designated Port 状态)

总的来说,整个网络恢复需要 50s 时间:
1)当故障时,在 20s 后,SWB 一直未收到 Root Bridge 的 BPDU 帧,原 BPUD 老化失效。
2)此时 SWC 切换 SWC.A 状态,需要 30s 时间。

可见,STP 重收敛过程慢

问题:拓扑改变导致 MAC 地址表错误

1)如果 SWC/G1 端口发生异常,此时与 SWA/G2 相关 MAC 地址表条目将被清除。
2)此时 Host-A 发往 Host-B 的数据帧,在到达 SWA 时将被丢弃。
3)当 MAC 地址表条目 300s 时间超时之后,SWB/G1 相关的条目会老化。即 300s 后 Host-A 才能访问到 Host-B 主机。

解决方案:TCN,TCA,TC

工作原理:
1)在拓扑变化后,Root Bridge 通过接收到 TCN BPDU 帧获知生成树拓扑里发生故障。
2)然后,Root Bridge 生成 TC 用来通知 其他交换机 加速老化现有的 MAC 地址表项。

注意事项:
1)端口从 Non-forwarding 变 Forwarding 状态,即端口状态发生变化才能称之为“拓扑变化”
2)仅在发送拓扑变化之后,才会发送进行拓扑通知过程;

拓扑变更以及 MAC 地址表项更新的具体过程如下:
1)SWC 感知到网络拓扑发生变化后(比如链路异常,RP Down), AP ⇒ RP,并通过 RP 不断地向 SWB 发送 TCN BPDU 帧;
2)SWB 收到 SWC 发来的 TCN BPDU 帧后,会把 CBPDU 帧中的 Flags.TCA=1,然后发送给 SWC,告知 SWC 停止发送 TCN BPDU 报文;
3)SWB 向 Root Bridge 转发 TCN BPDU 帧;
4)SWA 把 CBPDU 帧 的 Flags.TC=1 后发送,通知下游设备把 MAC 地址表项的老化时间由默认的 300s 变为 Forwarding Delay 时间(默认 15s)
5)最多等待15秒之后,SWB 中的错误映射关系会被自动清除。此后,SWB 就能通过 G0/0/2 端口把从 Host-A 到 Host-B 的帧正确地进行转发。

补充说明

正如前面所说,BPDU 仅两种,其一是 TCN BPDU 类型,而 TCA=1 / TC=1 都属于 CFG BPDU 类型