网络中所有的桥设备在使能STP协议后,每一个桥设备都认为自己是根桥。此时每台设备仅仅收发配置BPDU,而不转发用户流量,所有的端口都处于Listening状态。所有桥设备通过交换配置BPDU后才进行根桥、根端口和指定端口的选举工作。
“根桥的选举”就是在交换网络中所有运行STP协议的交换机上选举出一个唯一的根桥。“根桥”是STP生成树的最顶端交换设备,是STP生成树的“树根”。根桥的选举依据是各桥的配置BPDU报文中BID(桥ID)字段值,BID字段值最小的交换机将成为根桥。而桥配置BPDU报文中BID字段共有8个字节,即2个字节的桥优先级和6个字节的桥背板MAC,其中桥优先级的取值范围是0~65535,缺省值是32768。在进行BID比较时,先比较桥优先级,优先级值小的为根桥;当桥优先级值相等时,再比较桥的背板MAC地址,MAC地址小的为根桥。
在初始化过程中,根桥的选举要经历两个主要过程:一是每桥上确定自己的配置BPDU;二是在整个交换网络中通过各桥自己发送的配置BPDU进行比较选举整个交换网络中的根桥。
l 桥配置BPDU的确定
一开始每个桥都认为自己是根桥,所以在每个端口所发出的配置BPDU报文中,“根ID”字段都是用各自的BID,“根路径开销”字段值均为0,“发送者BID”字段是自己的BID,“发送端口PID”字段是发送该BPDU端口的端口ID。
每个桥都向外发送自己的配置BPDU的同时也会收到其它桥发送的配置BPDU。但桥端口并不会对收到的所有配置BPDU都用来更新自己的配置BPDU,而是先会进行配置BPDU优先级比较。当端口收到的配置BPDU比本端口的配置BPDU的优先级低时,将丢弃所收到的这个配置BPDU,仍保留自己原来的配置BPDU,否则桥将收到的配置BPDU作为该端口的配置BPDU。然后,桥再将自己所有端口的配置BPDU进行比较,选出最优的BPDU作为本桥的配置BPDU。有关BPDU优先级的比较参见本章8.1.4节。
l 根桥的确定
每个桥的最优配置BPDU确定后,以后各桥间交换的配置BPDU都是各自最优的配置BPDU了。如图8-10所示,用{}标注的四元组表示了由根桥BID(图中以S1_MAC和S2_MAC代表两台设备的BID)、累计根路径开销、发送者BID(SBID)、发送端口PID构成的有序组。配置BPDU会按照Hello Timer规定的时间间隔来发送,默认的时间是2秒。
图8-10 初始信息交互过程示例
一旦某个端口收到比自己优的配置BPDU报文,此端口就提取该配置BPDU报文中的某些信息更新自己的信息。该端口存储更新后的配置BPDU报文后,并立即停止发送自己的配置BPDU报文。在图中,如果S2的端口B由于接收到了来自S1的更好的配置BPDU,从而认为此时S1是根桥,然后S2的其他端口再发送BPDU的时候,在根桥ID字段里面填充的就是S1_BID了。此过程不断交互进行,直到所有交换设备的所有端口都认为根桥是相同的,说明根桥已经选择完毕。
在如图8-11所示的交换网络中列出了S1、S2和S3的桥优先级和桥MAC地址。通过比较发现三台交换机的桥优先级都一样,均为缺省的32768,这时就要进一步比较各交换机的MAC地址,通过比较可以发现S1的MAC地址最小,所以最终S1将选举作为根桥。
图8-11 根桥选举示例
“根端口的选举”就是在所有非根桥上的不同端口之间选举出一个到根桥最近的端口。当然这个“最近”的衡量标准不是根据到达根桥所经过的桥数,而是根据端口到根桥的累计根路径开销最小来判定的。实质上是非根桥上接收到最优配置BPDU的那个端口即为根端口。每个非根桥设备都要选择一个根端口,根端口对于一个设备来说有且只有一个。
累计根路径开销的计算方法是累加从端口到达根桥所路经的各端口(除根桥上的指定端口外)的各段链路的路径开销值(也称链路开销值)。这里要特别注意的是,同一交换机上不同端口之间的路径开销值为0。如果同一桥上有两个以上的端口计算得到的累计根路径开销相同,那么选择收到发送者BID最小的那个端口作为根端口。
在如图8-12所示的交换网络中,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。
图8-12 根端口选举示例
“指定端口的选举”是在每一个物理网段的不同端口之间选举出一个指定端口。“指定端口”与前面所说的“根端口”相对,它可以理解为离下游设备最近的端口,是本物理网段(这里的“网段”是指一个交换机端口所连接的所有设备)中唯一可以接收下游设备数据的端口。它是依次根据以下三项条件来判定的:
(1)某网段到根桥的路径开销最小。
(2)接收数据时发送方(也就是链路对端的桥)的桥ID最小
(3)发送方端口ID最小(端口ID有16位,它是由8位端口优先级和8位端口编号组成的,其中端口优先级的取值范围是0~240,缺省值是128,可以修改,但必须是16的倍数)。
如图8-10所示,假定S1的MAC地址小于S2的MAC地址,则S1为根桥。根据上面的第一项指定端口判定原则可以得出S1的端口A会成为指定端口。在一个物理网段上拥有指定端口的设备被称作该网段的指定桥,由此可以得出图8-10所示的S1-S2间网段的指定桥是S1。
网络收敛后,只有指定端口和根端口可以处于转发状态。其他端口都是Blocking状态,不转发用户流量。根桥的所有端口都是指定端口(除根桥物理上存在环路)。
现在再来看如图8-13所示交换网络中指定端口的选举。S1为根桥,这样很容易根据前面列出的指定端口判定条件中的第一项得出在S2-S1网段,以及S3-S1网段中的指定端口分别为S1的port1和port2端口。而在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端口为阻塞端口了。
图8-13 指定端口选举示例
如果你看后觉得本文不错,请你为我参加的CSDN 2013博客之星评选投上你宝贵的一票,万分感谢!投票链接如下:http://vote.blog.csdn.net/blogstaritem/blogstar2013/lycb_gz