在二层交换网络中,一旦存在环路就会造成报文在环路内不断循环和增生,产生广播风暴,从而占用所有的有效带宽,使网络变得无法正常通信。
在这种环境下生成树协议应运而生,生成树协议是一种二层管理协议,它通过有选择性地阻塞网络冗余链路来达到消除网络二层环路的目的,同时具备链路备份功能。
生成树协议和其他协议一样,是随着网络的不断发展而不断更新换代的。最初被广泛应用的是IEEE802.1D-1998 STP(Spanning Tree Protocol,生成树协议),随后以它为基础产生了IEEE 802.1w RSTP(Rapid Spanning Tree Protocol,快速生成树协议)和IEEE 802.1s MSTP(Multiple Spanning Tree Protocol,多生成树协议)。
三种生成树协议特点比较:
生成树协议 | 特点 | 应用场景 |
STP |
| 无需区分用户或业务流量,所有VLAN共享一棵生成树。 |
RSTP |
| |
MSTP |
| 需要区分用户或业务流量,并实现负载分担。不同的VLAN通过不同的生成树转发流量,每棵生成树之间相互独立。 |
华为实现说明
Cisco交换机所支持的生成树协议类型分别有:PVST(Per VLAN Spanning Tree)、PVST+(Per VLAN Spanning Tree Plus)、Rapid-PVST+(Rapid Per VLAN Spanning Tree Plus)和MST(Multiple Spanning Tree)。这几种生成树协议的某些BPDU报文采用其私有的报文格式,与IEEE标准的BPDU报文格式不一样。
注意以下介绍的STP是狭义的STP,即IEEE 802.1D-1998 中定义的STP 协议。
协商原则
STP协议是根据4个维度进行选举协商的,设备之间通过发送BPDU报文,经过4个维度的比较,最终会阻塞综合能力最差的端口。
选举维度(桥ID,累计根路径开销,发送设备BID,发送端口PID)
维度 | 定义 | 作用 |
桥ID | BID(Bridge ID),是由16位的桥优先级(Bridge Priority)与桥MAC地址构成。BID桥优先级占据高16位,其余的低48位是MAC地址。 | 确定根桥。桥ID最小的设备会被选举为根桥。 |
累计根路径开销 | 某端口到根桥累计的路径开销就是所经过的各个桥上的各端口的路径开销累加而成。 | 选举根端口、指定端口和阻塞端口时使用。 |
发送设备BID | 发送BPDU报文的桥ID。 | 选举根端口、指定端口和阻塞端口时使用。 |
发送端口PID | 发送BPDU报文的端口ID。 PID由两部分构成的,高4位是端口优先级,低12位是端口号。 | 只在存在Backup端口时使用。 |
经过4个维度的比较,最终会协商出端口的角色和状态,确定报文流量的转发路径。STP角色的定义,如图所示。
从上面的官方定义,可以看出:STP协商完成后,端口要么被阻塞,要么正常转发报文。其实在STP进行协商的过程中,是有一些中间状态的。
端口状态 | 目的 | 说明 |
Forwarding | 端口既转发用户流量也处理BPDU报文。 | 只有根端口或指定端口才能进入Forwarding状态。 |
Learning | 设备会根据收到的用户流量构建MAC地址表,但不转发用户流量。 | 过渡状态,增加Learning状态防止临时环路。 |
Listening | 确定端口角色,将选举出根桥、根端口和指定端口。 | 过渡状态。 |
Blocking | 端口仅仅接收并处理BPDU,不转发用户流量。 | 阻塞端口的最终状态。 |
STP协议报文是通过BPDU报文封装的,目的MAC是组播MAC:01-80-C2-00-00-00,封装格式是IEEE 802.3。
BPDU报文的分类
??? 第一类配置BPDU报文: Flags的TCA和TC位都置为0的配置BPDU报文
??? 第二类配置BPDU报文: Flags的TCA和TC位都置为1的配置BPDU报文
??? 第三类配置BPDU报文:Flags的TCA位置为0,TC位置为1的配置BPDU报文
BPDU报文的处理流程
该报文用于STP状态的协商和维持。具体报文格式如下:
该报文用于通知下游设备停止发送TCN BPDU报文。具体报文格式如下:
该报文用于通知下游设备删除MAC地址表项。具体报文格式如下:
使用注意事项
V100R005及之前版本,在S2700系列设备,检查全局是否配置bpdu enable;其他系列盒式交换机,检查物理端口、Eth-trunk接口下是否配置bpdu enable。
V100R006及后续版本,对应形态设备全局或端口默认使能bpdu enable。
组网需求
如图所示,当前网络中SwitchA、SwitchB、SwitchC和SwitchD通过环形组网备份链路。希望通过运行生成树协议阻塞端口,将环形网络结构修剪成无环路的树形网络结构。
步骤1:配置模式为STP模式。
<HUAWEI> system-view [HUAWEI] sysname SwitchA [SwitchA] stp mode stp |
<HUAWEI> system-view [HUAWEI] sysname SwitchB [SwitchB] stp mode stp |
<HUAWEI> system-view [HUAWEI] sysname SwitchC [SwitchC] stp mode stp |
<HUAWEI> system-view [HUAWEI] sysname SwitchD [SwitchD] stp mode stp |
步骤2:配置SwitchA为根桥,SwitchB为备份根桥。
[SwitchA] stp root primary ??//也可以使用命令stp priority 0 配置优先级为0,和stp root primary的作用是一样的。 |
[SwitchB] stp root secondary ?//也可以使用命令stp priority 4096 配置优先级为4096,和stp root secondary的作用是一样的。 |
步骤3:去使能SwitchB和SwitchC设备GE0/0/3端口的STP功能。
[SwitchC] interface gigabitethernet0/0/3 [SwitchC-GigabitEthernet0/0/3] stp disable [SwitchC-GigabitEthernet0/0/3] quit |
[SwitchD] interface gigabitethernet 0/0/3 [SwitchD-GigabitEthernet0/0/3] stp disable [SwitchD-GigabitEthernet0/0/3] quit |
步骤4:全局使能STP功能。
华为X7系列交换机默认是使能,该步骤可以省略。
[SwitchA] stp enable |
[SwitchB] stp enable |
[SwitchC] stp enable |
[SwitchD] stp enable |
步骤5:验证配置结果。
?查看STP简要信息,通过STP简要信息可以快速的看出端口的角色和状态。
配置文件
SwitchA的配置文件
# sysname SwitchA # stp mode stp stp instance 0 root primary # return |
SwitchB的配置文件
# sysname SwitchB # stp mode stp stp instance 0 root secondary #? return? |
SwitchC的配置文件
# sysname SwitchC? #? stp mode stp #? interface GigabitEthernet0/0/3 ?stp disable #? return? |
SwitchD的配置文件
# sysname SwitchD #? stp mode stp #? interface GigabitEthernet0/0/3 ?stp disable #? return |