生成树协议是一种二层管理协议,它的主要功能是阻塞网络中的冗余链路来消除二层环路,在链路故障时启用备份链路。下面通过一个典型配置举例来介绍如何通过配置生成树功能进行防环、破环。
组网需求
如下图的两层拓扑结构,核心层设备为Device A和Device B,接入层设备为Device C,Device C连接内网终端。内网存在4个VLAN,配置MSTP功能满足如下需求:
l VLAN 10和VLAN 30的生成树根桥为Device A,并且从Device C的GigabitEthernet 0/1转发数据。
l VLAN 20和VLAN 40的生成树根桥为Device B,并且从Device C的GigabitEthernet 0/2转发数据。
l 在Device C的根端口上开启环路保护功能。在Device C连接终端的边缘端口上开启BPDU保护功能。
配置要点
(1)在Devcie A、B和C上创建相同的VLAN,配置相同的实例映射:实例1映射VLAN 10和30;实例2映射VLAN 20和40。实例0包含其它未创建的VLAN。
(2)设备通过比较优先级向量< Root Identifier,Root Path Cost,Bridge ID,Port ID >选举出生成树中的设备角色和端口角色,配置实例的桥优先级和端口路径开销,以便算出组网需求中要求的拓扑。为便于管理,实例0配置和实例1同样的生成树。
实例0和1:
1、 Device A的桥优先级配置为4096,Device B的桥优先级配置为8192,Device C的桥优先级采用缺省值32768(无需配置),使Device A成为根。
2、在Device B上,配置GigabitEthernet 0/2端口路径开销为1,GigabitEthernet 0/1端口路径开销为4,使得GigabitEthernet 0/2成为Device B的根端口。
3、 在Device C上,配置GigabitEthernet 0/1端口路径开销为1,GigabitEthernet 0/2端口路径开销为4,使得GigabitEthernet 0/1成为Device C的根端口。
4、Device B的桥优先级8192高于Device C的桥优先级32768,Device B的GigabitEthernet 0/1成为指定端口,Device C的GigabitEthernet 0/2成为替换端口。
实例2:
1、 Device B的桥优先级配置为4096,Device A的桥优先级配置为8192,Device C的桥优先级采用缺省值32768(无需配置),使Device B成为根。
2、在Device A上,配置GigabitEthernet 0/2端口路径开销为1,GigabitEthernet 0/1端口路径开销为4,使得GigabitEthernet 0/2成为Device A的根端口。
3、 在Device C上,配置GigabitEthernet 0/2端口路径开销为1,GigabitEthernet 0/1端口路径开销为4,使得GigabitEthernet 0/2成为Device C的根端口。
4、Device A的桥优先级8192高于Device C的桥优先级32768,Device A的GigabitEthernet 0/1成为指定端口,Device C的GigabitEthernet 0/1成为替换端口。
(3)在Device C的GigabitEthernet 0/1~0/2上配置MSTP环路保护,当根端口或备份口因收不到BPDU迁移为指定端口时,端口状态将一直保持Discarding(废弃)状态,直到重新收到BPDU进行生成树计算。
(4)配置Device C连接终端的接口GigabitEthernet 0/3~0/6为边缘端口。在缺省情况下边缘端口自动识别功能处于开启状态,若GigabitEthernet 0/3~0/6被选举为指定端口后3秒内未接收到BPDU,则被自动识别为边缘端口并立即进入转发状态。若网络中存在丢包或收发报文延迟的现象,可能影响边缘端口自动识别功能。因此,关闭边缘端口自动识别功能,手工配置其为边缘端口,并开启BPDU保护功能。
(5)在Devcie A、B和C上全局开启生成树功能,缺省为MSTP模式。
(6)配置Devcie A、B和C的互联端口为Trunk口,许可所有VLAN通过。配置Device C连接终端的接口加入所在VLAN。
配置步骤
(1) 配置Device A。
# 创建VLAN,配置实例映射。
DeviceA>enable
DeviceA# configure terminal
DeviceA(config)# vlan range 10,20,30,40
DeviceA(config-vlan-range)# exit
DeviceA(config)# spanning-tree mst configuration
DeviceA(config-mst)# instance 1 vlan 10,30
DeviceA(config-mst)# instance 2 vlan 20,40
# 配置实例0和1的桥优先级为4094,实例2的桥优先级为8192。
DeviceA(config-mst)# spanning-tree mst 0 priority 4096
DeviceA(config)# spanning-tree mst configuration
DeviceA(config-mst)# spanning-tree mst 1 priority 4096
DeviceA(config)# spanning-tree mst configuration
DeviceA(config-mst)# spanning-tree mst 2 priority 8192
# 配置GigabitEthernet 0/2为Trunk口。在实例2中,配置端口路径开销为1。
DeviceA(config)# interface gigabitethernet 0/2
DeviceA(config-if-GigabitEthernet 0/2)# switchport
DeviceA(config-if-GigabitEthernet 0/2)# switchport mode trunk
DeviceA(config-if-GigabitEthernet 0/2)# switchport trunk native vlan 1
DeviceA(config-if-GigabitEthernet 0/2)# switchport trunk allowed vlan all
DeviceA(config-if-GigabitEthernet 0/2)# spanning-tree mst 2 cost 1
DeviceA(config-if-GigabitEthernet 0/2)# exit
# 配置GigabitEthernet 0/1为Trunk口。在实例2中,配置端口路径开销为4。
DeviceA(config)# interface gigabitethernet 0/1
DeviceA(config-if-GigabitEthernet 0/1)# switchport
DeviceA(config-if-GigabitEthernet 0/1)# switchport mode trunk
DeviceA(config-if-GigabitEthernet 0/1)# switchport trunk native vlan 1
DeviceA(config-if-GigabitEthernet 0/1)# switchport trunk allowed vlan all
DeviceA(config-if-GigabitEthernet 0/1)# spanning-tree mst 2 cost 4
DeviceA(config-if-GigabitEthernet 0/1)# exit
# 全局开启生成树功能。
DeviceA(config)# spanning-tree
DeviceA(config)# end
DeviceA# write
(2) 配置Device B。
# 创建VLAN,配置实例映射。
DeviceB> enable
DeviceB# configure terminal
DeviceB(config)# vlan range 10,20,30,40
DeviceB(config-vlan-range)# exit
DeviceB(config)# spanning-tree mst configuration
DeviceB(config-mst)# instance 1 vlan 10,30
DeviceB(config-mst)# instance 2 vlan 20,40
# 配置实例2的优先级为4094,实例0和1的桥优先级为8192。
DeviceB(config-mst)# spanning-tree mst 0 priority 8192
DeviceB(config)# spanning-tree mst configuration
DeviceB(config-mst)# spanning-tree mst 1 priority 8192
DeviceB(config)# spanning-tree mst configuration
DeviceB(config-mst)# spanning-tree mst 2 priority 4096
# 配置GigabitEthernet 0/2为Trunk口。在实例0和1中,配置端口路径开销为1。
DeviceB(config)# interface gigabitethernet 0/2
DeviceB(config-if-GigabitEthernet 0/2)# switchport
DeviceB(config-if-GigabitEthernet 0/2)# switchport mode trunk
DeviceB(config-if-GigabitEthernet 0/2)# switchport trunk native vlan 1
DeviceB(config-if-GigabitEthernet 0/2)# switchport trunk allowed vlan all
DeviceB(config-if-GigabitEthernet 0/2)# spanning-tree mst 0 cost 1
DeviceB(config-if-GigabitEthernet 0/2)# spanning-tree mst 1 cost 1
DeviceB(config-if-GigabitEthernet 0/2)# exit
# 配置GigabitEthernet 0/1为Trunk口。在实例0和1中,配置端口路径开销为4。
DeviceB(config)# interface gigabitethernet 0/1
DeviceB(config-if-GigabitEthernet 0/1)# switchport
DeviceB(config-if-GigabitEthernet 0/1)# switchport mode trunk
DeviceB(config-if-GigabitEthernet 0/1)# switchport trunk native vlan 1
DeviceB(config-if-GigabitEthernet 0/1)# switchport trunk allowed vlan all
DeviceB(config-if-GigabitEthernet 0/1)# spanning-tree mst 0 cost 4
DeviceB(config-if-GigabitEthernet 0/1)# spanning-tree mst 1 cost 4
DeviceB(config-if-GigabitEthernet 0/1)# exit
# 全局开启生成树功能。
DeviceB(config)# spanning-tree
DeviceB(config)# end
DeviceB# write
(3) 配置Device C。
# 创建VLAN,配置实例映射。
DeviceC> enable
DeviceC# configure terminal
DeviceC(config)# vlan range 10,20,30,40
DeviceC(config-vlan-range)# exit
DeviceC(config)# spanning-tree mst configuration
DeviceC(config-mst)# instance 1 vlan 10,30
DeviceC(config-mst)# instance 2 vlan 20,40
DeviceC(config-mst)# exit
# 配置上联口GigabitEthernet 0/1为Trunk口。在实例0和1中配置端口路径开销为1,在实例2中配置端口路径开销为4。配置端口环路保护。
DeviceC(config)# interface gigabitethernet 0/1
DeviceC(config-if-GigabitEthernet 0/1)# switchport
DeviceC(config-if-GigabitEthernet 0/1)# switchport mode trunk
DeviceC(config-if-GigabitEthernet 0/1)# switchport trunk native vlan 1
DeviceC(config-if-GigabitEthernet 0/1)# switchport trunk allowed vlan all
DeviceC(config-if-GigabitEthernet 0/1)# spanning-tree mst 0 cost 1
DeviceC(config-if-GigabitEthernet 0/1)# spanning-tree mst 1 cost 1
DeviceC(config-if-GigabitEthernet 0/1)# spanning-tree mst 2 cost 4
DeviceC(config-if-GigabitEthernet 0/1)# spanning-tree guard loop
DeviceC(config-if-GigabitEthernet 0/1)# exit
# 配置上联口GigabitEthernet 0/2为Trunk口。在实例2中配置端口路径开销为1,在实例0和1中配置端口路径开销为4。配置端口环路保护。
DeviceC(config)# interface gigabitethernet 0/2
DeviceC(config-if-GigabitEthernet 0/2)# switchport
DeviceC(config-if-GigabitEthernet 0/2)# switchport mode trunk
DeviceC(config-if-GigabitEthernet 0/2)# switchport trunk native vlan 1
DeviceC(config-if-GigabitEthernet 0/2)# switchport trunk allowed vlan all
DeviceC(config-if-GigabitEthernet 0/2)# spanning-tree mst 0 cost 4
DeviceC(config-if-GigabitEthernet 0/2)# spanning-tree mst 1 cost 4
DeviceC(config-if-GigabitEthernet 0/2)# spanning-tree mst 2 cost 1
DeviceC(config-if-GigabitEthernet 0/2)# spanning-tree guard loop
DeviceC(config-if-GigabitEthernet 0/2)# exit
# 配置下联口GigabitEthernet 0/3~0/6加入指定VLAN。配置接口为边缘端口,配置BPDU保护功能。
DeviceC(config)# interface gigabitethernet 0/3
DeviceC(config-if-GigabitEthernet 0/3)# switchport
DeviceC(config-if-GigabitEthernet 0/3)# switchport mode access
DeviceC(config-if-GigabitEthernet 0/3)# switchport access vlan 10
DeviceC(config-if-GigabitEthernet 0/3)# spanning-tree autoedge disabled
DeviceC(config-if-GigabitEthernet 0/3)# spanning-tree portfast
DeviceC(config-if-GigabitEthernet 0/3)# spanning-tree bpduguard enable
DeviceC(config-if-GigabitEthernet 0/3)# exit
DeviceC(config)# interface gigabitethernet 0/4
DeviceC(config-if-GigabitEthernet 0/4)# switchport
DeviceC(config-if-GigabitEthernet 0/4)# switchport mode access
DeviceC(config-if-GigabitEthernet 0/4)# switchport access vlan 20
DeviceC(config-if-GigabitEthernet 0/4)# spanning-tree autoedge disabled
DeviceC(config-if-GigabitEthernet 0/4)# spanning-tree portfast
DeviceC(config-if-GigabitEthernet 0/4)# spanning-tree bpduguard enable
DeviceC(config-if-GigabitEthernet 0/4)# exit
DeviceC(config)# interface gigabitethernet 0/5
DeviceC(config-if-GigabitEthernet 0/5)# switchport
DeviceC(config-if-GigabitEthernet 0/5)# switchport mode access
DeviceC(config-if-GigabitEthernet 0/5)# switchport access vlan 30
DeviceC(config-if-GigabitEthernet 0/5)# spanning-tree autoedge disabled
DeviceC(config-if-GigabitEthernet 0/5)# spanning-tree portfast
DeviceC(config-if-GigabitEthernet 0/5)# spanning-tree bpduguard enable
DeviceC(config-if-GigabitEthernet 0/5)# exit
DeviceC(config)# interface gigabitethernet 0/6
DeviceC(config-if-GigabitEthernet 0/6)# switchport
DeviceC(config-if-GigabitEthernet 0/6)# switchport mode access
DeviceC(config-if-GigabitEthernet 0/6)# switchport access vlan 40
DeviceC(config-if-GigabitEthernet 0/6)# spanning-tree autoedge disabled
DeviceC(config-if-GigabitEthernet 0/6)# spanning-tree portfast
DeviceC(config-if-GigabitEthernet 0/6)# spanning-tree bpduguard enable
DeviceC(config-if-GigabitEthernet 0/6)# exit
# 全局开启生成树功能。
DeviceC(config)# spanning-tree
DeviceC(config)# end
DeviceC# write