STP计算过程图解分析

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培训资料;有错误的地方请指正。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

格洛米爱学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值