华为HCIA-Datacom认证指南
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

4.2 STP的选举

生成树协议通过交互BPDU报文来计算一棵无环树,如图4-2所示,展示了BDPU报文格式。

BPDU报文格式说明如表4-1所示。

BPDU报文格式实例如图4-3所示,该图展示了抓取的BPDU报文格式及其携带的数据内容。

图4-2 BPDU报文格式

表4-1 BPDU报文格式说明

(续表)

图4-3 BPDU报文格式实例

4.2.1 根桥选举

根桥是STP树的根节点,相当于一棵树的树根。要想生成一棵STP树,首先需要选举出树根。根桥是整个交换网络的中心,网络中只能存在一个根桥。通常核心交换机是STP的根交换机。

运行STP的交换机初始启动后都会认为自己是根桥,并在发送的BPDU报文中标识自己为根桥。当交换机从网络中收到其他交换机发送的BPDU报文后,会将BPDU报文中的网桥ID和自己的网桥ID进行对比,交换机不断地交互BPDU报文并对比网桥ID,最终会选举出一台网桥ID最小的交换机为根桥。网桥ID的比较原则是,先比较网桥ID优先级,越小越优先,默认优先级为32768;如果优先级一样,则比较系统MAC地址(而非接口MAC地址),MAC地址越小越优先。根桥选举如图4-4所示,该图描述了根桥选举的过程。

图4-4 根桥选举

由图4-4可知,交换机初始化启动后在发送的BPDU报文中都会标识自己为根桥,通过相互交互BPDU报文,比较网桥ID,最终选举出SWA为根桥,因为SWA的网桥ID最小(先比优先级后比MAC地址)。

4.2.2 根端口选举

根桥选举完成后,除被选为根桥的交换机外其他交换机都成为非根桥,而每一台非根桥交换机都需要选举出一个到达根桥的根端口。由根端口来作为该非根桥与根桥之间进行报文交互的端口,一台非根桥交换机上最多只能有一个根端口。

STP通过比较根路径开销来选举根端口,将交换机的端口到根桥的累计开销(即从该端口到达根桥经过的所有链路的开销之和)称为该端口的根路径开销(Root Path Cost,RPC)。而交换机本地端口的开销称为PC(Path Cost),该开销的计算与端口速率有关,端口的速率越大,开销越小。端口速率与路径开销的对应关系参见表4-2,该表给出了不同标准定义的路径开销列表。

表4-2 不同标准定义的路径开销列表

华为默认使用IEEE 802.1t标准计算路径开销,一定要理解根路径开销(RPC)和路径开销(PC)的区别,根路径开销是指交换机的端口到达根桥的路径开销之和。而路径开销是本地端口的开销,是根据端口速率来计算的。如图4-5所示,描述了根端口的选举过程。

图4-5 根端口的选举过程

端口RPC计算公式是:BPDU报文中通告的RPC+接收端口的PC。

完成根桥选举后,所有的非根桥都需要选举出一个到达根桥的根端口。在图4-5中,以SWB为例解释根端口的选举过程。SWB从自己的G0/0/1和G0/0/2端口都收到了BPDU报文,根据计算公式,SWB的G0/0/1端口的RPC为20000(即0+20000),G0/0/2端口的RPC为40000(20000+20000),G0/0/2端口收到是SWC转发的BPDU报文,在该BPDU报文中通告了SWC自己到达根桥的RPC为20000,所以G0/0/2端口的PRC为40000。交换机优先选举RPC小的端口成为根端口(根端口可以用RP标识)。采用同样的算法在SWC上做计算,可知SWC的G0/0/1端口为根端口。

通过上面的实例我们学习了根端口的选举,根端口的选举可以参考以下步骤进行:

① 比较BPDU报文中的根桥ID(RID),优选RID小的(在一个网络中只能存在一个根桥,所以RID都是一致的)。

② 如果RID一致,比较到达根桥的累计路径开销(RPC),优选RPC小的。

③ 如果到达根桥的RPC一致,比较BPDU报文发送者(即上游交换机)的网桥ID(BID),优选BID小的。

④ 如果发送者的BID一致,比较BPDU报文发送者的端口ID,优选端口ID小的。

⑤ 如果发送者的端口ID一致,比较BPDU报文接收者的本地端口ID,优选本地端口ID小的。

在图4-5中,通过比较RPC选举出根端口,那么在什么场景下会执行后面的比较顺序呢?在如图4-6所示的场景中,需要通过比较发送方(SWA)的端口ID选举根端口,即根据发送者端口ID选举根端口。

图4-6 根据发送者端口ID选举根端口

在图4-6中,SWA为根桥,那么SWB哪个端口会成为根端口呢?我们可以通过上面的选举步骤来进行选举。

① 比较RID,两个端口收到的BPDU报文中RID都是SWA,RID一致。

② 比较两个端口到达根桥的RPC,由于两个端口都是G口,计算出到达根桥的RPC都是20000,RPC一致。

③ 比较BPDU发送者的BID,都是SWA发送的,也无法比较出结果。

④ 比较BPDU发送者的端口ID,SWA从G0/0/1端口发送的BPDU报文中标识的端口ID为1,从G0/0/2端口发送的BPDU报文中标识端口ID为2,SWB通过比较端口ID(先比较端口优先级,如果优先级一致再比较端口ID),最终优选G0/0/2为根端口。

4.2.3 指定端口选举

根端口保证了非根桥到根桥路径的唯一性和最优性,为了防止环路在每条链路上还需要再选举一个指定端口。首先比较报文到达根桥的累计根路径开销(RPC),累计根路径开销最小的端口就是指定端口;如果RPC相同,则比较端口所在交换机自身的网桥ID(BID),网桥ID最小的端口被选举为指定端口。如果通过RPC和BID选举不出指定端口,则比较接收者本地端口ID,本地端口ID最小的被选举为指定端口。

指定端口选举如图4-7所示,该图描述了指定端口的选举过程。根端口选举后在每条链路上还需要选举一个指定端口。通常根桥的所有端口都是指定端口,和根桥连接的链路无须选举。在图4-7中,SWB和SWC之间的链路上哪个端口会被选举为指定端口呢?我们套用之前的选举步骤进行选举:

① 比较RPC,SWB的G0/0/2的RPC继承自G0/0/1,即为20000,SWC的G0/0/2也为20000。该原则无法确定指定端口。

② 比较端口所在交换机的网桥ID(BID),SWB的BID为32768:00-01-02-03-04-BB,SWC的BID为32768:00-01-02-03-04-CC。先比较SWB和SWC的优先级,优先级一样;继续比较系统MAC地址,优选MAC地址小的。由于SWB的MAC较小,最终SWB的G0/0/2端口被选举为指定端口。

图4-7 指定端口选举

4.2.4 替代端口选举

如果一个端口既不是根端口也不是指定端口,那么该端口会被阻塞(Blocking),变为替代端口(Alternate Port,AP)。通常替代端口是根端口的备份,一旦根端口发生故障,替代端口将升级为根端口。阻塞后的端口只会侦听并接收BPDU报文,但不会发送BPDU报文和数据帧。替代端口选举如图4-8所示,在该图中,SWC的G0/0/2端口既不是根端口也不是指定端口,所以SWC的G0/0/2端口为替代端口,不转发用户数据。

图4-8 替代端口选举

4.2.5 边缘端口

将交换机连接终端(计算机、服务器等)的端口配置为边缘端口可以减少端口30秒的转发延时,同时边缘端口的开启和关闭不会造成因网络拓扑改变(TCN BPDU)带来的MAC地址表频繁被老化所导致的短暂广播风暴问题。如果从一个边缘端口收到一个配置BPDU报文,则该边缘端口将丢失边缘端口角色,变成一个普通端口并执行生成树选举。边缘端口支持配置STP安全策略,如BPDU防护和BPDU过滤等安全策略,该策略可防止边缘端口因接入支持STP的交换机而导致的网络拓扑改变。

边缘端口由于其快速转发特性,也会出现临时环路问题。例如,将两个边缘端口连接到一起或者接入一台不支持STP的交换机会造成临时环路,临时环路的持续时间为0~2秒,边缘端口收到配置BPDU报文后会放弃边缘端口角色,变成一个普通端口进行生成树选举,从而解决环路问题。

4.2.6 STP端口角色及端口状态

STP有3种端口角色:根端口、指定端口、替代端口。端口角色的选举在前面章节中已经详细介绍,这里不再赘述。

STP有5种端口状态:Disabled、Listening、Learning、Forwarding、Blocking状态。

① Disabled状态:禁用状态,端口不处理和转发BPDU报文,也不转发数据帧。

② Listening状态:侦听状态,端口可以接收和转发BPDU报文,但不能转发数据帧。

③ Learning状态:学习状态,端口接收数据帧并构建MAC地址表,但不转发数据帧。增加Learning状态是为了防止未知单播数据帧造成的临时环路。

④ Forwarding状态:转发状态,端口既可转发数据帧也可转发BPDU报文。只有根端口或指定端口才能进入该状态。

⑤ Blocking状态:阻塞状态,端口仅接收并处理BPDU报文,但不转发BPDU报文和数据帧,此状态是替代端口的最终状态。

STP端口状态转换如图4-9所示,STP端口状态间的转换条件如下:

① 端口初始化或使能。

② 端口被选为根端口或指定端口。

③ 端口不再是根端口或指定端口。

④ Forward Delay计时器超时(15秒)。

⑤ 端口被禁用或链路失效。

STP的交换机端口初始启动后,首先会从Disabled状态进入Blocking状态。在Blocking状态下,端口只能接收和分析BPDU报文,但不能发送BPDU报文。如果端口被选举为根端口或指定端口,则会进入Listening状态,此时端口接收并发送BPDU报文,这种状态会持续一个Forward Delay时间,默认为15秒。然后,如果没有因“意外情况”而退回到Blocking状态,则该端口进入到Learning状态,该状态同样会持续一个Forward Delay时间。处于Learning状态的端口可以接收和发送BPDU报文,同时开始构建MAC地址表,为转发用户数据帧做好准备,但是处于Learning状态的端口仍然不能转发数据帧,只是构建MAC地址表。最后,端口由Learning状态进入Forwarding状态,开始转发数据帧。在整个状态的迁移过程中,端口一旦被关闭或者发生了链路故障,就会进入Disabled状态。

图4-9 STP端口状态转换