配置RSTP协议生效很简单,但它是如何工作的呢?例如,为什么图7-8中交换机C的F0/3接口会被阻塞而不是其他交换机的接口呢?这个过程包含了一系列的选举环节,RSTP协议的工作机制主要包括下列3个步骤:
(1)选举根交换机。
通过比较交换机的Identifier,越小越优先。
(2)选举根端口。
通过比较路径开销、BPDU中的“Bridge Identifier”和“Port Identifier”字段,越小越优先。
(3)选举指定端口。
通过比较端口所在的交换机距离根交换机的路径开销、端口所在交换机的Identifier和Port Identifier字段,越小越优先。
1.选举根交换机
生成树协议是为了解决网络拓扑中含有环路的问题,树状结构是没有环路的,根交换机相当于生成树的树根,在一个广播域中,根交换机只有一个。
选举根交换机的标准是比较每个交换机的Identifier,它由8个字节组成,后6个字节是该交换机的MAC地址,来自交换机的主控模块。前2个字节中包含了优先级(前4位)与System ID(后12位),其中System ID为以后扩展协议而用,在 RSTP 中为0。优先级默认是32768(0x80 00),优先级可以更改,在交换机配置窗口输入下列指令可以发现允许的优先级范围是从0到61440,并且只能是4096的整数倍,如4096、8192等。
交换机的MAC地址是设备出厂设置的参数,是固定的,不能改动。在交换机背面的标签上可以查看,也可以使用使用“show member”指令查看。其实,每一台锐捷交换机有两个MAC地址,一个用于二层协议(如生成树、堆叠),另外一个用于三层协议(如ARP、IP通信),二层协议使用的MAC地址比三层协议使用的MAC地址小1。查看三层协议使用的MAC地址使用“show arp”指令。
需要注意:在使用指令“show arp”前要确保交换机能够发送ARP报文,可以配置SVI接口。在使用指令“show member”前要确保交换机启动了生成树或堆叠功能。
当一台交换机启动生成树之后,就会向所有已经激活的接口发送BPDU数据包,默认2 s一次,格式如图7-11所示。这种数据包承载了生成树需要协商的一些参数,其中包含了交换机自己的Identifier字段,图中出现的字段名为“Bridge Identifier”,有一些书上称为网桥ID。通过比较各自的Identifier的大小来确定根交换机。
图7-11 RSTP协议的BPDU数据包
交换机Identifier字段的值越小越优先成为根交换机。在比较Identifier的时候先比较优先级,如果优先级一样,再比较交换机MAC地址,因为MAC地址具有唯一性,所以一定可以比较出大小,从而确定根交换机。管理员可以通过配置优先级来控制根交换机的选举。
BPDU数据包中的Root Identifier字段是该交换机认可的根交换机的Identifier,当某台交换机的RSTP刚刚启动时,此时还没有通过交换BPDU数据包选举根交换机,这台交换机就认为自己的Identifier最小,认为自己是这个网络中的根交换机,所以它将数据包中的Root Identifier字段设置成与Bridge Identifier一致,都是自己的Identifier。
BPDU是二层数据包,它的目的MAC地址是多播地址01-80-C2-00-00-00,所有支持RSTP协议的交换机都会接收并处理收到的BPDU。当交换机发现收到的BPDU中的Root Identifier值比自己的Identifier小时,则记录下来,更新自己认可的根交换机Identifier。交换机不断交换BPDU,很快网络中的交换机就可以对根交换机的Identifier达成共识,即完成了根交换机的选举。如果根交换机的选举完成后,有一台新的交换机加入网络中,将引起新一轮的选举,生成树的拓扑可能发生变化。
2.选举根端口
根交换机相当于一棵树(生成树)的根,在根交换机确定后,下一步要确定根端口。每一台非根交换机上要选举出一个距离根交换机最近的端口作为根端口。这里所谓的最近是指端口到根交换机的路径上所经过的所有链路的路径开销的和最小。
图7-12中4台交换机物理连接成环路拓扑,链路带宽都为100 Mb/s,所有交换机的优先级都是默认的32768,因为交换机A的二层MAC地址(001A.A979.BAF4)是四台交换机中最小的,所以交换机A为根交换机。交换机D上的两个端口中,通过F0/4端口只需向上经过一条链路就到达根交换机了,而通过F0/3接口需要向右经过3条链路,从图中我们可以直观地认定F0/4将被选举为交换机D上的根端口。
图7-12 四台交换机连接成的环路拓扑
其实,交换机在衡量哪个端口离根交换机近的时候,不是通过链路数进行判断的,而是通过计算路径开销确定的,路径开销与链路带宽有很大关系,链路带宽越大路径开销越小。IEEE 802.1D和IEEE 802.1T对相同的链路速率规定了不同的路径开销值,802.1D的取值范围是短整型(short)(1~65 535),802.1T的取值范围是长整型(long)(1~200 000 000),如表7-1所示。
表7-1 IEEE 802.1D和IEEE 802.1T规定的路径开销
锐捷交换机默认采用IEEE 802.1T长整型(long),可以通过“spanning-tree pathcost method short”指令将计算路径开销的方法改为短整型,网络内的所有交换机需统一。
在生成树收敛的过程中,确定了根交换机之后,交换机A发送BPDU数据包,其中有一个字段“Root Path Cost”表示发送报文的设备距离根交换机的路径开销,因为交换机A就是根交换机,所有它发出的BPDU报文中此字段为0,交换机A向端口F0/1和F0/4发出BPDU,交换机D从F0/4端口收到后发现报文中“Root Path Cost”字段为0,并且通过检测F0/4端口带宽(100 Mb/s)判定此端口所在链路的开销为19,将0与19相加得到端口F0/4距离根交换机的路径开销为19。
在另外一个方向上,交换机B也从它的F0/1端口收到了交换机A发出的BPDU数据包,其中“Root Path Cost”字段为0,同样通过判断端口所在链路带宽为19,相加后交换机B的F0/1端口距离根交换机的路径开销为19,在此之后,交换机B从F0/2端口向交换机C发出的BPDU中的“Root Path Cost”字段设置成了19,表示交换机B到达根交换机的路径开销,如图7-13所示。(www.xing528.com)
图7-13 BPDU中的Root Path Cost字段
交换机C从F0/2端口收到交换机B发出的BPDU,此时“Root Path Cost”字段为19,再通过相加的计算,交换机C就确定了自己的F0/2端口距离根交换机的路径开销为38。交换机C从F0/3端口向交换机D发出的BPDU中的“Root Path Cost”字段为38,交换机D从F0/3端口收到并计算后就确定了自己的F0/3端口距离根交换机的路径开销为57。
交换机D上F0/4端口到达根交换机的路径开销为19,F0/3端口到达根交换机的路径开销为57,所以交换机D认定F0/4端口为根端口。
因为位置对称,交换机B 上根端口(F0/1)的认定与交换机D类似。可是交换机C上如何认定呢?两个端口到达根交换机的路径开销是一样的,都是38。
当路径开销相同时,比较从不同端口接收到的BPDU中的“Bridge Identifier”字段,即每台交换机的Identifier,Identifier越小越优先。交换机C从端口F0/3接收到的BPDU来自于交换机D,它的Identifier中的优先级为32 768,MAC地址为001A.A97E.1FC5。交换机C从端口F0/2接收到的BPDU来自交换机B,它的Identifier中的优先级也是32 768,但MAC地址为001A.A979.BB4C,比交换机D的小,所以端口F0/2被确定为根端口。
如果不仅路径开销相同,而且接收到的BPDU中的“Bridge Identifier”字段也相同怎么办?图7-14所示拓扑就是这种情况。
图7-14 两台交换机连接成的环路拓扑
交换机C的Identifier小,被选举为根交换机。交换机D从端口F0/1和端口F0/2到根交换机的路径开销一样,收到的BPDU来自同一台交换机C,也相同。此时,将比较接收到的BPDU中的“Port identifier”字段,越小越优先。该字段共2字节,由两部分组成,第1个字节表示端口优先级,默认值是128(0x80),管理员可以通过指令更改,第2个字节表示端口编号,从端口F0/3发出的就是3(0x03)。
交换机C从F0/4端口发出的BPDU中的“Port identifier”字段值为“0x8004”,从F0/3端口发出的BPDU中的“Port identifier”字段值为“0x8003”,交换机D分别从端口F0/1和端口F0/2收到后进行比较,发现从端口F0/2收到的BPDU中的“Port identifier”字段值“0x8003”小于从端口F0/1收到的BPDU中的“Port identifier”字段值“0x8004”,所以认定F0/2端口为根端口。
通过比较路径开销、接收的BPDU中的“Bridge Identifier”字段和“Port identifier”字段,每一台非根交换机都可以确定出一个根端口。
3.选举指定端口
生成树网络中每一个“网段”都必须选举一个指定端口,有且只有一个。交换机两两之间的链路为一个“网段”,图7-12中共有4个网段。端口所在的交换机距离根交换机的路径开销越小越优先选为指定端口。因为根交换机上的端口就在根交换机上,路径开销为0,所以根交换机上每个激活的端口都是指定端口。
在交换机B与交换机C之间的网段中,将会选举交换机B上的F0/2端口为指定端口,原因是交换机B距离根交换机的路径开销比交换机C小。同理,在交换机D与交换机C之间的网段中,会选举交换机D上的F0/3端口为指定端口。
如果距离根交换机的路径开销一样,再比较端口所在交换机的Identifier,越小越优先。图7-15展示了一个路径开销一样的例子,图中交换机B的Identifier最小,为根交换机。交换机D和交换机C之间的网段将会选举交换机C上的F0/3端口为指定端口,因为它们距离跟交换机的路径开销相同,但交换机C的Identifier更小一些。
图7-15 三台交换机连接成的环路拓扑
如果端口所在交换机的Identifier也相同,再比较Port Identifier,即端口Identifier,越小越优先。图7-16中交换机D上存在自环网络,交换机C是根交换机。交换机D的F0/1端口是根端口,在F0/15和F0/17端口之间的网段上选取指定端口的时候要比较端口Identifier,因为这两个端口所在交换机的根路径开销和Identifier都相同,端口F0/15的Identifier为“0x8015”,小于端口F0/17的“0x8017”,所以端口F0/15是指定端口。在交换机D上查看生成树信息如下所示,“Desg”表示指定端口。
图7-16 存在自环的交换机环路拓扑
在交换机D上将原本连接在端口F0/15上的线缆拔掉连接在F0/19端口,再次查看指定端口的选举结果,待生成树稳定后,结果如下所示,端口F0/17变成指定端口,因为端口F0/17的Identifier比端口F0/19的小。
将线缆从F0/19端口恢复到F0/15端口,网络拓扑发生改变,生成树重新计算后,端口F0/15变为指定端口。如果此时想要将指定端口更改为F0/17,可以使用如下指令。
更改F0/17端口的优先级为96(小于默认的128),此时F0/17端口Identifier比端口F0/15的小,变成指定端口。
通过生成树算法选出的根端口与指定端口都将工作在转发状态,不会被阻塞。除了这两种端口,RSTP中还有两种端口:替代端口(Alternate,缩写为Altn)和备份端口(Backup,缩写为Back),它们在生成树稳定时会被阻塞。
替代端口为当前根端口到根交换机提供一条替代路径,例如图7-15中交换机D的F0/3端口,它为交换机D通过端口F0/1到根交换机B提供一条替代路径,如果交换机D与交换机B之间的链路故障,替代端口F0/3就会无时延地进入转发状态。通过生成树算法选出网络中的根端口与指定端口之后,没有被选中的端口如果收到一个来自其他交换机发来的BPDU,并且其中的交换机Identifier没有自己认定的根交换机的小,那么这个端口就会变成替代端口。
备份端口为指定端口到达生成树提供一条备份路径。备份端口仅当两个端口在一个由点对点链路组成的环路上连接时,或者当交换机有两个或多个到达共享LAN网段的连接时可以存在。图7-16中,端口F0/17是备份端口,它为指定端口F0/15提供一条备份路径。当一个端口收到来自自身交换机发来的BPDU,并且这个BPDU携带的端口Identifier更高时,这个端口就会变成备份端口。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。