1. 目的
(1)破除环路
(2)备份链路
环路会带来广播风暴的问题
1.1 广播风暴
我们将交换机A B C
的stp
协议给关掉,用PC1
去ping PC2
会发现超时。在三个交换机间的任一点去抓包,会发现一直都是arp request
广播报文和响应,它们占满了整个网络,使得交换机无法处理其他的请求了。
另外由于arp request
的报文充斥整个网络,交换机A
的mac-port
表也会断的跳变。也就是mac
地址表的断振荡。例如从A
的2
口发出的包,可能经过一圈又从1
口回来,这样源mac
对应的端口会一真不断的变化。
而这都是因为二层网络中有环路。A->B->C->A
A->B->B->A
2. STP选举流程
开启stp
协议的交换机会通过BPDU
报文来进行交互。
根桥交换机负责发送BPDU
报文,其他交换机负责转发它的报文。
2.1 选举根桥
桥ID
唯一标识一台交换机;它由桥优先级和交换机mac
组成。
选举原则:
- 先比较桥优先级,数值越小越优先;
- 相同优先级比较交换级
mac
,mac
越小越优先。
桥优先级:0~61440
, 步长为4096
;默认32768
为什么要有桥优先级? 人为可控根桥的选举,比如让性能更好的交换机作为根桥。
2.2 根端口选举
根端口简称RP(Root Port)
根端口在每个非根桥交换机上都有一个。
作用:用来接收根桥发送的BPDU
选举原则:
- 首先比较
RPC(Root path cost)
, 根路径开销;根路径开销越小的越优先。 - 如果
RPC
相同,则比较上游桥ID
优先级; - 如果
上游桥ID
优先级相同,则比较上游端口ID
;
端口 ID
由端口优先级和端口号组成,端口优先级范围0~240
, 步长为16
,默认128
, 数值越小越优先。
2.3 指定端口选举
指定端口简称DP(Designated Port)
, 用来转发根桥发送过来的BPDU
报文。
在每条链路上都有一个DP
。
选举原则:
- 首先比较链路上
RPC
的开销,选择RPC
小的作为DP
- 如果
RPC
相同,则比较上游交换机的桥ID
2.4 阻塞端口选举
既不是RP
,又不是DP
的端口,就是阻塞端口。
阻塞端口简称为AP(:Alternate Port)
。
RP
端口的对端口一般都是DP
端口,因为需要有口转发根桥发来的BPDU
报文。
根桥的所有端口一般都是DP
端口。
一个简单的端口选举示意图:
3. stp的端口状态
3.1 五种状态
-
disable
: 交换机未开启stp
协议或者断电 -
blocking
:阻塞状态,只能接收BPDU
报文,不能转发BPDU
报文,不能生成mac
地址表,不能转发用户流量。AP
端口的最终状态。 -
listening
:侦听状态,能接收BPDU
, 能转发BPDU
, 不能生成mac
地址表,不能转发用户数据;等待15s
。 -
learning
: 学习状态,能接收BPDU
,能转发BPDU
,能生成mac
地址表,不能转发用户数据;等待15s
。 -
forwarding
: 转发状态,能接收BPDU
, 能转发BPDU
,能生成mac
地址表,能转发用户数据。DP
端口和RP
端口的最终状态。
3.2 状态转移图
(1)端口开启了STP或通电,会从Disabled状态进入到Blocking状态。
(2) 端口被选举为根端口或指定端口,会进入Listening状态。
(3) 端口的Forward Delay定时器超时,会进入Learning/Forwarding状态。
(4) 端口不再是根端口(RP
)或指定端口(AP
)时,会进入Blocking状态
4. STP故障解决
BPDU
报文中有两个时间。
一个是hello
时间,是根桥向非根桥发送BPDU
的时间。
另外一个是Max age
时间,这个是非根桥的BPDU
老化时间。如果在这个时间段内没有收到根桥发来的BPDU
报文,该交换机就会重新进行根桥选举。
4.1 根桥故障
根桥故障又分为端口有电和端口无电无电两种情况。
对于端口有电的情况:
a) SW4
的e0/0/1
口与SW5
的e0/0/2
还能保存根桥发送的BPDU
报文
b) 等待Maxage =20s
后, SW4
与SW5
重新选举根桥,它们之间互相发送BPDU
报文,新的根桥为SW4
。
d) SW5
成为非根桥端口, SW5
有e0/0/1
口由AP
转为RP
口,这个过程需要等待30s
因此端口有电的根桥故障,总共需要等待50s
。
对于端口无电的情况:
a) SW4
的e0/0/1
口与SW5
的e0/0/2
不能保存根桥发送的BPDU
报文
b) SW4 SW5
意识到RP
端口断电, SW4
与SW5
立刻重新选举根桥,它们之间互相发送BPDU
报文,新的根桥为SW4
。
d) SW5
成为非根桥端口, SW5
有e0/0/1
口由AP
转为RP
口,这个过程需要等待30s
因此端口无电的根桥故障,总共需要等待30s
。
4.2 直连故障
假设此时SW3
为根桥,SW3
和SW4
之间有两条链路。假设此时SW3
的e0/0/1
口链路故障导致断电,因此SW4
就没有了RP
口;SW4
会选举新的RP
口为e0/0/3
。e0/0/3
此时为AP
口,从AP
口切换为RP
口需要30s
。
4.3 非直连故障
假设此时SWB
与SWA
的链路发生断电链路故障
a) SWB
会立刻从e0/0/2
口发出BPDU
进行根桥选举。
b) SWC
的e0/0/2
口接收到SWB
的BPDU
报文,发现该报文并非最优BPDU
报文。SWB
等待MaxAge=20s
来获得最优BPDU
报文
c) Maxage=20s
后,SWB
仍然未收到最优BPDU
报文;SWB
的e0/0/2
口从AP
口切换为DP
口;而这需要30s
中进行切换。
因此总的等待时间为20s+30s=50s
。
4.4 拓扑改变导致mac表错误
如图所示,PC1
发给PC2
的数据是经由SWA
发出来的。
此时SWB
的mac
表为:
e0/0/1 mac_PC2
e0/0/3 mac_PC1
假设此时SWA
和SWC
之间的链路断了,PC1
发向PC2
的本来应该走SWB SWC
之间的链路。但根据SWB
的mac
表,仍然走SWA
,因此无法到达PC2
。
如果 PC2
主动向PC1
发送报文,当然可以更新SWB
的mac
表,但是PC2
可能出现无法发数据的情况。
如果等待mac
表项的删除更新,则需要等待300s
,这无疑太漫长了。
因此stp
协协议需要同时更新mac
表项。
STP拓扑变化时mac
表项变化TCN: Topo change Notification
a) SWC
的e0/0/1
端口断电,SWC
立即意识到拓扑发生变化
b) SWB
收到TCN
后回应确认报文TCA
给SWC
c) SWB
向根桥SWA
发送TCN
报文
d)SWA
向SWB
发送TC
报文
e) SWB
向SWC
转发根桥的TC
报文
交换机在收到TC
报文后,会立即更新mac
表项老化时间为15s
。
5. STP配置
5.1 详细信息
-------[CIST Global Info][Mode MSTP]-------
# mode stp模式
CIST Bridge :32768.4c1f-cc15-3e6b
#桥ID: 桥优先级+mac
Config Times :Hello 2s MaxAge 20s FwDly 15s MaxHop 20
# Hello: 根桥发送配置BPDU的时间
# MaxAge:非根桥的最大老化时间
# FwdDly: 转发时延
Active Times :Hello 2s MaxAge 20s FwDly 15s MaxHop 20
CIST Root/ERPC :32768.4c1f-cc15-3e6b / 0
----[Port1(Ethernet0/0/1)][FORWARDING]----
Port Protocol :Enabled
# 协议启用
Port Role :Designated Port
# 端口类型:DP
Port Priority :128
# 端口优先级
Port Cost(Dot1T ) :Config=auto / Active=200000
Designated Bridge/Port :32768.4c1f-cc15-3e6b / 128.1
5.2 配置命令
stp mode stp
stp priority 4096
display stp brief
stp timer forward-delay
stp port priority
stp path-standard
6. STP报文分类
-
tcn BPDU
:topo change notification
, 拓扑变化BPDU
。 -
conf BPDU
: 根桥发送的配置BPDU
-
TCA:1
:TCA BPDU
-
TC:1
:TC BPDU
-
7. STP的劣势
STP
协议会有阻塞端口,会浪费链路带宽。
数据中心就不用,数据中心一般用链路聚合+堆叠。
Ref
huawei-support