BPDU Guard, BPDU Filter, Root Guard, Loop Guard 和UDLD是思科交换机在安全方面考虑所提出的几个特性,能帮助维护网络的稳定性和提高网络安全性。如果有任何可疑的设备接入现有网络、有环路的产生或者线路故障,交换机会自动进行相应的措施,包括把端口暂时关闭来防止危害的发生。

BPDU Guard

BPDU Guard(BPDU 防护),简单的讲,它的意义就是一个不该接收BPDU的端口,比如被启动了 portfast 的端口,一旦收到BPDU报文,那么BPDU保护功能将会立即关闭该端口,并将端口状态置为 error-disabled 状态。BPDU Guard配置分为全局型的配置和接口级的配置,这两种配置的效果有些不同。
注:一旦某个端口被转入 error-disabled 状态,必须通过管理员手工重启并恢复该接口!

全局配置:
全局配置BPDU Guard将使用 spanning-tree portfast bpduguard default (不同交换机命令可能不同)的全局配置命令,通过命令不难看出,全局配置BPDU Guard功能是必须依附于portfast而存在的,因为一个被规划为portfast的端口默认情况下是不应该连二层接桥接类设备,一般用户连接PC机和服务器,那么这样的端口是不应该接收BPDU报文的,如果在全局配置了BPDU Guard功能,当portfast端口一旦收到BPDU报文,那么该端口将被关闭并转入error-disabled状态。

接口配置:
在接口模式下配置BPDU Guard是通过 spanning-tree bpduguard enable (不同交换机命令可能不同)接口配置命令来完成,注意在接口模式下启动BPDU Guard功能,不需要依赖portfast而存在,换言之,在接口模式下启动BPDU Guard功能时,无论该接口是一个什么接口,是否为portfast接口这些都不重要,只要管理员认为该接口不应该接收BPDU报文,那么就可以在接口上配置BPDU Guard功能,一旦接口被启动BPDU Guard功能后接收到BPDU报文,那么该端口将被关闭并转入error-disabled状态。

BPDU Filter

BPDU Filter 和 BPDU Guard 一样,也是和 PortFast 配合使用的。当PortFast功能在端口开启以后,这个端口会正常接收和发送BPDU报文。BPDU Guard的工作是阻止这个端口接收BPDU报文(一接收就把这个端口给err-disable掉),而不阻止发送BPDU报文。而BPDU Filter的工作则是阻止该端口参与任何STP的BPDU报文接收和发送。
BPDU Filter支持在交换机上阻止PortFast-enabled端口发送BPDU报文,这些端口本应该介入终端,而终端是不参与STP生成树协议的,BPDU报文对他们没有任何意义。阻止发送BPDU报文能达到节省资源的目的。

全局模式下配置 BPDU Filter 会导致:

  • 该交换机上所有开启了PortFast功能的端口都会启用BPDU Filter功能
  • 如果端口收到BPDU报文,这个端口将失去PortFast状态,BPDU Filter功能也会丧失,从而成为普通端口参与STP
  • 刚开启的时候,端口会发送10个BPDU报文,如果期间收到任何BPDU报文,这个端口的PortFast和BPDU Filter功能会丧失

接口配置模式下配置BPDU Filter 会导致:

  • 端口忽略BPDU报文
  • 不发送任何BPDU报文

注:BPDU Filter和PortFast配合配置在接入层交换机的接入端口。如果BPDU Guard和BPDU Filter同时配置上,那么只有BPDU Filter会起作用!

Root Guard

Root Guard(根防护),阻止未经授权或者意外接入的交换机成为根网桥,以防止新加入的交换机(有更低根网桥ID)影响一个已经稳定(已经存在根网桥)的交换网络。

  • 工作原理:当一个端口启动了此特性,收到了一个比根网桥优先值更优的BPDU包后,则它会立即阻塞该端口,使之不能形成环路等情况。这个端口特性是动态的,当没有收到更优的包时,则此端口又会变成转发状态。
  • 目的:强制将端口设置为designated状态,保证自己是根交换机
  • 配置:不能开启全局配置,只能接口配置

image.png

如上图所示,当新的交换机S4接入已稳定的交换网络时,由于它具备更有优势的BID,成为了新的根桥,这使得整个网络链路发生改变,BPDU报文的流向也如箭头所绘会发生改变。
而 Root Guard 的意义就是在S1的P7端口上强制它成为指定端口,即使当P7端口收到比当前更有优势的BPDU报文,S1会将该端口转为 root-inconsistent(不一致根)状态,并且在这种状态下该端口会进入阻塞状态,流量肯定也不会从该端口转发,达到保护并强化了原环路中的根S0地位的目的,注意此时 root-inconsistent 的状态相当于生成树的监听状态,如果S4这台潜在的非法根桥不再发送BPDU报文给S1的P7端口,那么该端口将自动结束 root-inconsistent 状态,并取消对该端口的阻塞。

Loop Guard

Loop Guard(环路防护)可以阻止在点对点链路上由于单向链路失效而发生环路。当在交换机上全局启用环路功能后,就会应用到系统中所有的点对点端口。环路保护检测根端口和阻塞端口,并确保它们可以从网段中的指定端口上接收到BPDU包。如果启用了环路保护的根端口或者阻塞端口停止了从网段中指定的端口上接收BPDU包,则它假定在端口上存在物理链路错误,并转变这些端口为阻塞状态,以便可以立即接收BPDU包。
可以在基于每端口或者基于全局基础上启用环路保护。当在某个端口上启用环路保护时,环路保护功能将自动应用到该端口所属的所有活动实例或VLAN上。当禁止了根保护功能时,则仅在指定端口上禁止。禁止环路保护功能后,所有存在冲突环路的端口将转变成侦听状态。

  • 工作原理:防止一个阻断的端口由于链路不正常(不能双向通信等)接不到BPDU后变成转发状态,从而产生环路。配了此项后,即使接不到BPDU报文也是阻断的 loop-inconsistent blocking 状态。
  • 目的:为二层网络提供防止环路的功能
  • 配置:可以全局开启,也可以在接口下开启,但不建议在全局开启
  • 条件:portfast 接口不能开启 Loop Guard
  • 建议:只有交换机上的阻塞端口和根端口才需要开启 Loop Guard,根交换机上所有端口都是指定端口,所以在根上开 Loop Guard 没有意义。如果一个网络中所有交换机没有阻塞端口,就表示此网络无环,同样不需要开启 Loop Guard。

image.png

如上图所示,交换机S2的P4端口为阻塞状态,当该链路由于某种原因导致单向链路故障时,S2无法接受到来自S1的BPUD报文,当超过老化时间后,S2错误地认为已经不存在环路了而将P4端口转为转发状态,使得该网络产生环路,若开启了 Loop Guard 功能,S2会自动把P4端口状态更改为 loop-Inconsistent 状态,从而阻止环路的进一步发生,同样的,当处于 loop-Inconsistent 状态的接口再次收到BPDU报文的时候,会根据BPDU报文的内容进行STP计算,从而恢复正常状态。因此Loop Guard的恢复也是完全自动的,无需手工干预。

注:如果在一个启用了root guard的端口上启用loop guard,loop guard将禁用root guard功能,即它们不能同时使用!

UDLD

UDLD(Unidirectional Link Detection)是二层的链路检测协议,用来检测光口的二层链路状态。当链路出现单向传输故障的时候,UDLD能检测到这个故障并且把这个端口给关闭。UDLD能在端口是UP/UP状态但无法收到或发送BPDU报文的情况下发挥作用。当UDLD开启后,相应的端口会以默认的15秒为周期发送UDLD报文并且期望收到相应的UDLD报文,如果在老化时间(默认是45秒)都没有收到相应的UDLD报文的话,就会认定存在单向链路失效,把该端口变为err-disable状态。

注:UDLD一般和Loop Guard配合使用。

结论

BPDU防护,BPDU过滤和根防护是用于防止新的网桥接入导致的环路,Loop Guard和UDLD(单向链路检测协议)是防止单向链路引发的环路,两者造成环路的原因不同。

参考链接:
https://www.xiaopeiqing.com/posts/1435.html
http://blog.sina.com.cn/s/blog_743055cb01012jfp.html
http://blog.sina.com.cn/s/blog_77a3f3850101afmf.html