当前位置: 首页 > news >正文

11. TCN BPDU:揭秘 STP 拓扑变更的通知与收敛机制

一、TCN BPDU介绍

在 STP 网络稳定运行时,根桥会周期性发送​​​配置 BPDU​​(Configuration BPDU),用于维持整个生成树拓扑的稳定性。然而,当网络中出现链路故障、端口 UP/DOWN 等拓扑变更事件时,仅靠常规的 Hello 机制无法快速清除旧的转发表项。此时,设备必须启动一套特殊的通知与确认机制,通知全网快速刷新 MAC 地址表,以防止临时环路并加速收敛。

在 IEEE 802.1D 标准中,这一过程严格依赖以下三种 BPDU 的协同工作,当然所有 STP 协议报文(配置 BPDU、TCN BPDU 等)都使用组播地址 01:80:c2:00:00:00 发送,没有单播目的地址,不存在点对点定向发送。

  1. 拓扑改变通知 BPDU(TCN BPDU),Topology Change Notification BPDU。
  • 报文类型:类型0x80,是独立的 BPDU 格式,不是配置 BPDU。
  • 非根交换机产生,仅从设备的根端口发送,目的是往根方向传播拓扑变更。
  • 设备会每隔一个 Hello Time重复发送 TCN BPDU,直到收到上游设备回复TCA BPDU
  1. 拓扑改变确认配置 BPDU(TCA BPDU),Topology Change Acknowledgment Configuration BPDU。
  • 属于配置 BPDU,类型 0x00;在 Flags 字段中,TCA 位被置为 1(第 7 位)。

  • 上游设备在收到 TCN BPDU后,从对应的指定端口回复,确认已收到拓扑变更通知。同时从设备的根端口发送TCN,目的是往根方向传播拓扑变更。

  • 收到 TCN 后立即发送一次即可,无需周期发送。

  1. 拓扑改变配置 BPDU(TC BPDU),Topology Change Configuration BPDU。

  • 属于配置 BPDU,类型 0x00;在 Flags 字段中,TC (Topology Change)位被置为1(第 0 位)。

  • 非根桥在向上游转发 TCN(tcWhile > 0)时,它从指定端口向下游发出的所有配置 BPDU,必须将 TC 位置 1,用于提前通知下游刷新 MAC 地址表,不用等待根桥通告。

  • 根桥收到 TCN 后,会全网泛洪将TC 位置 1的配置 BPDU,确保整网所有设备都感知到拓扑变更。

  • 发送周期为Hello Time(2 秒)

二、TCN报文

1. 变更通知:TCN BPDU

非根交换机感知到拓扑变化,从根端口向上游发送 TCN,报文非常简单,不携带任何拓扑参数,仅仅有一个 BPDU 类型字段,用于告知上游拓扑发生了变更。

从物理层面看是组播,“向上游发送” 是逻辑拓扑方向:TCN 从根端口发出,只能被上游交换机接收,实现逐级上报。例如:交换机 4c:1f:cc:17:65:47 感知拓扑变更,发送 TCN BPDU。

2. 变更回复:非根 TCA BPDU

上游交换机收到 TCN 后会进行确认回复,这个确认报文本质就是配置 BPDU,只是对 Flag 标志位做了特殊标记。

由于所有 BPDU 都使用组播地址 01:80:c2:00:00:00 传播,没有单独的单播应答,因此上游设备在回复 TCA 时,会同时将 TC 与 TCA 置位

  • TCA=1:用于确认收到下游的 TCN;
  • TC=1:用于直接通知下游刷新 MAC 地址表,不必等待根桥通告。

802.1D 标准规定:只要设备正在向上转发 TCN(tcWhile>0),下发的配置 BPDU 必须置 TC=1。发生拓扑变更的交换机 4c:1f:cc:17:65:47,会收到其上游设备 4c:1f:cc:36:1a:d6 发出的TC=1、TCA=1的配置 BPDU。

3. 变更传播:非根 TC BPDU

与此同时,上游交换机 4c:1f:cc:36:1a:d6 还会周期性发送仅 TC=1、TCA=0的组播配置 BPDU,持续通知下游刷新 MAC 地址表。该报文由中间交换机自身发出,并非根桥下发。只要本机还在向上游转发 TCN,就会一直置 TC=1。

4. 变更通知传播:非根转发TCN BPDU

同时,上游交换机 4c:1f:cc:36:1a:d6 会从自己的根端口,重新生成并发送新的 TCN BPDU,继续向上接力上报,保证变更消息最终能到达根桥。

TC 位只能向下通知,无法替代 TCN 向根桥上报,因此必须单独转发 TCN。

5. 变更确认:根桥TCA BPDU

根桥 4c:1f:cc:5d:75:fb 收到 TCN 后回复一个TC=1 且 TCA=1的配置 BPDU,一边确认 TCN一边开始通告拓扑变更。

6.变更泛洪:根桥TC BPDU

首次应答完成后,根桥按照 Hello Time 周期,持续发送仅 TC=1、TCA=0的组播配置 BPDU,全网泛洪拓扑变更信息,让所有设备刷新 MAC 地址表,直到收敛完成。

7.总结

  • TCN:只向上,负责把变更报到根桥,报文:类型0x80,独立BPDU 格式,不携带任何拓扑参数。。
  • TCA:向下应答,确认收到 TCN,报文:类型0x00,配置 BPDU,置位TCA。
  • TC:向下通知,刷新 MAC;中间交换机、根桥都可以发送,报文:类型0x00,配置 BPDU,置位TC。
  • 全部 BPDU 都是组播,方向由端口角色决定,不由目的 MAC 决定。

三、拓扑变更与收敛

根桥 SW C,SW A ↔ SW B 的 G0/1 链路中断,SW A 和 SW B 感知到这条链路断开。

1.感知变更,发起 TCN

SW A、SW B 感知到 G0/1 链路断开,触发拓扑变更。各自从根端口(SW A:E0/1;SW B:G0/2)发送TCN BPDU,向上游逐级上报。以 Hello Time 周期重复发送,直到收到 TCA 确认。

2.接力上报,提前通知

SW D 收到 SW B 的 TCN

  • 从对应的指定端口(G0/2)回复TC=1,TCA=1的配置 BPDU,TCA=1:确认收到下游 TCN;TC=1:提前通知下游刷新 MAC,无需等待根桥。
  • 同时从根端口(G0/1)重新生成新的 TCN BPDU,继续向根桥 SW C 上报。
  • 后续周期性向下游(SW B)发送仅 TC=1的配置 BPDU(TCA=0),提前通知刷新 MAC 表。

SW C 收到 SW D 的 TCN

  • 根桥无需再向上上报,从指定端口(G0/2)回复TC=1,TCA=1的配置 BPDU 确认。
  • 同时启动全网 TC 泛洪(TC=1,TCA=0)。

3.泛洪 TC,全网刷新

根桥 SW C 开始向所有指定端口(G0/1、G0/2)周期性发送TC=1, TCA=0的配置 BPDU,持续时间Max Age + Forward Delay = 20 + 15 = 35秒:

  • 所有收到 TC 报文的交换机,将 MAC 地址表老化时间缩短为Forward Delay(默认 15 秒),加速清理失效条目。
  • 中间交换机继续从指定端口转发 TC 报文,确保全网覆盖。

4.重新计算,完成收敛

链路中断后,STP 会重新计算无环拓扑:

SW A:原 G0/1 是根端口(指向根桥 SW C),现在链路断开,该端口失效。重新计算后,E0/1 端口从阻塞状态转为根端口,成为新的最优路径到根桥 SW C。

SW B:原 G0/1 是指定端口(负责向下游网段转发),链路断开后失效。根端口 G0/2 保持不变,仍为最优路径到根桥 SW C。

全网收敛完成

  • 所有交换机完成 MAC 表刷新,新的无环拓扑稳定。
  • 根桥 SW C 在 Forward Delay + Max Age 后停止发送 TC 报文。

5.全网收敛时间

  1. 根桥发送 TC 报文的时间(TC 泛洪时长)Max Age + Forward Delay,默认 20 + 15 =35 秒
  2. 全网最长收敛时间:网络中最远的设备,可能35 秒末才收到 TC,之后还需要Forward Delay时间完成 MAC 老化,TC 泛洪时长 + Forward Delay, 20 + 15 + 15 =50 秒
  3. 全网最短收敛时间:如果拓扑变化直接发生在根桥直连设备,TCN 立刻到达根桥,下游设备立刻收到 TC,经过 1 个 Forward Delay 完成 MAC 刷新,最短收敛时间 ≈ Forward Delay = 15 秒。

6.核心总结

  1. 变更触发:端口进入 / 离开 Forwarding 状态(如链路断开)。
  2. 上报路径:非根桥 → 上游 → 根桥(通过 TCN BPDU 接力)。
  3. 通知路径:根桥 → 全网(通过 TC 标志位的配置 BPDU 泛洪),泛洪 Max Age + Forward Delay 时长。
  4. 收敛结果:收到 TC 的交换机将MAC表老化时长缩短为 Forward Delay,全网 MAC 表快速刷新,新的无环拓扑建立。
http://www.jsqmd.com/news/647966/

相关文章:

  • USB4与PCIe的协同进化:多协议接口的未来架构设计
  • 主流手机云测试平台横向评测:如何为你的APP选择最佳测试方案?
  • windows下openclaw的安装(Qwen版本)
  • 九款免费查重工具推荐,包含爱毕业aibiye等平台,支持每日不限次数检测与AI智能降重
  • 2026年评价高的电力检查井精选厂家推荐 - 行业平台推荐
  • Blazor 中的状态更新:从理论到实践
  • WaveTools鸣潮工具箱:如何快速提升游戏体验的5个实用技巧
  • GEE实战:基于Landsat8的MNDWI水体提取与城镇环境分析
  • AtlasX Protocol 获 200 万美元种子轮融资
  • 告别卡顿!用学校服务器在Google Colab上跑深度学习(保姆级SSH+Jupyter配置)
  • 避坑指南:银河麒麟V4.0.2-sp4配置数据源时,别再用错这行deb命令了
  • 免费查重工具盘点:爱毕业aibiye等9大平台提供无限次检测及AI辅助降重功能
  • 精细化状态管理:Riverpod的select方法
  • Linux多显示架构对比:ZaphodHeads vs PRIME vs Multiseat
  • PX4飞控参数调优实战:从“飘”到“稳”,手把手教你调好四旋翼PID
  • Xtreme Download Manager终极指南:免费开源下载加速神器,5倍速度提升秘籍
  • 告警风暴 vs 告警静默:多模态大模型监控体系的双峰困境破解术(基于200+线上实例的告警压缩率提升87%实践)
  • VS2022 vs VSCode:Copilot在不同IDE中的表现差异及优化建议
  • 零基础用Wireshark抓包:从安装到第一个数据包分析实战
  • 从选型到焊接:手把手教你用PPTC保护USB-C接口电路(含立创EDA封装)
  • 告别复杂多任务学习:深度解读Depth Anything V3如何用‘一个Transformer+一个目标’统一3D重建
  • 如何处理Node-imap中的搜索问题
  • Prism九(自动绑定进阶:自定义命名约定与实战技巧)
  • 前沿综述|AAAI24、IJCAI24、ICLR24中基于深度学习的金融时间序列预测与分析方法
  • CMT2380F32射频收发实战:从SPI配置到数据包解析(附Python脚本调试技巧)
  • 新手也能懂:用Python+NumPy模拟雷达快慢时间采样数据矩阵(附代码)
  • 高效处理大规模数据的JavaScript技巧
  • 深度学习中的多尺度与多粒度:如何选择适合你的图像处理方案?
  • 终极音乐解锁指南:5步轻松解密所有加密音乐格式
  • 强化学习实战8.1——用PPO打赢星际争霸【环境配置与下位机代码】