一、STP出现的背景
1. 单点故障
如图9-1所示,PC1和PC2通过LSW1相互通信,如果LSW1出现了故障,那么PC1和PC2将不能相互通信,这种现象我们称之为单点故障。为了解决这个问题,我们提出了冗余的拓扑结构。
图9-1单点故障
2. 冗余
如图9-2所示,PC1和PC2相互通信可以通过LSW1也可以通过LSW2,比如PC1和PC2相互通信通过LSW1,如果LSW1出了问题,那么PC1和PC2通信可以通过LSW2相互通信,通过这种冗余的拓扑结构解决了单点故障的问题,但是它又带来了新的问题。
图9-2 冗余的拓扑结构
3. 冗余带来新的问题
首先,假设所有的交换机的MAC地址表都为空,PC1和PC2通信,PC1发送一个广播的数据帧其转发流程如图9-3所示,它会形成一个顺时钟的环路。
① 从PC1发送给HUB1。
② HUB1收到的是一个广播帧,复制和放大,分别发送的LSW1和LSW2(注:我们只分析发送给LSW1的数据帧)。
③ LSW1收到数据帧以后,基于源MAC地址学习(G0/0/1-A),因为收到的是一个广播帧,除源端口以外所有端口转发,所以数据帧发送给了HUB2。
④ HUB2收到数据帧以后,复制和放大,把数据帧发送给PC2和LSW2。
⑤ LSW2收到数据帧以后,基于源MAC地址学习(G0/0/3-A),因为收到的是一个广播帧,除源端口以外所有端口转发,数据帧发送给HUB1
⑥ HUB1收到数据帧以后,复制和放大,把数据帧发送给PC1和LSW1,这样就形成了一个顺时钟的环路。
图9-3 顺时针的环路
接下来我们再看HUB1发送给LSW2的数据帧怎么转发,它的转发流程如图9-4所示,它会形成一个逆时钟的环路。
① HUB1收到这个数据帧,复制和放大,把数据帧转发给LSW2。
② LSW2收到数据帧以后,基于源MAC地址学习(G0/0/4-A),因为收到的是一个广播帧,所以会除源端口以外所有端口转发。这个数据帧会发达给HUB2。
③ HUB2收到数据帧以后,复制和放大,把数据帧发送给PC2和LSW1。
④ LSW1收到数据帧以后,基于源MAC地址学习(G0/0/2-A),因为收到的是一个广播帧,所以会除源端口以外所有端口转发,它会把数据帧转发给HUB1。
⑤ HUB1收到数据帧以后,复制和放大,它会把数据帧转发给PC1和LSW2。
图9-4 逆时钟的环路
通过以上分析我们可以得出,冗余的网络拓扑可以带来以下问题:
环路产生广播风暴,广播风暴会导致网络瘫痪。
MAC地址表震荡导致MAC地址表项被破坏。
多帧复制,PC2会收到N个广播帧。
4. STP
以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路,但是这也带来了网络环路的问题。网络环路会引发广播风暴和MAC地址表震荡等问题,导致用户通信质量差,甚至通信中断。为了解决交换网络中的环路问题,IEEE提出了基于802.1D标准的生成树协议STP(Spanning Tree Protocol)。STP是局域网中的破环协议,运行该协议的设备通过彼此交互信息来发现网络中的环路,并有选择地对某些端口进行阻塞,最终将环形网络结构修剪成无环路的树形网络结构,达到破除环路的目的。另外,如果当前活动的路径发生故障,STP还可以激活冗余备份链路,恢复网络连通性。
二、 STP的选举
STP 是通过把整个存在环路的交换网络计算出一棵无环路的交换树来实现环路消除的
基本原则如下。
① 整个交换网络中选举一个交换机担当根桥,其他的交换机均为非根桥。
② 每个非根桥交换机选举一个根端口。
③ 每个物理网段选举一个指定端口。
④ 阻塞非根桥上的非根端口和非指定端口。
虽然STP 中有3种端口角色,但实际只有根端口和指定端口这两种是可转发用户数
据且呈转发状态的,其他均为预备端口,呈阻塞状态。
1.选择根桥
网络初始化时,网络中所有的STP设备都认为自己是”根桥”,根桥ID为自身的设备ID。通过交换配置消息,设备之间比较根桥ID,网络中根桥ID最小的设备被选为根桥。
桥ID=bridge ID+MAC地址,bridge ID的取值范围为0-65535(必须是4096的倍数)。
读者可以这样理解:
第一步:比较bridge ID,越小越优,如图9-5所示,SW1的bridge ID为4096,SW2的bridge ID为4096,SW3的bridge ID为0,通过比较可以看到SW3的bridge ID最小,所以SW3成为了根网桥。SW2与SW3我们称之为非根网桥。
9-5 比较bridge ID
第二步:如果bridge ID相同,我们再比较MAC地址,越小越优,如图9-6所示,三台交换机的bridge ID都为4096,通过比较bridge ID我们不能确认哪台交换机是根桥,所以我们要比较它们的MAC地址,SW1的MAC地址为4c1f-aabc-102a,SW2的MAC地址为4c1f-aabc-102b,SW3的MAC地址为4c1f-aabc-102c,我们可以看出SW1的MAC最小,所以SW1为根桥,SW2与SW2我们称之为非根网桥。
9-6 比较MAC地址
【说明】
u 网络中拥有最小桥ID的交换机成为根桥。
u 在一个连续的STP交换网络中只会存在一个根桥。
u 根桥的角色是可抢占的。
u 为了确保交换网络的稳定,建议提前规划STP组网,并将规划为根桥的交换机的桥优先级设置为最小值0。
2.选择根端口
我们选出了根桥之后,剩下的交换机我们把它叫做非根网桥,每一个非根网桥有且仅有一个根端口,接下来我们来看一下,根端口的选举原则:
第一步:到根网桥的开销最小
华为在其交换设备上定义了3种端口成本的计算方法,见表9-1,默认是IEEE802.1t标准,并可使用stp pathcost-standard命令来修改默认的端口成本的计算方法。
stp pathcost-standard{dot1d-1998|dot1t|legacy}
表9-1 三种方法的默认成本值
带宽 | 802.1d-1998标准 | 802.1t | 华为 |
10M | 100 | 2000000 | 200000 |
100M | 19 | 200000 | 200 |
1000M | 4 | 20000 | 20 |
10G | 2 | 2000 | 2 |
40G | 1 | 500 | 1 |
如图9-7所示,SW3为根桥,SW1和SW2为非根桥,SW1和SW2上有且仅有一个根端口,所以本网络中有两个根端口,以SW1为例,在SW1上要选一个根端口出来,SW1的G0/0/1到根桥的开销为2000,SW1的G0/0/2到达根桥的开销为4000,所以SW1的G0/0/1成为了根端口。
9-7 根端口的选举1
第二步:直连网桥的bridge-id最小。
如图9-8所示,SW1为根网桥,SW2、SW2、SW3有且仅有一个根端口,所以本网络中有三个根端口,以SW4为例,在SW4上要选出一个根端口,但是SW4上的G0/0/1和G0/0/2到根网桥的开销相同,所以比较不出来,SW4上的G0/0/1的直连网桥为SW2,它的bridge-id为32768.4c1f-aabc-102a,SW4上的G0/0/2的直连网桥为SW3,它的bridge-id为32768.4c1f-aabc-102b,SW3的bridge-id最小,所以G0/0/2成为了根端口。
图9-8 根端口的选举2
第三步:比较对方的端口ID。
端口ID是2个字节,其中,端口优先级占一个字节,端口号占1个字节。但是配置时端口优先级仅能配置高4位,后12位当成端口号(端口号系统自己分配,不可调)。默认下,端口优先级为128。
如图9-9所示,SW1为根桥,SW4为非根网桥,本网络中只有一个根端口,在SW4上要选一个根端口,第一步:到根桥的开销最小,比较不出来。第二步:直连网桥的bridge-id最小,也比较不出来。第三步:比较对方的端口ID,SW4上的G0/0/1对方的端口号为SW1上的G0/0/1,它的端口ID=128.2,SW4上的G0/0/2对方的端口号为SW1的G0/0/2,它的端口ID=128.3,128.2<128.3,所以G0/0/1被选举成为根端口。
图9-9 根端口的选举3
【说明】
u 每一台非根桥交换机都会在自己的接口中选举出一个接口。
u 非根桥交换机上有且只会有一个根接口。
u 当非根桥交换机有多个接口接入网络中时,根接口是其收到最优配置BPDU的接口。
u 可以形象地理解为,根接口是每台非根桥上”朝向”根桥的接口。
3.选择指定端口
选好了根桥和根端口,接下我我们要选择指定端口,每一个网段有且仅有一个指定端口,下面我们来看一下指定端口的选举原则:
第一步:到根网桥的开销最小
如图9-10所示,SW1为根桥,在本网络中有一共有三个指定端口,以SW1和SW3之间线网段为例,SW1的G0/0/1到达根网桥的开销为20000,SW3的G0/0/2到根网桥的开销为0,所以G0/0/2为指定端口。
图9-10 指定端口的选举1
第二步:所在网桥的bridge-id最小
如图9-10所示,SW1与SW2所在的网段要有一个指定端口,SW1的G0/0/1和SW2的G0/0/2到达根网桥的开销是一样的,所以比较第二步,SW1的G0/0/1所在网桥的bridge-id为32768.4c1f-aabc-102a,SW2的G0/0/2所在网桥的bridge-id为32768.4c1f-aabc-102b,所以G0/0/1成为了指定端口。
第三步:比较本端口的端口ID
如图9-11所示,在这个网络里面一定有一个指定端口,通过指定端口的比较原则第一条和第二条都比较不出来,G0/0/1的端口ID=128.2,G0/0/2的端口ID=128.3,所以G0/0/1成为了指定端口。
图9-11 指定端口选举2
4.阻塞端口
非根非指定端口,在STP协议中将会被阻塞
如图9-12所示,第一步:选根桥,三台交换机的优先级都为4096,通过比较MAC地址,SW1被选举为根桥。第二步:选根端口,在SW2上,通过比较到达根网桥的开销,可以选出G0/0/1为根端口,在SW3上,通过比较到达根网桥的开销,可以选出G0/0/1为根端口。第三步:选择指定端口,在SW1上G0/0/0和G0/0/1都是指定端口,SW2的G0/0/2和SW3的G0/0/2通过比较自己的BID,可以选出SW2的G0/0/2为指定端口,SW3的G0/0/2是非根非指定端口,所以会被阻塞。
9-12阻塞端口
5.STP的端口状态
运行STP协议的设备的端口存在5种端口状态,分别为Disabled、Listening、Learning、Forwarding、Blocking,见表9-3。
表9-3 STP端口状态
端口状态 | 说明 |
Disabled | 端口状态为Down,不处理BPDU报文,也不转发用户流量。 |
Blocking | 端口仅仅接收并处理BPDU,不转发用户流量。 |
Listening | 过渡状态,开始生成树计算,端口可以接收和发送BPDU,但不转发用户流量。 |
Learning | 过渡状态,建立无环的MAC地址转发表,不转发用户流量。 |
Forwarding | 端口可以接收和发送BPDU,也转发用户流量。只有根端口或指定端口才能进入Forwarding状态。 |
STP的端口状态迁移如图9-13所示,STP的端口状态章的转换条件如下:
① 接口初始化或激活,自动进入阻塞状态
② 接口被选举为根接口或指定接口,自动进入侦听状态
③ 转发延迟计时器超时且接口依然为根接口或指定接口
④ 接口不再是根接口或指定接口或指定状态
⑤ 接口被禁用或者链路失效
四、STP的收敛时间
在稳定的 STP 拓扑里,非根桥会定期收到根桥的配置 BPDU。如果根桥发生了故障,停止发送配置 BPDU,则下游交换机就无法收到根桥的配置 BPDU。如果下游交换机一直收不到新的配置 BPDU,则原来收到的配置 BPDU 中的 Max Age 定时器就会超时(默认为20秒),从而导致已经收到的配置 BPDU 失效。STP Max Age定时器可用于链路故障检测。
1. 根桥故障
如图所示,根桥的故障恢复过程如下:
① SW1根桥发生故障,停止发送BPDU报文。
② SW2等待Max Age计时器(20 s)超时,从而导致已经收到的BPDU报文失效,又接收不到根桥发送的新的BPDU报文,从而得知上游出现故障。
③ 非根桥会互相发送配置BPDU,重新选举新的根桥。
④ 经过重新选举后,SW3的A端口经过两个Forward Delay(15 s)时间恢复转发状态。
u 非根桥会在BPDU老化之后开始根桥的重新选举。
u 根桥故障会导致50 s左右的恢复时间。
2. 直连链路故障
如图所示,直连链路故障恢复过程如下:
当交换机SW2网络稳定时检测到根端口的链路发生故障,则其备用端口会经过两倍的Forward Delay(15s)时间进入用户流量转发状态。
SW2检测到直连链路物理故障后,会将预备端口转换为根端口。
直连链路故障,备用端口会经过30s后恢复转发状态。
3. 非直连链路故障
非直连链路故障后,SW3的备用端口恢复到转发状态,非直连故障会导致50s左右的恢复时间。