STP 优先级越小越好
华为默认开启 STP
注意,STP 协议是抢占式的
为了提高网络的可靠性,交换网络中通常有冗余链路,而这些冗余链路会导致网络广播风暴和 MAC 地址表震荡的问题,生成树协议(STP)可以在提高可靠性的同时避免环路。
STP 的作用就是:
- 消除环路
- 链路备份
重要概念:
-
根桥(Root)
作为生成树的根节点的路由器。
-
非根交换机(Non—Root)
所有除了根桥之外的所有路由器作为非根路由器。
-
根接口(Root Port)
根端口是非根交换机去往根桥路径最优的端口。在一个运行STP协议的交换机上最多只有一个根端口,但根桥上没有根端口。
-
指定端口
指定端口是交换机向所连网段转发 BPDU 报文的端口,每个网段有且只能有一个指定端口。一般情况下,根桥的每个端口总是指定端口。
-
预备端口
如果一个端口既不是指定端口也不是根端口,则此端口为预备端口。预备端口将被阻塞。
STP 操作
根端口:RP
指定端口:DP
预备端口/阻塞端口:AP
选举根桥
所有交换机启动时都认为自己是根桥,自己的所有端口都为指定端口,这样 配置BPDU 报文就可以通过所有端口转发。对端交换机收到 配置BPDU 报文后,会比较 配置BPDU 中的根桥 ID 和自己的桥 ID。如果收到的 配置BPDU 报文中的桥 ID 优先级低,接收交换机会继续通告自己的配置 BPDU 报文给邻居交换机。如果收到的 配置BPDU 报文中的桥 ID 优先级高,则交换机会修改自己的 配置BPDU 报文的根桥ID字段,宣告新的根桥。
-
桥 ID:
STP 中根桥的选举依据的是桥 ID,STP 中的每个交换机都会有一个桥 ID (Bridge ID) 。桥 ID 由 16 位的桥优先级(Bridge Priority)和 48 位的 MAC 地址构成。桥优先级是可以配置的,取值范围是0~65535,默认值为32768。优先级最高的设备(数值越小越优先)会被选举为根桥。如果优先级相同,则会比较MAC地址,MAC地址越小则越优先。注意,桥优先级为步长为 4096,配置为 0 时也是有效的,此时为最高优先级。
根端口选举
非根交换机在选举根端口时分别依据该端口的根路径开销、对端BID、对端PID和本端PID。
-
根路径开销
交换机的每个端口都有一个端口开销(Port Cost)参数,此参数表示该端口在 STP 中的开销值。默认情况下带宽越高,开销越小。从一个非根桥到达根桥的路径可能有多条,每一条路径都有一个开销值,称为路径开销。最短路径的路径开销被称为 RPC(Root Path Cost,根路径开销),并生成无环树状网络。根桥的根路径开销是 0。
缺省情况下,华为交换机使用 IEEE 802.1t 标准来计算路径开销。
-
运行 STP 交换机的每个端口都有一个端口 ID,端口 ID 由端口优先级和端口号构成。端口优先级取值范围是 0到 240 ,步长为 16 。缺省情况下,端口优先级是 128 。端口 ID(Port ID) 可以用来确定端口角色。
-
如果有两个或两个以上的端口计算得到的累计路径开销相同,那么选择收到发送者 BID 最小的那个端口作为根端口。
-
如果两个或两个以上的端口连接到同一台交换机上,则选择发送者 PID 最小的那个端口作为根端口。
指定端口选举
-
非根交换机在选举指定端口时分别依据根路径开销、BID、PID。
-
未被选举为根端口或指定端口的端口为预备端口,将会被阻塞。
-
每个网段都应该有一个指定端口,根桥的所有端口都是指定端口(除非根桥在物理上存在环路)。
-
指定端口的选举也是首先比较累计路径开销,累计路径开销最小的端口就是指定端口。如果累计路径开销相同,则比较端口所在交换机的桥 ID ,所在桥 ID 最小的端口被选举为指定端口。如果通过累计路径开销和所在桥 ID 选举不出来,则比较端口 ID ,端口 ID 最小的被选举为指定端口。
-
网络收敛后,只有指定端口和根端口可以转发数据。其他端口为预备端口,被阻塞,不能转发数据,只能够从所连网段的指定交换机接收到 BPDU 报文,并以此来监视链路的状态。
端口状态转换
为了防止在 STP 运行结束之前产生暂时环路,引入了端口状态。
图中所示为 STP 的端口状态迁移机制,运行 STP 协议的设备上端口状态有5种:
-
Forwarding:转发状态。端口既可转发用户流量也可转发 BPDU 报文,只有根端口或指定端口才能进入Forwarding 状态。
-
Learning:学习状态。端口可根据收到的用户流量构建 MAC 地址表,但不转发用户流量。增加 Learning 状态是为了防止临时环路。
-
Listening:侦听状态。端口可以转发 BPDU 报文,但不能转发用户流量。
-
Blocking:阻塞状态。端口仅仅能接收并处理 BPDU,不能转发 BPDU,也不能转发用户流量。此状态是预备端口的最终状态。
-
Disabled:禁用状态。端口既不处理和转发BPDU报文,也不转发用户流量。
-
计时器超时时间为 15s
BPDU 报文
Root ID:当前该交换机认为的根 ID。
RPC:路径开销。
Bridge ID:当前交换机的桥 ID。
Port ID:端口 ID。
Message Age:BPDU 在网络中传播的生存期。
Max Age:BPDU 在设备中能够保存的最大生存期。默认为 20s。
Hello Time:BPDU 发送的周期。默认为 2s。在网络稳定后由 Root 发送。
Forward Delay:端口状态迁移的延时。默认为 15s。
计时器
BPDU 报文每经过一个交换机,Message Age 都会增加 1。
如果 Message Age 大于 Max Age,非根桥会丢弃这个 BPDU。
STP 故障处理
根桥故障
恢复大约需要 50s。
根桥故障后,下层所有的非根交换机将不会收到来自根的 BPDU,此时非根交换机会等待到 Max Age 超时后重新选举根,选举根的过程又会经过两次 Forward Delay 时间。
直连链路故障
恢复大约需要 30s。
直连链路中断后,SWB 会认为根死亡,会将预备端口转为根端口,会向其他交换机交互按 BPDU 报文进行根选举,经过两倍的 Forward Delay 时间后新的根端口才会恢复到转发状态。
非直连链路故障
恢复大约需要 50s。
SWB 与 SWA 之间的链路因为某些原因发生了中断(非物理中断)导致 SWB 不能受到来自根 SWA 的 BPDU 报文,此时 SWB 等待 Max Age 超时后把备用端口改为指定端口并向 C 发送 BPDU 报文,宣告自己是根。在同一时刻,SWC 也在 Max Age 时间未收到来自 SWB 的 BPDU 信息,也会向 SWB 发送 BPDU 报文。两报文几乎同时发送,接收到报文后进行选举,需要等待两倍的 Forward Delay 时间。
MAC 地址表错误
在上图所示的情况下,在网络未故障的情况下,SWB 访问 主机A 从 G0/0/3 转发,SWB 访问 主机B 通过 G0/0/1 转发。而网络故障,再次收敛结束的时候,SWB 访问 主机B 应该是从 G0/0/2 口进行转发,但是因为 MAC地址表 的老化时间未到,导致在这段时间内,SWB 无法访问 主机B。
MAC 地址表变化
-
为了避免上文中发生的 MAC地址表错误 的问题,在任意一个端口变化为 Forward 状态(也就是拓扑图发生了变化),感知到拓扑发生变化的交换机会向着根方向不断地发出 TCN BPDU 报文用来告知拓扑图发生了变化。
-
TCN BPDU 报文要求可靠传输,在 SWB 收到 TCN BPDU 报文后,会把配置 BPDU报文 中的 Flags 的 TCA 位设置1,然后发送给 SWC,告知 SWC 停止发送 TCN BPDU 报文。
-
SWB 再向根发送 TCN BPDU 报文。
-
SWA把 配置BPDU 报文中的 Flags 的 TC 位设置为 1 后发送,通知下游设备把 MAC 地址表项的老化时间由默认的 300 秒修改为 orward Delay 的时间(默认为 15 秒)。
STP 命令
华为支持 mstp stp rstp 三种模式,默认是 MSTP模式。
# 修改 STP 模式为 STP
[SWA]stp mode stp
# 配置交换机的优先级(步长为 4096,缺省为 32768)
[SWA]stp priority 4096
# 配置路径开销算法,默认是 IEEE 802.1T
[SWA]stp pathcost-standard ?
dot1d-1998 IEEE 802.1D-1998
dot1t IEEE 802.1T
legacy Legacy
# 在端口下修改开销值
[SWA]interface GigabitEthernet 0/0/1
[SWA-GigabitEthernet0/0/1]stp cost 2000