生成树协议就是用来消除网络中可能存在的二层环路,以防止广播风暴,或者数据传输死循环。
华为S系列全面支持STP(生成树协议)、RSTP(快速生成树协议)和MSTP(多生成树协议)。STP是最原始的生成树协议,主要不足是网络拓扑收敛速度慢,RSTP是在STP基础上改进的生成树协议版本,收敛速度明显提高。但STP、RSTP都是单生成树,即一个网络中只生成一棵生成树。MSTP是在RSTP基础上的改进版,最主要特征就是在一个网络中划分多个MST域,在一个MST域中又可划分多个生成树实例,是多生成树协议。
STP基础
STP(SpanningTree Protocol,生成树协议)是根据IEEE802.1D标准建立的,用于在局域网中消除数据链路层环路的协议。运行STP协议的设备通过彼此交互信息发现网络中的环路,并有选择地对某些端口进行阻塞,以最终实现将环路网络结构修剪成无环路的树形网络结构,防止报文在环路网络中不断增生和无线循环。
一、STP的由来
由星型结构单元组成的以太网中通常已是无交叉、无物理环路的树形结构,用不上STP。STP仅在网络中存在冗余链路,或者网络中存在环形网络结构(其实都是存在封闭的物理环路)时才需要采用,目的就是消除网络这些可能造成数据往返传输,形成死循环的冗余链路,以及消除同一个交换机从不同端口上收到多份相同的数据。
在以太网交换网络中为了进行链路备份,提高可靠性,通常会在一些关键设备间使用冗余链路。如下图8-1所示交换机使用了冗余连接。冗余连接会在交换网络上产生环路(如图中S1和S2的port1、port2端口就构成了一个物理封闭环路),并导致广播风暴以及MAC地址表不稳定等故障现象,导致通信中断。
S1的port1端口在从S2的port1端口收到一个广播包后,会再从包括他的port2在内的所有其他端口发送出去,这样S2的port2端口又会收到这个同样的广播包,然后从包括他的port1在内的所有其他端口发送出去,致使S1的port1端口再次收到同样的广播包,形成死循环,最终形成广播风暴。
还有一些网络中存在设备间的封闭环形结构,如下图8-2
为解决交换网络中的环路问题,提出生成树协议STP。
如图8-3,如果没有在交换机上启用STP协议就会产生如下两种情况:
(1)广播风暴导致网络不可用
如HostA发出广播请求,交换机S1和S2的端口port1都将收到这个广播报文,然后从所有其他同网段的端口(port2)广播出去,这时对端交换机与之相连的端口又收到相同的广播报文,这台交换机再从它的其他端口(如port1)转发出去,对端交换机又会收到相同的广播报文,最终导致整个网络资源耗尽,网络瘫痪。
(2)MAC地址表震荡导致MAC地址表项被破坏
即使是单播报文,也有可能导致交换设备的MAC地址表项混乱,以致破坏交换设备的MAC地址表。假设8-3中的没有广播风暴,HostA发送一个单播报文给HostB,如果此时HostB临时从网络中移去,那么交换机上有关HostB的MAC地址表项也被删除。此时HostA发给HostB的单播报文,将被交换机S1和S2上的port1接收,由于S1上没有相应的MAC地址转发表项了,因此该单播报文将被同时泛洪转发到其他端口(如port2)上,交换机S2的端口port2在收到从对端port2端口发来的单播报文后,然后又以泛洪方式从其他端口(如port1)发出去,使交换机S1的port1端口又会收到这个单播报文。如此反复,在两台交换机上,由于不间断的从端口port2、port1收到主机A发来的单播报文,交换机会不停的修改自己的MAC地址表项,从而引起MAC地址表的抖动。最终导致MAC地址表项被破坏。
二、STP基本概念
STP中涉及许多基本概念,如根桥、桥ID、桥优先级、根端口、指定端口、端口状态、端口ID、端口优先级等——“一个根桥、两种度量、三个选举要素、四个比较原则和五种端口状态”一句话形容。
1、一个根桥
树形的网络结构必须有一个树根,于是STP引入了根桥(RootBridge)概念。对于一个运行STP协议的网络,根桥在全网中只有一个,就是网络中具有最小桥ID(BID)的桥。网络中除根桥外的其他桥统称为非根桥。
根桥是整个网络的逻辑中心,但不一定是物理中心,且会根据网络图拓扑的变化而动态变化。一般是需要将环路中所有交换机当中性能最好的一台设置为根桥交换机,以保证能够提供最好的网络性能和可靠性。网络收敛后,根桥会按照一定的时间间隔产生并向外发送配置BPDU,其他设备仅对该报文进行转发,传达拓扑变化记录,从而保证拓扑的稳定。
2、两种度量
在STP生成树的计算中要确定两个方面:一是确定哪台交换机将成为根桥,在非根桥的交换机中哪些端口具有收、发数据的功能,哪些端口又该被阻塞,以便最终形成无环路的树形结构交换网络。这里STP生成树计算所依据的就是STP中的ID和路径开销。
(1)ID:STP中的ID包括:BID(Bridge ID,桥ID)和PID(Port ID,端口ID)两种。
①BID:BID一共64位,高16位为桥优先级(BridgePriority)值,低48位为桥背板MAC地址。BID决定了哪台交换机将成为交换网络中的根桥。在STP中规定BID最小的交换机将被选举为根桥。在进行根桥选举中,首先要比较的就是高16位的桥优先级,它是一个用户可以设定的参数,数值范围从0到61440,值越小,优先级越高。如果各交换机的桥优先级一样才比较他们的BID中桥背板MAC地址,MAC地址最小的将成为该交换网络中的根桥。
②PID:PID由两部分构成,高4位是端口优先级,低12位是端口号。PID只在某些情况下对选择“指定端口”有作用。即在选举指定端口时,两个端口的根路径开销和发送BPDU交换机的BID都相同的情况下,比较端口的PID,PID小者为指定端口。端口优先级可以影响端口在指定生成树实例上的角色。
(2)路径开销:路径开销(PathCost)是一个端口参数,由具体端口的链路速率决定(对于聚合链路,链路速率是聚合组中所有状态为Up的成员口的速率之和),是STP协议用于选择链路的参考值。STP协议通过计算各端口的路径开销,选择较为“强壮”的链路,阻塞多余的链路,将网络修剪成无环路的树形网络结构。
在一个运行STP协议的交换网络中,某端口到根桥累计的路径开销就是所经过的各个桥上各端口的路径开销累加值,这个值叫做根路径开销(Root Path Cost)。根桥上所有端口的根路径开销,以及同交换机上不同端口间的路径开销值均为零。
(3)三个选举要素
由环形网络拓扑结构修剪为树形结构,需要使用STP中的3个选举要素,即根桥、根端口和指定端口。
PC为Path Cost,即“路径开销”,RPC为Root PathCost,即“根路径开销”。
(1)根桥
根桥(Root Bridge,RB)就是BID最小的桥设备,通过交互配置BPDU报文来选出最小的BID,如上图的S1为根桥。
(2)根端口
根端口(Root Port,RP)负责向根桥方向转发数据,是当前桥设备上去往根桥的“根路径开销”(Root Path Cost,RPC)值最小的端口,也即非根桥的交换机上离根桥“最近”的端口。
当多个端口根路径开销相同时,会先比较指定桥ID,对应最小指定桥ID的端口会成为根端口;当指定桥ID也相同时,才会比较指定桥上的PID,指定桥上具有最小PID的对应端口会成为根端口。端口优先级的取值范围为0到255,值越小,端口优先级越高。在一个运行STP协议的设备上根端口有且只有一个,但根桥上没有根端口。
(3)指定端口
“指定端口”(DesignatedPort,DP)与“指定桥”(Designated Bridge,DB)息息相关,但不是一一对应,如何确定要分以下两种情况。
①对于一台设备而言,与本机直接相连并且负责向本机转发配置消息的设备就是指定桥,指定桥中向本桥转发配置消息的端口就是指定端口。
②对于一个局域网而言,负责向本网段转发配置消息的设备就是指定桥,指定桥上向本网段转发配置消息的端口就是指定端口。
如上图,AP1、AP2、BP1、BP2、CP1、CP2分别表示设备S1、S2、S3的端口。S1通过端口AP1向S2转发配置消息,则S2的指定桥就是S1,指定端口就是S1的端口AP1。而与局域网LAN相连的有S2和S3两台设备,如果配置S2负责向LAN转发配置消息,则LAN的指定桥就是S2,指定端口就是S2的BP2。
一旦根桥、根端口、指定端口选举成功,则整个树形拓扑建立完毕。在拓扑稳定后,只有根端口和指定端口转发流量,其他的非根、非指定端口(称为阻塞端口)都处于阻塞(Blocking)状态,它们只接收STP协议报文而不转发用户流量,如图8-4中的S4的A端口。
4、四个比较原则
STP生成树的生成计算中依据的就是各个端口在发送配置BPDU中所携带的4个优先级向量:{根桥ID,累计根路径开销,发送者BID,发送端口PID}。
(1)根桥ID:每个STP网络中有且仅有一个根。
(2)累计根路径开销:发送配置BPDU的端口到根桥的距离
(3)发送者BID:发送配置BPDU的设备的BID
(4)发送端口PID:发送配置BPDU的端口的PID。
STP网络中的其他设备收到配置BPDU消息后,将比较这些字段值,然后按照以下4个基本比较原则(在STP计算过程中,遵循数值越小越好的原则)。
(1)最小BID:用来选举根桥。运行STP协议的设备之间根据各自发送的配置BPDU中BID字段值最小的作为根桥。根桥的选举原则是通过BID中的桥优先级和桥MAC地址进行比较,先进行桥优先级比较,优先级最高(优先级最小)的将成为根桥;桥优先级相同再比较桥MAC地址,MAC地址最小的将成为根桥。
(2)最小累计根路径开销:用来在非根桥上选择根端口。在运行STP协议的设备上到达根桥的总路径开销值最小的端口作为该桥的根端口。在根桥上,每个端口到根桥的根路径开销都是0,所以根端口都是在指定桥上的,而不是在根桥上的。
(3)最小发送者BID:用来在非根桥上选择指定桥和根端口。当一台运行STP协议的设备要在两个以上根路径开销相等的非根桥中选择指定桥,要在接收配置BPDU的多个端口之中选择根端口时,通过STP协议计算将选择接收到的配置BPDU中发送者的BID较小的那个桥作为自己的指定桥,接收该配置BPDU的端口就作为自己的根端口。
如图8-4,假设S2的BID小于S3的BID,如果S4的A、B两个端口接收到的BPDU里面的根路径开销相等,那么S2将成为S4的指定桥,S4端口B将成为S4的根端口。
(4)最小PID:用于在根路径开销相同的情况下,阻塞PID值较大的端口,PID值最小的端口将成为该桥上的指定端口。
如上图所示情况下PID才起作用,S1的端口A的PID小于端口B的PID,由于两个端口上收到的BPDU中根路径开销、发送设备的BID都相同,所以消除环路的依据就只有PID。
5、五种端口状态
运行STP协议的设备上有以下5种端口状态
(1)Forwarding:转发状态,此时端口既转发用户流量也转发BPDU报文。只有根端口或指定端口才能进入Forwording状态。
(2)Learning:学习状态,此时设备会根据收到的用户流量构建MAC地址表,但不转发用户流量。这是一种过渡状态,增加Learning状态为防止临时二层环路。
(3)Listening:监听状态,此时设备正在确定端口角色,将选举出根桥、根端口和指定端口。这是一种过渡状态。
(4)Blocking:阻塞状态,此时端口仅可接收并处理BPDU,不转发用户流量。
(5)Disabled:禁用状态,此时端口不仅不能转发BPDU报文,也不能转发用户流量。端口状态为Down。
①:端口从禁用状态开始初始化或者使能后首先进入阻塞状态。
②:在端口突然被禁用或者链路失效时将从当前其他所有状态下直接进入到禁用状态。
③:在端口被选举为根端口或指定端口后,由阻塞状态进入到监听状态。
④:在端口不再是根端口或指定端口时,会从当前其他状态直接进入阻塞状态。
⑤:当新选出的根端口和指定端口要经过两倍的转发延时(即从监听状态进入学习状态,再从学习状态进入转发状态)后才能进入转发状态,以确保新的配置信息传遍整个网络,防止临时环路的产生。
华为设备缺省情况处于MSTP模式,当从MSTP模式切换到STP模式,运行STP协议的设备上端口支持的端口状态仍然保持和MSTP支持的端口状态一样(MSTP端口状态与RSTP端口状态相同),支持的状态仅包括Forwarding(转发)、Learning(学习)和Discarding(丢弃)三种。
三、STP的3个定时器
对于STP,影响端口状态和端口收敛有以下3个定时器参数。
1、Hello Time(Hello定时器)
Hello定时器是指运行STP协议的设备发送配置BPDU的时间间隔,即设备会每隔HelloTime时间向周围的设备发送配置消息BPDU,以确认链路是否存在故障。
当网络拓扑稳定之后,该定时器的修改只有在根桥修改后才有效。新的根桥会在发出的BPDU报文中填充适当的字段以向其他非根桥传递该定时器修改的信息。当拓扑变化之后,TCN BPDU的发送不受这个定时器的管理。
2、ForwardDelay(转发延时)
转发延时是设备进行状态迁移的延迟时间,是指一个端口处于Listening和Learning状态的各自持续时间,缺省是15s。即Listening状态持续15s,随后进入Learning状态,然后再持续15s。
链路故障会引发网络重新进行生成树的计算,生成树的结构将发生相应的变化。但是重新计算得到的新配置消息不可能立即传遍整个网络,如果此时新选出的根端口和指定端口就立即开始数据转发的话很可能造成临时的二层环路。为此,STP采用了一种状态迁移机制,新选出的根端口和指定端口要经过两倍的Forward Delay延时后才能进入转发状态,这个延时保证了新的配置消息传遍整个网络,从而防止了临时环路的产生。
3、Max Age(最大生存时间)
最大生存时间是指端口的BPDU报文的老化时间,可在根桥上通过命令人为改动老化时间。
Max Age通过配置BPDU报文的传输,可保证MaxAge在整网中一致。运行STP协议的网络中非根桥设备收到配置BPDU报文后,会对报文中的Message Age(消息生存时间)和Max Age进行比较:如果Message Age小于等于Max Age,则该非根桥设备继续转发配置BPDU报文;如果Message Age大于Max Age,则该配置BPDU报文将被老化。该非根桥设备直接丢弃该配置BPDU,可认为网络直径过大,导致根桥连接失败。
当配置BPDU从根桥发出时报文中的MessageAge值为0。当其他桥收到配置BPDU时,Message Age值为从根桥发送到当前桥接收到BPDU的总时间,包括传输延时等。实际现实中,配置BPDU报文每经过一个桥,Message Age增加1。
四、STP BPDU报文
STP协议采用的是BPDU(BridgeProtocol Date Unit,桥协议数据单元)类型报文,也称为配置消息。STP就是通过在设备之间传递BPDU来确定最终修剪完成的网络拓扑结构。STP BPDU又分为两大类。
(1)配置BPDU(ConfigurationBPDU):用来进行生成树计算和维护生成树拓扑的报文,是初始的阶段中各交换机发送的BPDU消息。
(2)TCN BPDU(TopologyChange Notification BPDU):当拓扑结构发生变化时,下游设备用来通知上游设备网络拓扑结构发生变化的报文。它是当拓扑稳定后,网络中出现了链路故障,网络拓扑发生改变时所发送的BPDU消息。
“配置 BPDU”是一种心跳报文,只要端口使能STP协议,则设备就会按照Hello Time定时器规定的时间间隔从指定端口发送配置BPDU;而TCN BPDU是在设备检测到网络拓扑发生变化时才发出的。STP BPDU报文被封装在以太网数据帧中,此时目的MAC地址是组播MAC地址:01-80-C2-00-00-00,在LLC头部中IEEE为STP保留的DSAP和SSAP值均为0x42,Control为0x03。
1、配置BPDU
在STP中通常所说的BPDU报文多指配置BPDU。在初始化过程中,每个桥都主动发送配置BPDU。但在网络拓扑稳定后,只有根桥主动发送配置BPDU,其他桥在收到上游传来的配置BPDU后才触发发送自己的配置BPDU。配置BPDU在以下3种情况下会产生:
(1)只要端口使能STP,则配置BPDU就会按照HelloTime定时器规定的时间间隔从指定端口发出。
(2)当根端口收到配置BPDU时,根端口所在的设备会向自己的每一个指定端口复制一份配置BPDU。
(3)当指定端口收到比自己差的配置BPDU时,会立刻向下游设备发送自己的配置BPDU。
配置BPDU的长度至少要35个字节,包含了桥ID、路径开销和端口ID等参数,如下图。只有当“发送者BID”或“发送端口PID”两个字段中至少有一个和本桥接收端口不同,所收到的这个BPDU报文才会被处理,否则丢弃。这样避免了处理和本端口信息一致的BPDU报文。
Flags(标志)字段是一个字节长,但是在STP配置BPDU中只用了最高位和最低位两个比特位。
2、TCN BPDU
TCN BPDU是指在下游拓扑发生变化时向上游发送拓扑变化通知,直到根桥。TCN BPDU在如下两种情况下会产生。
(1)端口状态变为Forwarding状态,且该设备上至少有一个指定端口。
(2)指定端口在收到TCNBPDU后向根桥复制TCN BPDU。
TCN BPDU中的内容比较简单,只有表8-1中列出的前3个字段:协议ID、协议版本和消息类型,长度只有4个字节,且“消息类型”字段是固定值0x80。
3、BPDU优先级
当桥收到其他桥发来的配置BPDU时会视情况对自己的配置BPDU进行更新,那么当桥的多个端口收到多个不同的配置BPDU时该以哪个为准呢?这就要使用配置BPDU的优先级来区分。即当同一桥收到了多个不同的配置BPDU时,优先级高的BPDU则采用,其他的将被丢弃。假定有两条配置BPDU X和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、根路径开销以及桥ID都相同,但X的端口ID小于Y,则X优于Y。
五、STP的不足之处
STP协议虽然能够解决环路问题,但是由于网络拓扑收敛慢,影响通信质量。因为在STP协议中任何端口要从Blocking(阻塞)状态转换到Forwarding(转发)状态必须经过两倍转发延时(包括由监听状态到学习状态的等待时间和由学习状态到转发状态的等待时间),至少30s时间。
STP的不足主要体现在以下几个方面
(1)STP没有细致区分端口状态和端口角色,不利于初学者学习及部署。
在STP协议中划分了5种端口状态,然而其中的Listening、Learning和Blocking三种状态并没有实质上的区别,都不转发用户流量。从使用和配置角度讲,端口之间最本质的区别并不在于端口状态,而是在于端口扮演的角色。而在STP中,根端口和指定端口既可能都处于Listening状态,又可能都处于Forwarding状态,没有一个很好的体现。
(2)STP协议采用的是被动算法,依赖定时器(如转发延时定时器)等待的方式判断拓扑变化,所以收敛速度慢。
(3)STP协议中的算法规定在稳定的拓扑中只有根桥才能主动发出配置BPDU报文,而其他桥设备只能被动地进行转发,直到传遍整个STP网络。导致拓扑收敛慢。
正因STP以上不足,IEEE于2001年发布的802.1W标准定义了RSTP(Rapid Spanning-Tree Protocol,快速生成树协议)。STP拓扑计算原理深入剖析
STP协议拓扑结构生成树的计算过程要区分初始化阶段和拓扑结构稳定后这两个阶段。
一、生成树初始化阶段的角色选举
网络中所有的桥设备在使能STP协议后,每一个桥设备都认为自己是根桥。此时每台设备仅仅收发配置BPDU,而不转发用户流量,所有的端口都处于Listening状态。所有桥设备通过交换配置BPDU后进行根桥、根端口和指定端口的选举工作。
1、根桥的选举
“根桥的选举”就是在交换网络中所有运行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(图中以S1_MAC和S2_MAC代表两台设备的BID)、累计根路径开销、发送者BID(SBID)、发送端口PID构成的有序组。配置BPDU会按照Hello Timer规定的时间间隔来发送,缺省的时间是2s。
一旦某个端口收到比自己优的配置BPDU报文,此端口就提取该配置BPDU报文中的某些信息更新自己的信息。该端口存储更新后的配置BPDU报文后,立即停止发送自己的配置BPDU报文。图中如果S2的端口B由于接收到了来自S1的更好的配置BPDU,从而认为此时S1是根桥,然后S2的其他端口再发送BPDU的时候,在根桥ID字段里面填充的就是S1-BID了。此过程不断交互进行,直到所有交换设备的所有端口都认为根桥是相同的,说明根桥已经选择完毕。
如下图的交换网络中列出了S1、S2和S3的桥优先级和桥MAC地址。通过比较发现三台交换机的桥优先级都一样,均为缺省的32768,这时就要进一步比较各交换机的MAC地址,通过比较可以发现S1的MAC地址最小,所以最终S1将选举作为根桥。
2、根端口的选举
“根端口的选举”就是在所有非根桥上的不同端口之间选举出一个到根桥最近的端口。这个“最近”的衡量标准不是根据到达根桥所经过的桥数,而是根据端口到根桥的累计根路径开销最小来判断的。实质上是非根桥上接收到最优配置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。
3、指定端口的选举
“指定端口的选举”是在每一个物理网段的不同端口之间选举出一个指定端口。“指定端口”与“根端口”相对,他可以理解为离下游设备最近的端口,是本物理网段(这里的“网段”是指一个交换机端口所连接的所有设备)中唯一可以接收下游设备数据的端口。它是依次根据以下三项条件来断定的。
(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.0C12-3458,经过比较发现S3的port3的发送方的桥ID更小,所以最终选举为S3-S2网段的指定端口。这样一来就可确定port6端口为阻塞端口了。
二、拓扑发生变化后的角色选举
拓扑稳定后,根桥仍然按照Hello定时器规定的时间间隔发送配置BPDU报文,非根桥设备从根端口收到配置BPDU报文,通过指定端口转发。如果接收到优先级比自己高的配置BPDU,则非根桥设备会根据收到的配置BPDU中携带的信息更新自己相应的端口存储的配置BPDU信息。
在网络拓扑结构发生变化后,下游设备会不断地向上游设备发送TCN BPDU报文。上游设备在收到下游设备发来的TCN BPDU报文后,只有指定端口处理TCN BPDU报文。其他端口也有可能收到TCN BPDU报文,但不会处理。上游设备会使用Flags字段中TCA(拓扑变化确认)标志位置1的配置BPDU报文发送给下游设备,告知下游设备停止发送TCN BPDU报文。与此同时,上游设备复制一份TCN BPDU报文,向根桥方向发送。当根桥收到TCN BPDU报文后,根桥会使用Flags字段中TC(拓扑变化)标志位置1的配置BPDU报文向对应下游设备回送,通知下游设备直接删除发生故障的端口的MAC地址表项。
由此可以看出,在发生拓扑变化时,下游设备使用TCN BPDU报文向上游设备通知,但上游设备使用的是TC位,或TCA位置1的配置BPDU,而不是TCN BPDU通知下游设备。即TCN BPDU报文用来向上游设备乃至根桥通知拓扑变化;TCA标志位置1的配置BPDU报文主要是上游设备用来告知下游设备已经知道拓扑变化,通知下游设备停止发送TCN BPDU报文;TC标志位置1的配置BPDU报文主要是上游设备用来告知下游设备拓扑发生变化,要求下游设备直接删除有故障的端口的MAC地址表项,从而达到快速收敛的目的。
以上图8-13为例说明根桥、根桥的指定端口分别发生故障时,网络拓扑如何收敛。
当根桥发生故障时,设备S2和设备S3之间将重新选举根桥。设备S2和设备S3之间根据交互的配置BPDU报文,选出新的根桥S3,如图8-14.再假设根桥指定port1端口发生故障时,S2和S3通过交互配置BPDU报文将port6选举为根端口,如图8-15所示。同时,port6变为Forwarding状态后,会向外发送TCN报文,根桥收到TCN报文后向其他设备发送TC报文,通知其他设备直接删除MAC表项。