华为交换机 STP 协议

一、STP简介

以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路。但是使用冗余链路会在交换网络上产生环路,引发广播风暴以及MAC地址表不稳定等故障现象,从而导致用户通信质量较差,甚至通信中断。为解决交换网络中的环路问题,提出了生成树协议STP(Spanning Tree Protocol)。

STP的基本思想是,物理接连可以有闭环环路,但STP可以把某些端口暂时"关闭",从而避免环路。如果某条链路故障,再把"关闭"的端口放开。这样一来,无论链路是否故障,都不会有环路,也就避免了广播风暴。

广义的STP泛指所有的生成树协议,狭义的STP指802.1d定义的标准。

STP有很多版本,802.1d标准定义的是最早的版本,之后还有802.1w标准定义的RSTP(Rapid Spanning Tree Protocol,快速生成树协议)和802.1s定义的MSTP(Multiple Spanning Tree Protocol,多生成树协议)。

二、STP基本概念

  • (Bridge)
    早期的交换机一般只有两个转发端口,所以那时的交换机常常被称为"网桥",或简称成"桥"。后来"桥"这个术语一直沿用至今,但并不是指只有两个转发端口的交换机了,而是泛指具有任意多端口的交换机。目前"桥"和"交换机"这两个术语是可以混用的。
  • 桥的MAC地址(Bridge MAC Address)
    我们知道一个桥有多个转发端口,每个端口有一个MAC地址。通常,我们把端口编号最小的那个端口的MAC地址作为整个桥的MAC地址。
  • BID(Bridge Identifier,桥ID
    一个桥(交换机)的桥ID由两部分组成,即:桥优先级 + 桥的MAC地址;其中桥优先级的值可以人为设定,默认值为0x8000(相当于十进制的32768)。取值范围是0~65535。
  • PID(Port Identifier,端口ID
    一个桥(交换机)的某个端口的端口ID由两部分组成,即:端口优先级 + 端口编号;端口优先级的值是可以人为设定的。不同厂商的设备对于两部分所占用的字节数可能有所不同。
  • 路径开销
    路径开销(Path Cost)是一个端口变量,是STP协议用于选择链路的参考值。STP协议通过计算路径开销,选择较为“强壮”的链路,阻塞多余的链路,将网络修剪成无环路的树形网络结构。在一个STP网络中,某端口到根桥的路径开销就是所经过的各个桥上的各端口的路径开销累加而成,这个值叫做根路径开销(Root Path Cost)。

三、STP选举过程

首先选举根桥(Root Bridge),然后每个非根交换机选举一个根端口(Root Port,RP)和每条链路选举一个指定端口(Designated Port,DP),最后阻塞备用端口(Alternate Port,AP)

1、选举 根桥

选举根桥首先是比较Bridge ID,谁的Bridge ID更小,则谁优先被选择成为根桥。

  • Bridge ID = Priority ( 32768 by default ) + MAC ( MAC address )

  • 首先比较优先级,如果优先级相同其次比较 MAC address

  • Bridge ID共8字节,其中MAC地址占6字节,Priority占2字节。

  • 当交换机第一次启动,它会假设自身为根桥,它会将自身的Bridge ID放入向外发送的BPDU中的Root Bridge ID和Bridge ID中。

  • 当它收到一个更小的Bridge ID,它会将该ID写入自身发送的BPDU中,然后将更新后的BPDU通告给其他的交换机。

  • 通过不断交换BPDU和比较Bridge ID则会选举出最终的根桥。

  • 根桥会生成Configuration BPDU,并每隔2秒钟通过可用路径发送出去。其余的交换机不能生成BPDU,只能对根桥发送的BPDU进行转发(转发的BPDU数据包中的桥ID为转发者的桥ID)。

如图,交换机SW1、SW2、SW3都使用了默认的桥优先级32768。显然SW1的BID最小,所以最终SW1将被选举为根桥。 

2、选举 根端口

根桥确定后,其它没有成为根桥的交换机都被成为非根桥(或非根交换机)。一台非根桥设备上可能会有多个端口与网络相连,为了保证从某台非根桥设备到根桥的工作路径是最优且唯一的,就必须从该非根桥设备的端口中确定出一个被成为 "根端口" 的端口,由根端口来作为非根桥设备与根桥设备之间进行报文交互的端口。一台非根桥设备上最多只能有一个根端口

非根桥在选举根端口时分别依据该端口的根路径开销、对端BID、对端PID和本端PID。一个运行STP协议的网络中,我们将某个交换机的端口到根桥的累计路径开销(即从该端口到根桥经过的所有链路的路径开销的和)称为这个端口的根路径开销(Root Path Cost,RPC)。链路的路径开销(Path Cost)与端口速率有关,端口转发速率越大,则路径开销越小。缺省情况下,路径开销值的计算方法为 IEEE 802.1T(dot1t)标准方法。下面是更改命令

[Huawei]stp pathcost-standard ?
  dot1d-1998  IEEE 802.1D-1998
  dot1t       IEEE 802.1T
  legacy      Legacy

端口速率与路径开销的对应关系如下表所示: 

端口速率 路径开销(802.1D-1998标准) 路径开销( IEEE802.1T 标准)
100Mbit/s 19 200 000
1000Mbit/s 4 20 000
10Gbit/s 2 2 000

如图:SW2的1端口跟SW3的1端口是根端口,因为根桥到这2个端口(红线方向)到路径开销最小,都是 200000,根桥到SW2的2端口(蓝线方向),根桥到SW3的2端口(绿线方向)路径开销都是400000。

3、选举 指定端口

为了防止工作环路的存在,网络中每个网段与根桥之间的工作路径也必须是唯一且最优的。当一个网段有两条及以上的路径通往根桥时,与该网段相连的交换机就必须确定出一个唯一的指定端口。指定端口也是通过比较RPC来确定的,RPC较小的端口将成为指定端口。如果RPC相同,则需要比较BID、PID等。根桥上的所有端口都是指定端口。

指定端口的选举和根端口不同:根端口是每台交换机上的所有端口共同参与选举,自己家里搞内斗,选出唯一仅有的一个;而指定端口是在每条物理链路上选出一个,是相连接的不同交换机之间的端口进行选举,是跟外人斗。

如上图,SW2与SW3这条链路分别可以从红色(SW2的2端口),蓝色(S3的2端口)方向通往根桥,但此时 RPC 开销是一样的,都是 200000,接着比较 BID,SW2小于SW3,所以 SW2的2端口是指定端口。 

每条链路上的指定端口选好后,剩下来的所有端口,STP都会把它们阻塞,叫做阻塞端口(AP,Alternate Port),这里是 SW3的2端口。AP端口被阻塞后,不会再向外发送任何数据,包括BPDU。但是为了STP保持正常,别人给它发的BPDU依然接收,其他数据则不再接收,全部丢弃。至此,STP计算完成,环路消除,生成树收敛。

四、STP端口状态迁移

  • STP选举出根桥,确定了端口角色后,生成树收敛,环路消除。可是,STP的计算毕竟需要一个过程,需要一点时间。那么在选出根桥和确定端口角色之前,是不是还是有环路呢?没错,在生成树收敛前,确实存在临时环路。为了避免临时环路,STP引入了"端口状态"。STP规定,端口在初始情况下,全部都是Blocking状态!什么是Blocking状态?处于这种状态的端口,只会接收BPDU,除此之外啥也不干!既不会接收任何数据,更不会发送任何报文,包括BPDU。这样一来,肯定没有环路了:谁都不发东西,哪来的环路呢。
  • 接着,STP一声令下,所有端口的状态由Blocking变成了Listening状态。处于Listening状态的端口,会发会收BPDU,除此之外啥也不干。既然会发会收BPDU,那么STP就可以开始干活了,选举根桥,确定根端口、指定端口和阻塞端口。
  • 被选为AP的阻塞端口,STP把它们的端口状态由Listening状态立即变回Blocking状态。被选为RP和DP的端口,STP经过Forwarding Delay时间(默认15秒)后,把它们的状态由Listening状态变成Learning状态。
  • 处于Learning状态的端口,和Listening状态一样会发会收BPDU,不会转发其他任何数据,但比Listening状态多做一件事,会学习MAC地址表,也就是会把端口收到报文中的源MAC地址写进MAC地址表中,或更新它的老化时间。
  • 经过Forwarding Delay时间后,STP把Learning状态的端口再变成Forwarding状态。Forwarding状态是端口的最终稳定状态。处于Forwarding状态的端口会收发任何数据,也会学习更新MAC地址表,和正常端口一样。
  • 端口状态迁移完成后,处于Forwarding状态的端口开始正常收发数据,而Blocking状态的端口阻塞,除会接收BPDU外,不转发任何数据,环路因此消除。我们注意到,AP端口一定是Blocking状态,而RP和DP端口一定是Forwarding状态,只是RP和DP端口要变成Forwarding状态,需要经过2倍Forwarding Delay时长,默认30秒后,才开始转发数据。如果经过Max Age时间(默认20秒)未收到任何BPDU,生存期到达最大寿命时,网桥认为为该接口连接的链路发生故障,将重新选举根桥。

五、手动调整根桥,指定端口

1、调整根桥,数值为0或4096的倍数

# 调整主根桥
stp priority 0 或者 stp root primary

# 调整备根桥
stp priority 4096 或者 stp root secondary

2、调整指定端口

stp cost 210000

猜你喜欢

转载自blog.csdn.net/mshxuyi/article/details/130014790