在二层交换网络中,一旦存在环路就会造成报文在环路内不断循环和增生,产生广播风暴,从而占用所有的有效带宽,使网络变得无法正常通信。
在这种环境下生成树协议应运而生,生成树协议是一种二层管理协议,它通过有选择性地阻塞网络冗余链路来达到消除网络二层环路的目的,同时具备链路备份功能。
生成树协议和其他协议一样,是随着网络的不断发展而不断更新换代的。最初被广泛应用的是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 | 形成一棵无环路的树,解决广播风暴并实现冗余备份。 收敛速度快。 |
无需区分用户或业务流量,所有VLAN共享一棵生成树。 |
MSTP | 形成多棵无环路的树,解决广播风暴并实现冗余备份。 收敛速度快。 多棵生成树在VLAn间实现负载均衡,不同AN的流量按照不同的路径转发。 |
需要区分用户或业务流量,并实现负载分担。不同的LAM通过不同的生成树转发流量,每棵生成树之间相互独立。 |
STP在交换机所有版本,所有形态都支持。
华为交换机默认STP模式是MSTP。需要运行STP或RSTP模式时,必须要手动配置。
华为交换机在STP模式下,使用的端口角色和RSTP是一样的,也就是说支持下面5种端口角色:指定端口、根端口、Alternate端口、Backup端口和边缘端口。
华为交换机在STP模式下,支持下面4种保护功能:BPDU保护、Root保护、环路保护和防TC-BPDU攻击保护。
版本差异说明:
H3C
Cisco
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报文格式不一样。
当Cisco交换机运行私有的PVST+或Rapid-PVST+生成树协议时,与S系列交换机能否互通,取决于Cisco侧的端口链路类型:
当Cisco交换机运行MST协议时,可以理解为标准的MSTP模式,可以与S系列交换机互通。但是需要注意:在使用MSTP协议的S系列交换机与使用MST的Cisco交换机采用相同的域配置(域名、修订级别、VLAN与实例的映射关系)的情况下,要想实现域内互通,需要在S系列交换机端口配置摘要侦听功能stp config-digest-snoop。这是两者由于采用不同的密钥来生成MSTP的摘要信息,因此端口发送的BPDU报文中的摘要信息不同。由于摘要信息不同,则属于不同的MST域,会进行域间互通。
注意以下介绍的STP是狭义的STP,即IEEE 802.1D-1998 中定义的STP 协议。
STP协议是根据4个维度进行选举协商的,设备之间通过发送BPDU报文,经过4个维度的比较,最终会阻塞综合能力最差的端口。
选举维度(桥ID,累计根路径开销,发送设备BID,发送端口PID)
维度 | 定义 | 作用 |
---|---|---|
桥ID | BID(Bridge ID),是由16位的桥优先级(BridgePriority)与桥MAC地址构成。BID桥优先级占据高16位,其余的低48位是MAC地址。 | 确定根桥。桥ID最小的设备会被选举为根桥 |
累计根路径开销 | 某端口到根桥累计的路径开销就是所经过的各个桥上的各端口的路径开销累加而成。 | 选举根端口、指定端口和阻塞端口时使用。 |
发送设BID | 发送BPDU报文的桥ID。 | 选举根端口、指定端口和阻塞端口时使用。 |
发送端口PID | 发送BPDU报文的端口ID。PID由两部分构成的,高4位是端口优先级,低12位是端口号。 | 只在存在Backup端口时使用。 |
经过4个维度的比较,最终会协商出端口的角色和状态,确定报文流量的转发路径。STP角色的定义,如图所示。
从上面的官方定义,可以看出:STP协商完成后,端口要么被阻塞,要么正常转发报文。其实在STP进行协商的过程中,是有一些中间状态的。
端口状态 | 目的 | 说明 |
---|---|---|
Forwarding | 端口既转发用户流量也处理BPDU报文。 | 只有根端口或指定端口才能进入Forwarding状态 |
Learning | 设备会根据收到的用户流量构建MMAC地址表,但不转发用户流量。 | 过渡状态,增加Learming状态防止临时环路 |
Listening | 确定端口角色,将选举出根桥、根端口和指定端口。 | 过渡状杰。 |
Blocking | 端口仅仅接收并处理BPDU,不转发用户流量。 | 阻塞端口的最终状态。 |
STP协议报文是通过BPDU报文封装的,目的MAC是组播MAC:01-80-C2-00-00-00,封装格式是IEEE 802.3。
配置BPDU报文:BPDU Type为0x00的BPDU报文,都叫做配置BPDU报文
如图所示,当前网络中SwitchA、SwitchB、SwitchC和SwitchD通过环形组网备份链路。希望通过运行生成树协议阻塞端口,将环形网络结构修剪成无环路的树形网络结构。
采用如下的思路配置STP:
步骤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