BPDU:bridge protocol data unit,网桥协议数据单元。
网络中所有设备使能STP后,每一台设备都以为自己是根桥。此时,每台设备仅仅收发配置BPDU,而不转发用户流量,所有的端口都处于listening状态,所有设备通过交换配置BPDU后,进行选举工作,选出根桥、根端口和指定端口。

BPDU报文的交互过程


根桥BID,累计根路径开销、发送者BID,发送端口PID构成有序组。配置BPDU会按照Hello Timer规定的时间间隔来发送。

STP算法实现的基本过程

1、初始状态

由于每个桥都以为自己是根桥,所以在每个端口所发出的BPDU中,根桥字段都是用各自的BID,root path cost字段是累计的到达根桥的开销,发送者BID是自己的BID,端口PID是发送该BPDU端口的端口ID。

2、选择根桥

网络初始化时,网络中所有的STP设备都自以为根桥,根桥ID为自身的BID,通过交换BPDU,设备之间比较BID,BID最小的设备被公认为根桥。至此,根桥确定。

3、选择根端口和指定端口

3.1 非根桥将接收最优BPDU的那个端口定为根端口。

最优配置消息的选择过程

1 每个端口将收到的配置消息与自己的配置消息进行比较
  • 如果收到的配置消息优先级比较低,则将其直接丢弃,对自己的配置消息不进行任何处理;
  • 如果收到的配置消息优先级较高,则用该配置消息的内容将自己配置消息的内容替换掉。
  • 如果收到的配置消息优先级与自己相同, 则将其直接丢弃。
2 设备将所有端口的配置消息进行比较,选出最优的配置消息

3.2 设备根据根端口的配置消息和根端口的路劲开销,为每个端口计算一个指定端口配置消息:

  • RBID字段替换为RP的收到的BPDU中的RBID字段(BPDU中原来的RBID字段为自身BID,由于从RP收到的BPDU中得到了真正的RBID,将此字段进行替换)
  • 根路径开销字段替换为RP收到的根路径开销加上RP对应的路径开销。(原来为0,即根桥所有端口到根桥的路径开销为0)
  • 发送者BID替换为自身设备的ID
  • 发送端口PID替换为自身端口ID

3.3 设备将计算出的配置消息与角色待定端口自己的配置消息进行比较:

  • 如果计算出的配置消息更优,则该端口被确定为指定端口,其配置消息也被计算出的配置消息替换,并周期性地向外发送;
  • 如果该端口自己的配置消息更优,则不更新该端口的配置消息并将该端口阻塞,该端口将不再转发数据,且只接收不发送配置消息。

STP算法实现过程


A,B,C的优先级分别为0,1,2,A与B之间,A与C之间,B与C之间链路的路径开销分别为5,10,4.

1 各设备的初始状态

注意:四元组:{根桥ID,累计根路径开销,发送者BID,发送端口PID}

A

端口名称 端口的配置消息
Port A1 {0,0,0,pa1}
Port A2 {0,0,0,pa2}

B

端口名称 端口的配置消息
Port B1 {1,0,1,pb1}
Port B2 {1,0,1,pb2}

C

端口名称 端口的配置消息
Port C1 {2,0,2,pc1}
Port C2 {2,0,2,pc2}

2 各设备的比较过程及结果

A

比较过程

  • Port A1收到Port B1的配置消息{1,0,1,Port B1},发现自己的配置消息{0,0,0,Port A1}更优,于是将其丢弃。
  • Port A2收到Port C1的配置消息{2,0,2,Port C1},发现自己的配置消息{0,0,0,Port A2}更优,于是将其丢弃。
  • DeviceA发现自己各端口的配置消息中的根桥和指定桥都是自己,于是认为自己就是根桥,各端口的配置消息都不作任何修改,此后便周期性地向外发送配置消息。

比较结果

  • Port A1:{0,0,0,Port A1}
  • Port A2:{0,0,0,Port A2}

B

比较过程一

  • pb1收到pa1的发来的配置消息{0,0,0,pa1},发现比自己的配置消息{1,0,1,pb1}更优,于是更新自己的配置消息。
  • pb2收到pc2发来的配置消息{2,0,2,pc2},发现自己的配置消息{1,0,1,pb2}更优,于是将其丢弃。

比较结果二

  • PB1:{0,0,0,PA1}
  • PB2:{1,0,1,PB2}

比较过程二

  • B比较自己各端口的配置消息,发现PB1的配置消息最优,于是将其指定为根端口,,其配置消息不变。
  • B根据根端口PB1的配置消息和路径开销,为PB2计算出指定端口的配置消息{0,5,1,PB2},然后与BP2本身的配置消息进行比较,发现计算出的配置消息更优,于是PB2被定为指定端口,其配置消息也被替换为计算出的配置消息,并周期性向外发送。

计算结果二

  • 根端口PB1:{0,0,0,PA1}
  • 指定端口PB2:{0,5,1,PB2}

C

计算过程一

  • PC1收到PA2的配置消息{0,0,0,PA2},发现其比自己的配置消息{2,0,2,PC1}更优,于是更新自己的配置消息。
  • PC2收到PB2更新前的配置消息{1,0,1,PB2},发现其比自己的配置消息{2,0,2,PC2}更优,于是更新自己的配置消息。

计算结果一

  • PC1:{0,0,0,PA2}
  • PC2:{1,0,1,PB2}

计算过程二

  • C比较自己各端口的配置消息,发现PC1的配置消息最优,于是该端口被确定为根端口,其配置消息不变。
  • C根据根端口的配置消息和路径开销,为PC2计算出指定端口的配置消息{0,10,2,PC2},然后与PC2本身的配置消息{1,0,1,PB2}进行比较,发现计算出的配置消息更优,于是PC2被确定为指定端口,其配置消息更新为计算出的配置消息

计算结果二

  • PC1:{0,0,0,PA2}
  • PC2:{0,5,1,PB2}

计算过程三

  • C比较PC1的根路径开销10与PC2的根路劲开销9,发现后者更小,于是PC2的配置消息更优,于是PC2被确定为根端口,其配置消息不变。
  • C根据根端口的配置消息和路径开销,为PC1计算出指定端口的配置消息{0,9,2,PC1},然后与PC1本身的配置消息{0,0,0,PA2}进行比较,发现本身的配置消息更优,,于是PC1被阻塞,其配置消息不变。从此,,PC1不再转发数据,直到有触发STP计算的新情况出现,如B与C之间的链路down掉。

网络收敛后,根桥会按照一定的时间间隔产生并向外发送配置BPDU,其他设备收到该配置BPDU后,如果优先级比自己的配置BPDU高,则非根桥设备会根据收到的配置BPDU中携带的信息更新自己相应的端口存储的配置BPDU信息,否则会丢弃该配置BPDU。

STP 拓扑变化

  1. T点接口发生变更后,下游设备会不间端地向上游设备发送TCN BPDU报文。
  2. 上游设备收到下游设备发来的TCN BPDU报文后,只有指定端口处理TCN BPDU报文,其他端口也有可能收到TCN BPDU报文,但不会处理。
  3. 上游设备会将配置BPDU报文中的flags字段中的TCA位置1,然后发送给下游设备,告知下游设备停止发送TCN BPDU报文。
  4. 上游设备复制一份TCN BPDU报文,向根桥方向发送。
  5. 重复步骤1,2,3,4.直到根桥收到TCN BPDU报文。
  6. 根桥把配置BPDU报文中flags的TC位和TCA位同时置1 后发送,TC位置1 是为了通知下游设备直接删除桥MAC地址表项,TCA位置1 是为了通知下游设备停止发送TCN BPDU报文。
    说明:
  • TCN BPDU报文主要用来向上游设备乃至根桥通知拓扑变化。
  • 置位的TCA标记的配置BPDU报文主要是上游设备用来告知下游设备已经知道拓扑变化,通知下游设备停止发送TCN BPDU报文。
  • 置位的TC标记的配置BPDU报文主要是上游设备用来告知下游设备拓扑发生变化,请下游设备直接删除桥MAC地址表项,从而达到快速收敛的目的。

总结

选举方法

  • 1、选择根桥
  • 2、非根桥上选择根端口
  • 3、冲突域上选择指定端口
  • 4、既不是RP也不是DP的就是AP

在稳定STP网络中端口状态只有2种

1、discasrding(AP)

2、forwarding(RP.DP)

最优BPDU的选择

  • 1 root id 最小
  • 2 rpc积累和
  • 3 bid最小
  • 4 pid最小

选举的算法

  • root id 最小是根桥
  • 非根桥bpdu最好的端口是RP
  • 根据RP计算DP的BPDU参数,如果比指定端口的本身的BPDU参数好,则该端口为DP端口,如果没有比指定端口本身的BPDU参数好,则该端口为AP。

RP失效,存在AP,网络需要30s恢复连接

RP失效,不存在AP,网络需要50s恢复连接

HCIE-RS面试---STP拓扑变化过程相关推荐

  1. 快速生成树(RSTP)和传统生成树(STP)的区别(华为数通HCIE认证面试真题)...

    快速生成树(RSTP,802.1w)和生成树(STP,802.1D)的区别总结 1.最重要的区别即快速收敛(最本质在于BPDU结构的变化) A.RSTP的proposal和aggrement机制(发生 ...

  2. arcgis悬挂点修改_ArcGis拓扑的那些事儿(拓扑应用过程三)

    (,,・∀・)ノ゛hello,小编又来啦(一不小心又拖更这么长时间),感觉大家都是催更小能手,天天定时定点的发消息催更,(其实很感谢大家的关注与催更,说明我写的这些对大家都有很大的用处!让我感到挺高兴 ...

  3. Flink并行度优先级_集群操作常用指令_运行组件_任务提交流程_数据流图变化过程

    Flink并行度优先级(从高到低) sum(1).setParallelism(1) env.setParallelism(1) ApacheFlinkDashboard任务添加并行度配置 flink ...

  4. python matplotlib 播放图片变化过程

    最近想将原图片和处理后的图片放在一起观察图片的变化过程.但是网上并么有找到有用的示例代码,所以粘出来和大家分享一下. import numpy as np import matplotlib.pypl ...

  5. 简单观察HoudiniAssetComponent状态(AssetState)的变化过程

    目标 UHoudiniAssetComponent的成员 AssetState,它是一个枚举EHoudiniAssetState: enum class EHoudiniAssetState : ui ...

  6. 频率控制和滞环控制的半桥/全桥LLC电路仿真对比 两种方式下均可实现输出电压闭环控制 ,模型中包含负载的阶跃变化过程 ,可以验证闭环系统稳定性

    频率控制和滞环控制的半桥/全桥LLC电路仿真对比 两种方式下均可实现输出电压闭环控制 ,模型中包含负载的阶跃变化过程 ,可以验证闭环系统稳定性 滞环控制和变频控制下的电感电流和输出电压波形图如第二幅图 ...

  7. 冲压过程中,冲裁力的变化过程

    冲裁力即冲剪产品时, 所需的冲床压力, 计算冲裁力, 是为了合理选择冲床的吨位, 使冲床得到更合理更经济的利用. 1.1 冲压过程中, 冲裁力的变化过程 首先冲头下降达到材料板上开始冲剪, 冲剪力会逐 ...

  8. CommonServiceLocator/Microsoft.Practices.ServiceLocation的变化过程

    CommonServiceLocator的类最主要的获取服务对对象的代码如下: TService ServiceLocator.Current.GetInstance<TService>( ...

  9. SCRATCH演示三角函数正弦函数的变化过程

    用SCRATCH绘制三角函数的变化过程 曲线变化过程 小猫的代码 笔得代码 动画角色

  10. 华为HCIE RS笔记-17OSPF收敛过程

    OSPF收敛过程: OSPF收敛需要经过八种状态机制: ① down ② Attempt ③ Init ④ Two-way ⑤ Exstart ⑥ Exchange ⑦ Loading ⑧ Full ...

最新文章

  1. 个性化排序的神经协同过滤
  2. 区块链概况:什么是区块链
  3. 周志华《机器学习》读书笔记(一)
  4. javascript控制html高,Javascript可以控制css吗?
  5. Gentoo 网络接口配置文件说明
  6. Easyjs 细说Javascript里的 闭包(Closure)
  7. 36岁程序员:领导平时称兄道弟,裁员时立刻变脸,看透人性
  8. python读取txt文件并输出到表格_Python读取txt内容写入xls格式excel中的方法
  9. 分红酒(广度优先搜索)
  10. linux xargs命令
  11. 安卓调用系统拍照功能:1、启动拍照返回图片,2、启动拍照,图片存储在指定路径下
  12. 万稞pw80线切割编程软件_模具设计编程培训哪些内容?
  13. mysql数据库银行项目题_银行数据库笔试编程题
  14. 大学生计算机应用大赛广告设计,计算机应用工程系第四届“经纬在线杯”网页广告设计大赛圆满结束...
  15. 鸿鹄系统和鸿蒙系统的区别,华为鸿蒙系统和全新的鸿鹄处理器将于8月9日正式发布,荣耀首发...
  16. Nginx之web前言
  17. 显示器接口:VGA、HDMI、DVI 、DisplayPort
  18. 大学计算机素质教育认识,试论技术院校中计算机教育与素质教育的关系
  19. 计算机系统实验--DataLab
  20. 王小二分饼 JAVA

热门文章

  1. 每日算法系列【LeetCode 42】接雨水
  2. BERT模型—3.BERT模型在ner任务上的微调
  3. 统计学习方法读书笔记12-逻辑斯蒂回归与最大熵
  4. 电子工业出版社博文视点图书在微软VS2010全球发布会上受追捧
  5. 21天学通JAVA之事务处理
  6. 中断服务程序设计实验
  7. 量子计算机钻石,科学家在钻石内构建量子计算机
  8. python ssh库paramiko学习
  9. python同时输出名字和时间,python中的日期和时间格式化输出
  10. Kotlin — 适用于数据科学