生成树特性
一、生成树特性概述
为了帮助STP实现快速收敛,802.1D提供了许多特性来过滤一些条件下BPDU的收发。特性主要来自两个方面:性能和稳定性。
二、性能特性
STP性能特性是指能够加速CST收敛速度的一些功能。例如portfast、backbonefast、uplinkfast等:
portfast:接入交换机access端口启用,加速收敛。
uplinkfast:接入交换机上行链路启用,加速收敛。
backbonefast:汇聚或核心层交换机上启用,加速收敛。
1、Portfast
postfast应用场景:一台PC连接到交换机的access接口,然后开机,access端口将经历STP的端口状态的所有阶段(blocking -> listening -> learning -> forwarding)。默认会经历30s的转发延迟计时,在forwarding状态前,PC是无法收发数据的,也就是30s内无法获取IP地址。同时端口状态的变化会导致TCN BPDU的泛洪,影响二层网络性能。
portfast特性:端口发生变化时,端口状态会直接从blocking->forwarding,同时不会导致TCN消息的生成。
portfast部署建议:
接入交换机下联口设置portfast:一般连接PC、服务器的接口都配置成access,access模式接口配置portfast特性将大大加速STP收敛(因为没有无用的TCN)。
接入交换机上联口不要设置portfast:连接其他交换机、路由器的接口不要启用portfast特性,会导致物理环路,数据包将无休止的转发下去,直到网络瘫痪。
建议配合bpduguard增强二层网络稳定性。
接入交换机全局启用Portfast:spanning-tree portfast default
指定接口启用Portfast:
int E1/1
spanning-tree portfast
查看接口Portfast状态:show spanning-tree int E1/1 portfast
2、Uplinkfast
uplinkfast应用场景:如果接入交换机多条上行链路(一般是两条)没有做Port-channel,此时处于forwarding的端口上行链路故障,其他上行链路接管需要30-50s的收敛时间。
uplinkfast特性:将其他上行链路接管时间优化(blocking->forwarding)。uplinkfast是基于定义的上行链路组,上行链路组由RP和所有提供去往根桥的AP组成。如果RP故障,则意味着主用上行链路故障,那么AP将被立刻顶替为RP。为了加速收敛时间,所有接入层交换机会使用伪组播方式通过新的forwarding端口向上游网络通告自身所有的MAC地址,故障端口切换不超过1s。
接入交换机上行链路最佳建议:构建Port-Channel。
uplinkfast部署建议:
接入交换机的双上行链路设置uplinkfast。
汇聚交换机禁止启用uplinkfast。
3、backbonefast
Backbonefast应用场景:如果接入交换机的上行链路启用了uplinkfast,但是根桥交换机和备根交换机之间的链路故障,接入交换机是无法感知的。uplinkfast能够检测直连链路的失效,BackboneFast是用来检测间接链路的失效。
Backbonefast特性:当启用了BackboneFast的交换机检测到间接链路失效之后,会马上使阻塞的端口进入监听状态,少了20S的老化时间。
Backbonefast部署建议:现网基本不用。
三、稳定性特性
STP稳定性特性是指能够防止因人为、软件故障、链路故障而导致生成树网络震荡的功能。例如bpduguard、bpdufilter、rootguard、loopguard等:
bpduguard:防止乱接交换机而导致环路。
bpdufilter:保护独立的生成树网络。
rootguard:保护生成树网络根桥稳定性。
loopguard:防止因为软件故障而导致的生成树环路。
UDLD:防止因单向链路而导致的生成树环路。
1、bpduguard
bpduguard应用场景:access端口虽然配置了portfast特性,但是仍然可以接收BPDU,如果portfast端口收到了BPDU,端口状态就会变更为blocking。bpduguard特性用来保护portfast端口的完整性,如果端口启用了portfast和bpduguard,那么收到BPDU后,端口进入err-disable。err-disable是让管理员了解这是因为有人将其他交换机接入到portfast接口导致的,而非让管理员认为其没有up。
err-disable表示端口被关闭,需要手动开启或者等待err-disable超时机制自动恢复。
bpduguard部署建议:
必须先启用portfast,否则bpduguard不生效。
接入主机端口配置,如果接到其他交换机的端口配置了portfast+bpduguard,那么bpduguard将关闭端口,防止物理环路形成。
不要同时配置bpduguard和bpdufilter(bpdufilter优先级更高)。
2、bpdufilter
如果两个交换网络想要进行对接,同时每个交换网络有自己的生成树,那么这种情况下就需要阻止发送BPDU,bpdufilter特性用来阻止端口发送BPDU。配置bpdufilter后,端口收到config BPDU都会被丢弃。这个特性适合ISP,为用户提供2层以太网接入的ISP不希望与用户分享生成树信息,通过在每个用户的接入端口上部署bpdufilter,确保ISP不会向用户发送config BPDU,且忽略来自用户的任何config BPDU。
bpdufilter相当于关闭了某个接口的STP。接口模式启用会过滤任何接收和发送的BPDU,全局模式启用只会在portfast接口上过滤发送的BPDU,而不能过滤收到的BPDU。
bpdufilter部署建议:
不要同时配置bpduguard和bpdufilter(bpdufilter优先级更高)。
二层域边界建议配置bpdufilter。
指定接口启用bpdufilter:
int E1/1
spanning-tree bpdufilter enable
查看bpdufilter:show spanning-tree summary totals
查看接口bpdufilter:show spanning-tree int E1/1 detail
3、rootguard
交换网络的根桥已经被人为确定,为了保证现有网络根桥的确定性和稳定性,防止误操作和恶意攻击,阻止未经授权的交换机成为根桥。rootguard在DP上启用后,确保该端口永远是DP,而不会因为收到了比当前根桥更优的BPDU后而改变端口角色为RP,一旦接收到更优的BPDU,端口立刻err-disable,并在STP中显示root-inconsistent。
4、loopguard&UDLD
单向链路故障是指某条链路只能朝一个方向传输数据(例如数据链路只能发BPDU,无法收BPDU)。单向链路故障会引发很多问题,例如生成树环路和数据流黑洞。当二层链路中的blocking端口发生单向链路故障时,由于无法在max-age时间内收不到根桥的BPDU,因此错误的导致端口从blocking过渡到forwarding状态,从而导致了二层环路。为了避免这种情况所导致的二层环路,新增了Loopguard和UDLD机制。
1)loopguard
交换机如果在非DP(即RP和BP)上不再收到BPDU,那么端口将进入不一致环路(Loop-inconsistent)的阻塞状态,不允许经历listening、learning、forwarding。在inconsistent状态下根据对端交换机发过来的BPDU进行决定端口状态。
loopguard部署建议:
不建议全局开启,建议指定接口开启
指定接口启用loopguard:
int E1/1
spanning-tree loop guard
查看loopguard状态:show spanning-tree int E1/1 detail
2)UDLD
UDLD(Unidirectional Link Detection,单向链路检测)是思科私有二层协议,用于检测光纤和网线连接的以太网链路的物理配置,当出现单向链路时,UDLD可以检测出这一情况,关闭相应端口并发送警告信息。
启用了UDLD的交换机会定期向邻居发送UDLD的协议数据包,并在期望时间内收到回应的数据包,如果在收到的数据包中看到了自己的设备和端口ID,则认为链路是正常的,如果没有看到,则认为是一条单向链路。如果超过期望时间未收到数据包,则认为是一条单向链路。一旦认定为单向链路,那么就会关闭该端口。
UDLD有两种工作模式:普通模式、积极模式。普通模式下如果启用了UDLD的端口在期望时间内没有收到UDLD消息,则UDLD会把这个端口状态改为不确定。积极模式下如果
启用了UDLD的端口在期望时间内没有收到UDLD消息,则会尝试重新建立联系,如果尝试8次依然失败的话,会将该端口改成err-disable。
使用UDLD时,需要注意链路两端都要支持并开启UDLD。如果出现UDLD关闭的端口,CLI会展示告警UDLD-3-DISABLE,一旦err-diable除非手动no sh或者等待err-disable机制超时。
查看UDLD功能是否启用:show udld
全局启用UDLD:set udld enable
接口启用UDLD:set udld enable E1/1
查看UDLD接口链路状态:show udld port
评论