在实际的应用中,MSTP得到广泛的应用,综合整体应用的考虑,MSTP模块又需要引入一些新的功能或者保护机制,使其应用更加稳定、安全。本文主要阐述根保护,环路保护,TC报文保护以及BPDU报文保护功能的实现原理及其基本应用。
STP保护特性
本文主要介绍根保护,环路保护,TC报文保护以及BPDU报文保护功能,并且配合试验阐述其实际应用。
图中LSW1、LSW2、LSW3三台设备组成一个环,使用MSTP阻断环路;
下面显示的内容是LSW1上的STP配置,其他三台运营商网络的设备的STP配置相同,这里不再重复叙述。
stp region-configuration
region-name test
instance 1 vlan 101 to 200
instance 2 vlan 201 to 300
由于维护人员的错误配置或网络中的恶意攻击,网络中的合法根交换机有可能会收到优先级更高的配置消息,这样当前根交换机会失去根交换机的地位,引起网络拓扑结构的错误变动。这种不合法的变动,会导致原来应该通过高速链路的流量被牵引到低速链路上,导致网络拥塞。Root保护功能用来防止这种情况的发生。
对于设置了Root保护功能的端口,端口角色只能保持为指定端口。一旦这种端口上收到了优先级高的配置消息,即其将被选择为非指定端口时,这些端口的状态将被设置为侦听状态,不再转发报文(相当于将此端口相连的链路断开)。当在2倍ForwradDelay内没有收到更优的配置消息后,端口会恢复原来的正常状态。
当前组网MSTP稳定,根桥为LSW2(自动选举),我们可以通过调整其他设备的优先级,来模拟维护人员错误和恶意攻击,从而得到优先级更高的BPDU。
设置LSW1的实例0的priority为0,那么它就会广播BPDU,告知其他交换机我的优先级最高,将变为根桥,即LSW2收到更高级BPDU:
当LSW2启动了root protection,在收到和自己优先级相同或更高的BPDU时,会隔离相应指定端口。
LSW1没有设置Priority为0时,LSW2端口的MSTP状态:[k1]
MSTID Port Role STP State Protection
0 GigabitEthernet1/0/1 DESI FORWARDING NONE
0 GigabitEthernet1/0/2 DESI FORWARDING NONE
LSW1设置Priority为0时,LSW2端口的MSTP状态:
MSTID Port Role STP State Protection
0 GigabitEthernet1/0/1 DESI DISCARDING ROOT
0 GigabitEthernet1/0/2 DESI DISCARDING ROOT
由此可见,当LSW2的指定端口开启Root Protection时,收到更优的BPDU后,阻塞该端口并停止报文转发,有效的预防了网络根桥振荡。
对于接入层设备,接入端口一般直接与用户终端(如PC机)或文件服务器相连,此时接入端口被设置为边缘端口以实现这些端口的快速迁移;当这些端口接收[k2]到配置消息(BPDU报文)时系统会自动将这些端口设置为非边缘端口,重新计算生成树,引起网络拓扑的震荡。这些端口正常情况下应该不会收到生成树协议的配置消息的。如果有人伪造配置消息恶意攻击交换机,就会引起网络震荡。BPDU保护功能可以防止这种网络攻击。
交换机上启动了BPDU保护功能以后,如果边缘端口收到了配置消息,系统就将这些端口shutdown,同时通知网管。被shutdown的端口只能由网络管理人员恢复。
LSW3设备的端口G1/0/4连接的是一台PC,并且配置为边缘端口,用Netwizard抓取BPDU报文,然后再从PC给设备发送BPDU报文,观察保护功能效果。G1/0/4的配置如下:
#
interface GigabitEthernet1/0/4
stp edged-port enable
port link-type trunk
port trunk permit vlan 1
#
STP状态:
MSTID Port Role STP State Protection
0 GigabitEthernet1/0/1 ALTE DISCARDING NONE
0 GigabitEthernet1/0/2 ROOT FORWARDING NONE
0 GigabitEthernet1/0/4 DESI FORWARDING BPDU
开始发送BPDU报文后,LSW3认为自己的边缘端口收到了BPDU报文,提示如下信息,并且STP使该端口SHUTDOWN:
%Apr 2 03:47:51:178 2000 LSW3 MSTP/3/IVBPDU:- 1 -BPDU-Protection port Gigabit
Ethernet1/0/4 received BPDU packet!
%Apr 2 03:47:51:312 2000 LSW3 L2INF/5/PORT LINK STATUS CHANGE:- 1 -
GigabitEthernet1/0/4 is DOWN
STP状态:
MSTID Port Role STP State Protection
0 GigabitEthernet1/0/1 ALTE DISCARDING NONE
0 GigabitEthernet1/0/2 ROOT FORWARDING NONE
停止发送BPDU报文后端口仍然维持DOWN状态,只能手动恢复。
交换机的根端口和其他阻塞端口的状态依靠不断接收上游交换机发送的BPDU来维持的。但是由于链路拥塞或者单向链路故障,这些端口会收不到上游交换机的BPDU。此时交换机会重新选择根端口,根端口会转变为指定端口,而阻塞端口会迁移到转发状态,从而交换网络中会产生环路。环路保护功能会抑制这种环路的产生。在启动了环路保护功能后,根端口的角色如果发生变化就会设置它为Discarding状态,阻塞端口会一直保持在Discarding状态,不转发报文,从而不会在网络中形成环路。直到端口重新收到由根转来的BPDU时,才可以转为Forwarding。如果该端口参与了STP计算,则不论其角色如何,该端口上的所有实例将一直被设置为Discarding状态。在MSTP中,此功能只对端口角色为ROOT、ALTERNATE和BACKUP的实例有效。
这里仅列举ROOT、ALTERNATE端口上使能环路保护的情况。
ROOT端口:
LSW3设备的端口G1/0/2为根端口,G1/0/1为阻塞端口,在上游端口 LSW2:G1/0/2上STP DISABLED,则根端口G1/0/2接收[k3]不到BPDU,端口直接变为指定端口,经过LEARNING状态后变为FORWARDING,转发报文,产生环路。
[k4]LSW3初始状态:G1/0/2做为根端口正常转发:
MSTID Port Role STP State Protection
0 GigabitEthernet1/0/1 ALTE DISCARDING NONE
0 GigabitEthernet1/0/2 ROOT FORWARDING NONE
上游端口STP DISABLED后端口先变为指定端口,DISCARDING:
MSTID Port Role STP State Protection
0 GigabitEthernet1/0/1 ROOT FORWARDING NONE
0 GigabitEthernet1/0/2 DESI DISCARDING NONE
由DISCARDING转为LEARNING:
MSTID Port Role STP State Protection
0 GigabitEthernet1/0/1 ROOT FORWARDING NONE
0 GigabitEthernet1/0/2 DESI LEARNING NONE
最后变为转发状态,产生环路:
MSTID Port Role STP State Protection
0 GigabitEthernet1/0/1 ROOT FORWARDING NONE
0 GigabitEthernet1/0/2 DESI FORWARDING NONE
由此看出,在没有环路保护的情况下,原来的阻塞端口变为根端口,原来的根端口最终变为转发状态 ,最终产生环路。[k5]我们再看一下端口G1/0/2使能LOOP PROTECTION后的现象:
MSTID Port Role STP State Protection
0 GigabitEthernet1/0/1 ROOT FORWARDING NONE
0 GigabitEthernet1/0/2 DESI DISCARDING LOOP
该端口一直保持DISCARDING状态,防止环路产生。
ALTERNATE端口:
LSW3设备的端口G1/0/1为阻塞端口,上游端口 LSW1:G1/0/1上STP DISABLED,则端口G1/0/1接收[k6]不到BPDU,端口直接变为指定端口,经过LEARNING状态后变为FORWARDING,转发报文,产生环路。[k7]
LSW3初始状态:G1/0/1做为备份端口被阻塞:
MSTID Port Role STP State Protection
0 GigabitEthernet1/0/1 ALTE DISCARDING NONE
0 GigabitEthernet1/0/2 ROOT FORWARDING NONE
上游端口STP DISABLED后端口先变为指定端口,LEARNING状态:
MSTID Port Role STP State Protection
0 GigabitEthernet1/0/1 DESI LEARNING NONE
0 GigabitEthernet1/0/2 ROOT FORWARDING NONE
最后变为转发状态,产生环路:
MSTID Port Role STP State Protection
0 GigabitEthernet1/0/1 DESI FORWARDING NONE
0 GigabitEthernet1/0/2 ROOT FORWARDING NONE
由此看出,在没有环路保护的情况下,备份端口最终也会变为转发状态 ,产生环路。我们再看一下端口G1/0/1使能LOOP PROTECTION后的现象:
MSTID Port Role STP State Protection
0 GigabitEthernet1/0/1 DESI DISCARDING LOOP
0 GigabitEthernet1/0/2 ROOT FORWARDING NONE
使能保护功能后,端口一直保持DISCARDING状态,防止环路产生。
通过这两个例子,可以很好的证明由于没有收到BPDU,产生端口角色发生变化时,环路保护可以及时的阻塞相应端口,以达到解决临时环路的目的。
设备在接收到TC-BPDU报文后,会执行MAC地址表项和ARP表项的删除操作。在有人伪造TC-BPDU报文恶意攻击设备时,设备短时间内会收到很多的TC-BPDU报文,交换机就会一直进行MAC、ARP删除操作,频繁的删除操作给设备带来很大负担,影响正常的转发业务,给网络的稳定带来很大隐患。
开启防止TC-BPDU报文攻击功能后,交换机会在收到TC-BPDU报文后,进行一次删除MAC地址表和ARP表项的操作,并同时启动周期为10秒的定时器。在此周期时间内,如果交换机再次收到TC-BPDU报文,则交换机最多可以进行1次删除MAC地址表项和ARP表项的操作。从而避免频繁的删除MAC地址表和ARP表项,给交换机进行STP计算以及网络稳定性带来恶劣的影响。
LSW3连接测试仪,分别打入TC报文和MAC地址,观察TC保护功能作用:
连续打入1000个MAC地址,在TC-PROTECTION DISABLED的情况下,发送
时间间隔为1S的TC报文,发现交换机的MAC表项反复删除(由于是连续打入MAC,并且受交换机学习、删除MAC表项的性能影响,会出现边学习边删除MAC的现象):
[LSW3]display mac-address count
This operation may take a few minutes, please wait.
1000 mac address(es) found //收到TC前MAC数量
[LSW3]display mac-address count
0 mac address(es) found //收到TC后MAC表项清零
[LSW3]display mac-address count
This operation may take a few minutes, please wait.
537 mac address(es) found //边学习边删除MAC
[LSW3]display mac-address count
0 mac address(es) found
[LSW3]display mac-address count
This operation may take a few minutes, please wait.
387 mac address(es) found
[LSW3]display mac-address count
0 mac address(es) found
使能TC保护功能:
[LSW3]display mac-address count
This operation may take a few minutes, please wait.
1000 mac address(es) found //收到TC前MAC数量
[LSW3]display mac-address count
0 mac address(es) found //收到TC后MAC表项清零
[LSW3]display mac-address count
This operation may take a few minutes, please wait.
537 mac address(es) found
[LSW3]display mac-address count
This operation may take a few minutes, please wait.
1000 mac address(es) found //学习MAC表项
[LSW3]display mac-address count
This operation may take a few minutes, please wait.
1000 mac address(es) found
[LSW3]display mac-address count
This operation may take a few minutes, please wait.
1000 mac address(es) found
[LSW3]display mac-address count
0 mac address(es) found //10S后重新TC置位
[LSW3]display mac-address count
0 mac address(es) found
[LSW3]display mac-address count
This operation may take a few minutes, please wait.
1000 mac address(es) found
从上面的例子容易看出,开启TC保护后,当设备连续收到TC报文时,一定时间内(10S)只进行一次删除MAC操作,有效的减少了频繁删除操作给设备带来的负担。