本节书摘来自异步社区《CCNP TSHOOT 300-135认证考试指南》一书中的第5章,第5.5节STP功能特性故障检测与排除,作者 【加】Raymond Lacoste , 【美】Kevin Wallace,更多章节内容可以访问云栖社区“异步社区”公众号查看
5.5 STP功能特性故障检测与排除
CCNP TSHOOT 300-135认证考试指南
关键
STP通过大量功能特性来保护拓扑结构,交换机默认并不开启这些功能特性。为了确保STP拓扑结构的正确性,必须掌握这些STP功能特性的故障检测与排除方法。本节将讨论这些STP功能特性并解释相应的故障检测与排除命令。
5.5.1 PortFast
启用了交换端口之后(设备插电并且交换端口没有被关闭),利用PortFast功能特性可以立即将该交换端口切换为转发状态。如果使用基于PVST+、RPVST+或MSTP的PortFast特性,那么在启用了PortFast特性的交换端口上收到BPDU之后,该交换端口会立即从PortFast状态切换为正常的交换端口。该功能特性可以确保交换端口在进入转发状态之前经历必需的状态和流程,不至于产生环路。通过spanning-tree portfast命令可以为特定接口逐一启用PortFast特性,也可以在全局配置模式下利用spanning-tree portfast default命令在所有非中继的交换端口上启用PortFast特性。例5-4给出了验证特定接口启用PortFast特性的三种不同方式。
如果在全局范围内启用可PortFast特性,那么还可以使用另一个show命令来验证PortFast特性的启用情况:show spanning-tree summary(如例5-5所示)。从输出结果可以看出本例默认启用了PortFast特性。此外,请注意例5-5中show spanning-tree interface fastEthernet 0/1 detail命令的输出结果与例5-4输出结果的差异。例5-5显示“The port is in the portfast mode by default(该端口默认启用PortFast模式)”,表明在全局范围内启用了PortFast特性。
例5-5 验证在全局范围内启用了PortFast特性的接口
5.5.2 BPDU保护
BPDU保护(BPDU Guard)特性可以增强STP的域边界,确保STP拓扑结构的可预测性。在启用了BPDU保护特性的交换端口上收到BPDU之后,该端口将被禁用并进入err-disabled(错误禁用)状态。如果希望验证哪些端口处于err-disabled状态,可以使用show interfaces status命令(如例5-7所示)。从输出结果可以看出,Fa0/1处于err-disabled状态。此外,如果跟踪Syslog消息,将会收到如下消息:
···
%SPANTREE-2-BLOCK_BPDUGUARD: Received BPDU on port Fa0/1 with BPDU Guard enabled.Disabling port.
%PM-4-ERR_DISABLE: bpduguard error detected on Fa0/1, putting Fa0/1 in err-disable state
%LINK-3-UPDOWN: Interface FastEthernet0/1, changed state to down
···
例5-7 show interfaces status命令输出结果
可以利用show spanning-tree interface interface_type__interface_number detail和show run interface interface_type_interface_number命令验证是否在特定接口上启用了BPDU保护特性(如例5-9所示)。
如果希望从err-disabled状态恢复正常,需要删除发送欺诈BPDU的设备,然后再分别利用shutdown命令和no shutdown命令手工禁用和启用处于err-disabled状态的接口。或者建立一个err-disabled恢复特性,在预定义的间隔内自动启用接口。如果还能检测到欺诈BPDU,那么该接口将返回err-disabled状态,如果检测不到欺诈BPDU,那么接口将自动恢复正常。如果希望为BPDU保护启用err-disabled恢复特性,那么可以使用全局配置命令errdisable recovery cause bpduguard。
5.5.3 BPDU过滤
BPDU过滤特性的设计目的是抑制特定接口发送和接收BPDU。这样做的目的通常是出于安全性考虑,例如,连接端站或路由器的接口不需要向外发送BPDU,否则将允许端站(end station)收集BPDU中的数据,存在潜在的STP拓扑结构攻击威胁。启用BPDU过滤特性的方式决定了BPDU的抑制程度。
如果利用spanning-tree portfast bpdufilter default命令在全局范围内启用BPDU过滤特性,那么将在所有启用了PortFast的接口上启用BPDU过滤特性,从而抑制这些接口向外发送BPDU。不过,如果在接口上收到BPDU,那么将正常处理该BPDU,并且根据需要通过正常的STP状态/进程切换该接口的状态。
如果利用spanning-tree bpdufilter enable命令手工在特定接口启用BPDU过滤特性,那么将抑制BPDU的发送和接收操作。不过通常并不建议这么做,因为这样做会忽略所有接收到的BPDU,接口会自动进入转发状态,从而导致二层环路。
利用show spanning-tree summary和show spanning-tree interface interface_type interface_number detail命令可以验证是否在全局范围内启用了BPDU过滤特性(如例5-10所示)。如果是逐个接口启用BPDU过滤特性(不建议这么做),那么就可以利用show spanning-tree interface interface_type interface_number detail和show run interfaceinterface_type interface_number命令来验证BPDU过滤的启用情况(如例5-11所示)。
如果拓扑结构中出现了二层环路问题,请检查接口是否启用了BPDU过滤特性。如果启用了该特性,那么将抑制BPDU的发送和接收操作,使得拓扑结构中应该处于阻塞状态的端口却处于转发状态,从而产生二层环路。
5.5.4 根保护
根保护(Root Guard)特性通过确保非根网桥上的某些端口不成为根端口来实现保护根网桥的目的。前面曾经说过,交换机上的根端口指向根网桥,如果欺诈交换机以更优的BID进入STP拓扑结构,那么该欺诈交换机将成为根网桥,其他交换机上的根端口也将发生变化,新的根端口将指向该欺诈根网桥。
根保护特性防止出现该问题的方法是,忽略启用了根保护特性的端口上接收到的更优BPDU并将该端口置入生成树不一致状态。由于根保护特性是通过spanning-tree guard root命令在接口上逐一启用的,因而可以利用show spanning-tree interface interface_type interface_number detail命令验证其配置情况(如例5-12所示)。此外,还可以利用show spanning-tree inconsistentports命令来验证哪些端口处于生成树不一致状态(如例5-13所示)。对于启用了根保护特性的接口来说,接收到更优BPDU是一个好事。
例5-12 验证在接口上启用根保护特性的情况
此外,端口进入根不一致状态之后,还会收到如下Syslog消息:
%SPANTREE-2-ROOTGUARD_BLOCK: Root guard blocking port FastEthernet0/1 on VLAN0010.
交换端口处于不一致状态时,不需要通过人工干预将端口从不一致状态恢复过来,所要做的就是删除从网络向该交换端口发送更优BPDU的设备,只要交换端口侦听不到该更优BPDU,就能自动从不一致状态恢复过来。
5.5.5 环路保护
环路保护(Loop Guard)特性的作用是为二层环路问题提供额外的保护功能。在默认情况下,如果非指派端口停止接收BPDU,那么最大老化定时器到期后该端口将进入转发状态。不过如果该交换机未收到BPDU的原因是发送BPDU的交换机出现了软件故障而无法发送BPDU,那么将会出现什么情况呢?该交换机仍然可以在接口上发送和接收数据。由于非指派端口当前正在发送和接收数据(而不是阻塞数据),因而将会产生环路。出现该问题的原因就在于接口接收不到BPDU。环路保护特性可以确保非指派端口不会错误地切换到转发状态,而是将该端口置入环路不一致阻塞状态并生成如下Syslog消息:
%SPANTREE-2-LOOPGUARD_BLOCK: Loop guard blocking port GigabitEthernet0/2 on VLAN0010.
利用show spanning-tree inconsistent ports命令可以验证哪些端口处于环路不一致状态(如例5-14所示)。
例5-14 验证交换机上的环路不一致端口