STP选举过程:

网络中所有的桥设备在使能STP协议后,每一个桥设备都认为自己是根桥。此时每台设备仅仅收发配置BPDU,而不转发用户流量,所有的端口都处于Listening状态。所有桥设备通过交换配置BPDU后才进行根桥、根端口和指定端口的选举和确定工作。

BPDU优先级比较标准:
当同一个桥收到了多个不同的配置BPDU时,优先级高的BPDU则采用,其他的将被丢弃,假定有两条配置BPDUX和Y,则他们的比较顺序如下:

  1. 如果X的根桥ID小于Y的根桥ID,则X优于Y。
  2. 如果X和Y的根桥ID相同,但X的根路径开销小于Y,则X优于Y。
  3. 如果X和Y的根桥ID,以及路径开销都相同,但X的桥ID小于Y,则X优于Y。
  4. 如果X和Y的根桥、根路径开销以及桥ID都相同,但X的端口ID小于Y,则X优于Y。
  5. 如果以上4个方面都相同,那么如果X的接收端口ID小于Y,则X优于Y。

步骤一:选举根桥
“根桥的选举”就是在交换网络中所有运行STP协议的交换机上选举出一个唯一的根桥。“根桥”是STP生成树的最顶端交换设备,是STP生成树的“树根”。根桥的选举依据是各桥的配置BPDU报文中BID(桥ID)字段值,BID字段值最小的交换机将成为根桥。而桥配置BPDU报文中BID字段共有8个字节,即2个字节的桥优先级和6个字节的桥背板MAC,其中桥优先级的取值范围是0~65535,缺省值是32768。在进行BID比较时,先比较桥优先级,优先级值小的为根桥;当桥优先级值相等时,再比较桥的背板MAC地址,MAC地址小的为根桥。

在初始化过程中,根桥的选举要经历两个主要过程:一是每桥上确定自己的配置BPDU;二是在整个交换网络中通过各桥自己发送的配置BPDU进行比较选举整个交换网络中的根桥。

1.桥配置BPDU的确定:
一开始每个桥都认为自己是根桥,所以在每个端口所发出的配置BPDU报文中,“根ID”字段都是用各自的BID,“根路径开销”字段值均为0,“发送者BID”字段是自己的BID,“发送端口PID”字段是发送该BPDU端口的端口ID。

每个桥都向外发送自己的配置BPDU的同时也会收到其它桥发送的配置BPDU。但桥端口并不会对收到的所有配置BPDU都用来更新自己的配置BPDU,而是先会进行配置BPDU优先级比较。当端口收到的配置BPDU比本端口的配置BPDU的优先级低时,将丢弃所收到的这个配置BPDU,仍保留自己原来的配置BPDU,否则桥将收到的配置BPDU作为该端口的配置BPDU。然后,桥再将自己所有端口的配置BPDU进行比较,选出最优的BPDU作为本桥的配置BPDU。

2.根桥的确定:
每个桥的最优配置BPDU确定后,以后各桥间交换的配置BPDU都是各自最优的配置BPDU了。可以用四元组表示了由根桥BID、累计根路径开销、发送者BID、发送端口PID构成的有序组。配置BPDU会按照Hello Timer规定的时间间隔来发送,默认的时间是2秒。

一旦某个端口收到比自己优的配置BPDU报文,此端口就提取该配置BPDU报文中的某些信息更新自己的信息。该端口存储更新后的配置BPDU报文后,并立即停止发送自己的配置BPDU报文。在图中,如果S2的端口B由于接收到了来自S1的更好的配置BPDU,从而认为此时S1是根桥,然后S2的其他端口再发送BPDU的时候,在根桥ID字段里面填充的就是S1_BID了。此过程不断交互进行,直到所有交换设备的所有端口都认为根桥是相同的,说明根桥已经选择完毕。

在如下图所示的交换网络中列出了S1、S2和S3的桥优先级和桥MAC地址。通过比较发现三台交换机的桥优先级都一样,均为缺省的32768,这时就要进一步比较各交换机的MAC地址,通过比较可以发现S1的MAC地址最小,所以最终S1将选举作为根桥。

步骤二:根端口的选举

“根端口的选举”就是在所有非根桥上的不同端口之间选举出一个到根桥最近的端口,接收上行发送的报文。当然这个“最近”的衡量标准不是根据到达根桥所经过的桥数,而是根据端口到根桥的累计根路径开销最小来判定的。实质上是非根桥上接收到最优配置BPDU的那个端口即为根端口。每个非根桥设备都要选择一个根端口,根端口对于一个设备来说有且只有一个。

累计根路径开销的计算方法是累加从端口到达根桥所路经的各端口(除根桥上的指定端口外)的各段链路的路径开销值(也称链路开销值)。这里要特别注意的是,同一交换机上不同端口之间的路径开销值为0。如果同一桥上有两个以上的端口计算得到的累计根路径开销相同,那么选择收到发送者BID最小的那个端口作为根端口。

在下图所示的交换网络中,S1为根桥,就时就需要选举S2和S3非根桥的根端口。S2到达根桥S1有两条路径:一条是通过port5端口直接到达S1的port1端口,其累计根路径开销很容易得出,就是port5端口自身的路径开销值,即图中标的是19。另一条是从port6端口出发,经过S3的port3和port4端口,到达根桥S1的port2端口,其累计根路径开销就是port6、port3和port4端口的路径开销值之和。从图中的标注可以知道,port6端口的路径开销值为也为19,但因为port3到port4端口在同一交换机S3上,所以路port3到port4端口的路径开销值为0,port4到S1的port2端口的路径开销值也为19,这样port6端口累计根路径开销值就是19+0+19=38,很明显高于port5端口的累计根路开销值19,所以port5端口最终选举为S2的根端口。用同样的方法可以得出S3桥上的根端口为port4。

步骤三:确定指定端口和阻塞其他端口
默认情况下,各个交换机在初始状态都认为自己是根桥,所以自己的各个端口都为指定端口;指定端口也就是连接下行设备的端口,一个网段中仅有一个,负责向下行设备转发报文。

当一个网络中的交换机通过交互BPDU后,如果其不是根桥,仅有一部分能保持指定端口;其余的端口转化为根端口和阻塞端口。

哪些端口能继续保持指定端口:

  1. 某网段到根桥的路径开销最小。
  2. 接收数据时发送方(也就是链路对端的桥)的桥ID最小。
  3. 发送方端口ID最小(端口ID有16位,它是由8位端口优先级和8位端口编号组成的,其中端口优先级的取值范围是0~240,缺省值是128,可以修改,但必须是16的倍数)。

如下图所示。S1为根桥,这样很容易根据前面列出的指定端口判定条件中的第一项得出在S2-S1网段,以及S3-S1网段中的指定端口分别为S1的port1和port2端口(因为Cost为0)。而在S3-S2网段中,由于S3和S2桥到达根桥的路径开销均为19,所以这里要比较前面提到的第二项条件,即发送方的桥ID(即图中标识的SBID)大小了。S3的port3的发送方的桥ID为32768.000-0C12-3457,而S2的port6的发送方的桥ID为32768.000-0C12-3458,经过比较发现S3的port3的发送方的桥ID更小,所以最终选举为S3-S2网段的提定端口。这样一来就可确定port6端口为阻塞端口了。

注意点:分步骤的目的是方便学习和理解,其实各个步骤按照选举设定的规则在同时进行。

初始状态:


为了方便讨论,我们将S1、S2和S3的优先级分别设置为0、1和2,S1与S2之间、S1与S3之间以及S2与S3之间链路的路径开销分别为5、10和4。

S1、S2、S3认为所有的接口都是指定接口,计算出自己的配置BPDU。

S1、S2和S3各个端口的初始配置BPDU分别为:
• S1的PortA1为{0,0,0,PortA1},PortA2为{0,0,0,PortA2}。
• S2的PortB1为{1,0,1,PortB1},PortB2为{1,0,1,PortB2}。
• S3的PortC1为{2,0,2,PortC1},PortC2为{2,0,2,PortC2}。

第一轮BPDU交互:


S1、S2和S3通过各自端口发送各自的配置BPDU,且每一个网桥均认为自己为根,路径开销为0。

第一轮BPDU比较结果:


S1交互结果
• 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}更优,于是将其丢弃。
• S1发现自己各端口的配置消息中的根桥和指定桥都是自己,仍然认为自己就是根桥,各端口的配置消息都不作任何修改,此后便周期性地向外发送配置消息。
• 比较后,各个端口的最优配置BPDU分别为portA1为{0,0,0,Port A1},portA2为{0,0,0,Port A2}。
• 由于S1为根桥,所以该网桥上所有端口仍为指定端口。

S2交互结果
• Port B1收到Port A1的配置消息{0,0,0,Port A1},发现其比自己的配置消息{1,0,1,Port B1}更优,于是更新自己的配置消息。
• Port B2收到Port C2的配置消息{2,0,2,Port C2},发现自己的配置消息{1,0,1,Port B2}更优,于是将其丢弃。
• 比较后,各个端口的最优配置BPDU分别为portB1为{0,0,0,Port A1},portB2为{1,0,1,Port B2}。
• 各个端口配置消息比较:

  1. S2比较自己各端口的配置消息。比较时,5个要素是,RID,cost(注意更新),对方的BID,对方的PID,自己的PID,发现Port B1的配置消息最优,于是该端口被确定为根端口,其配置消息不变。
  2. 有了根端口后,就可以计算根路径开销了S2根据根端口的配置消息和路径开销,为Port B2计算出指定端口的配置消息{0,5,1,Port B2},然后与Port B2本身的配置消息{1,0,1,Port B2}进行比较,发现计算出的配置消息更优,其配置消息也被替换为计算出的配置消息,并周期性地向外发送。

S3交互结果
• Port C1收到Port A2的配置消息{0,0,0,Port A2},发现其比自己的配置消息{2,0,2,Port C1}更优,于是更新自己的配置消息。
• Port C2收到Port B2更新前的配置消息{1,0,1,Port B2},发现其比自己的配置消息{2,0,2,Port C2}更优,于是更新自己的配置消息。
• 比较后,各个端口的最优配置BPDU分别为portC1为{0,0,0,Port A2},portC2为{1,0,1,Port B2}。
• 各个端口配置消息比较:

  1. DeviceC比较自己各端口的配置消息,比较时,5个要素是,RID,cost(注意更新),对方的BID,对方的PID,自己的PID,发现Port C1的配置消息最优,于是该端口被确定为根端口,其配置消息不变。
  2. DeviceC根据根端口的配置消息和路径开销,为Port C2计算出指定端口的配置消息{0,10,2,Port C2},然后与Port C2本身的配置消息{1,0,1,Port B2}进行比较,发现计算出的配置消息更优,Port 2仍然为指定端口,其配置消息也被替换为计算出的配置消息。

第二轮BPDU交换:


由于交换机S1为根桥,所以S1发送的配置BPDU
• 端口PortA1发送的配置BPDU为{0,0,0,Port A1}。
• 端口PortA2发送的配置BPDU为{0,0,0,Port A2}。

S2发送的配置BPDU
• 由于交换机S1为根桥,所以S2不再向S1发送配置BPDU。
• 端口PortB2发送的配置BPDU为{0,5,1,Port B2}。

S3发送的配置BPDU
• 由于交换机S1为根桥,所以S3不再向S1发送配置BPDU。
• 端口PortC2发送的配置BPDU为{0,10,2,Port C2}。

第二轮BPDU比较结果:


S2交互结果
• Port B1收到Port A1的配置消息{0,0,0,Port A1},发现其比自己的配置消息{0,0,0,Port A1}相同,于是将其丢弃。
• Port B2收到Port C2的配置消息{0,10,2,Port C2},发现自己的配置消息{0,5,1,Port B2}更优,于是将其丢弃。
• 比较后,各个端口的最优配置BPDU分别为portB1为{0,0,0,Port A1},portB2为{0,5,1,Port B2}。
• 由于各个端口最优配置BPDU未发生变化,所以端口角色不变。

S3交互结果
• Port C1收到交换机A的配置BPDU{0,0,0,portA2},和自己原有的BPDU一样,直接丢弃。
• Port C2收到交换机B发送的配置BDPU为{0,5,1,portB2},与自己原有配置BPDU{0,10,2,portC2}进行比较,由于根桥ID相同,进而比较根路径开销(10>5),比较发现对端的更优,即更新为{0,5,1,portB2}
比较后,各个端口的最优配置BPDU分别为portC1为{0,0,0,Port A2},portC2为{0,5,1,Port B2}。
• 各个端口配置消息比较:

  1. S3比较Port C1的根路径开销10(收到的配置消息中的根路径开销0+本端口所在链路的路径开销10)与Port C2的根路径开销9(收到的配置消息中的根路径开销5+本端口所在链路的路径开销4),发现后者更小,因此Port C2的配置消息更优,于是Port C2被确定为根端口,其配置消息不变。
  2. S3根据根端口的配置消息和路径开销,为Port C1计算出指定端口的配置消息{0,9,2,Port C1},然后与Port C1本身的配置消息{0,0,0,Port A2}进行比较,发现本身的配置消息更优,于是Port C1被阻塞,其配置消息不变。从此,Port C1不再转发数据,直至有触发生成树计算的新情况出现,譬如S2与S3之间的链路down掉,或者20s没有收到对端的BPDU。

注意: 如果通过根端口BPUD为标准计算出的其余端口BPDU比原来的优,那个端口仍然为指定端口,如果没有原来的优,那么原来的端口进入阻塞状态。

补充:

发送者PID和接收者PID进行比较在这种情况下会运用到:

左侧拓扑描述:

  1. 根据STP根桥选举原则,很容易得出S1为根桥,接下来确定根端口、指定端口和阻塞端口。
  2. S2从接口E0和E1接收到S1发送两条BPDU,分别为{0,0,0,E0}和{0,0,0,E1},该两个BPDU只有发送端口不同,根据比较原则,较小的发送端口胜出,所以E0为根端口,E1为阻塞端口。

右侧拓扑描述:

  1. 根据STP根桥选举原则,很容易得出S1为根桥,接下来确定根端口、指定端口和阻塞端口。
  2. S2从接口E0和E1接收到S1发送两条BPDU,分别为{0,0,0,E0}和{0,0,0,E0},该两个BPDU优先级向量均相同,根据比较原则,只能比较接收端口的PID大小。经比较,接收端口E0较小,所以E0为根端口,E1为阻塞端口。

参考资料:华为HCIE培训资料;有错误的地方请指正。

STP计算过程图解分析相关推荐

  1. STP计算失效导致环路的解决过程

    STP计算失效导致环路的解决过程 作者:魏帅创建时间:2020-08-12 21:34:27浏览次数:31 次 一.组网描述 二.故障现象 1. 整个网段的业务全断,发现这个网段的四台交换机CPU 都 ...

  2. 动画版RNN、LSTM和GRU计算过程

    公众号关注 "视学算法" 设为"星标",第一时间知晓最新干货~ 编辑 | Python遇见机器学习 地址 | https://zhuanlan.zhihu.co ...

  3. python计算小数点后有几位_数学提高小数除法竖式计算过程

    除数是小数时:先把除数变成整数,除数扩大到原来的多少倍,被除数也要扩大到原来的多少倍(即小数点也向右移动几位,位数不够的用0补),然后按照除数是整数的除法进行计算.计算小数除法,除到被除数的末尾仍有余 ...

  4. 交叉熵损失(Cross Entropy Loss)计算过程

    交叉熵损失(Cross Entropy Loss)计算过程_藏知阁-CSDN博客_交叉熵计算公式

  5. 衡量计算机的平均无故障时间6,平均无故障时间MTBF测试及计算过程

    <平均无故障时间MTBF测试及计算过程>由会员分享,可在线阅读,更多相关<平均无故障时间MTBF测试及计算过程(4页珍藏版)>请在人人文库网上搜索. 1.一.寿命估算模型常温下 ...

  6. 【计算理论】计算理论总结 ( 下推自动机计算过程 | 上下文无关文法 CFG 转为下推自动机 PDA ) ★★

    文章目录 一.下推自动机计算过程 二.上下文无关文法 CFG 转为下推自动机 PDA 流程 参考博客 : [计算理论]上下文无关语法 ( 语法组成 | 规则 | 语法 | 语法示例 | 约定的简写形式 ...

  7. 【计算理论】图灵机 ( 非确定性图灵机 | 非确定性图灵机指令分析 | 计算过程 | 非确定性指令出现多个分支 | 非确定性图灵机转为计算树 | 计算树 )

    文章目录 一.非确定性图灵机 二.非确定性图灵机 指令 三.非确定性图灵机 计算示例 初始状态 四.计算步骤 1 五.计算步骤 2 六.计算步骤 3 ( 出现非确定性分支 ) 七.计算步骤 3-1 ( ...

  8. 【计算理论】非确定性有限自动机 ( 计算过程 | 计算树 | 确定可接受字符串 | 设计非确定性有限自动机 | 空字符 )

    文章目录 一.非确定性自动机 计算过程 ( 计算树 ) 二.判定 非确定性自动机 接受的字符串 三.自动机 设计要求 四.非确定性有限自动机设计 五.非确定性有限自动机 与 确定性 有限自动机 比较 ...

  9. 举例说明信息熵、互信息的计算过程

    举例说明信息熵.互信息的计算过程_tangxianyu的博客-CSDN博客_互信息计算

最新文章

  1. android camera工程师,浅析Android Camera架构
  2. 抛弃注意力,类Transformer新模型实现新SOTA
  3. mysql事务和锁InnoDB
  4. access开发精要(5)-合计group by
  5. oracle 如何数组变成表,Oracle从零开始19——表的管理09——嵌套表和可变数组
  6. JQuery:deferred对象的方法
  7. 计算机二级web题目(8.1)--综合选择题2
  8. Mac OS X下查看CPU信息
  9. 走进Windows Server 2008服务器核心(Serve Core)
  10. CentOS服务器下对mysql的优化
  11. so文件linux注册,SO文件格式
  12. Python 入门网络爬虫之精华版
  13. pandas中对列进行排序(单列/多列)/(升序/降序)/(多列升序,降序控制)
  14. 如何在SQL Server VARCHAR / NVARCHAR字符串中插入换行符
  15. wget 下载 设置cookie
  16. php冒泡排序图解,PHP冒泡排序(Bubble Sort)代码实现图解
  17. 买笔记本电脑主要看什么?
  18. python 爬取数据(CBA所有球队数据) -爬虫
  19. 计算机软件系统 七年级,系统软件作用大七年级信息技术教案(5页)-原创力文档...
  20. LeetCode每日一题——1812. 判断国际象棋棋盘中一个格子的颜色

热门文章

  1. OpenGL渲染视图种类及使用场景区别
  2. 【技巧】Pandas使用drop后使用reset_index重置索性
  3. Windows11万用更新教程(跳过系统检测)(W002)
  4. html中制作烟花的效果代码,css3+js实现烟花绽放的动画效果(代码示例)
  5. 证照之星老版本升级XE最新版教程说明
  6. 【布局优化】基于蚁狮算法的无线传感器网(WSN)覆盖优化matlab源码
  7. JOS Lab2 Memory Management Part 3 challenge
  8. 新兴产业链 车联网的网络安全和数据安全基本要求
  9. 使用 Java(SpringMVC)+MySQL 实现基于微信小程序的停车管理系统【100011100】
  10. ClaudiaIDE无法修改设置或背景图片的解决方法