STP防护机制
1:bpduguard
    工作原理:当启用了BPDU Guard特性的端口在收到BPDU的时候会使端口进入err-disable(物理指示灯灭或者显示为橙色)状态,从而避免桥接
环路。
一般BPDU Guard是和PortFast结合使用,在端口上启用了PortFast之后,如果没有启用BPDU Guard,那么端口收到BPDU的时候,STP会让端口进
入blocking状态,当配置了BPDU Guard之后,端口收到BPDU的时候就进入err-disable。 [这个端口就相当于被关闭了,不会转发任何数据,也就
切断了环路,保护了整个网络。]需要配置errdisable recovery后才可自动恢复。

配置BPDU
A:基于端口配置BPDU:
配置BPDU Guard:
Switch(config)# spanning-tree portfast bpduguard default        /---在启用了PortFast特性的端口上启用BPDUguard---/
Switch(config-if)# spanning-tree bpduguard enable                 /---在没启用PortFast特性的情况下启用BPDUguard---/
B:全局配置BPDU:
Switch(config)#spanning-tree portfast bpduguard
全局配置是配合PortFast使用的,当端口上启用了PortFast之后,该端口才会启用BPDU Guard,如果该端口没有启用PortFast,那么该命令不会使
该端口启用BPDU Guard。
C:配置errdisable recovery,进入err-disable状态的端口自动恢复正常。
SW(config)#errdisable recovery cause bpduguard
SW(config)#errdisable recovery interval 30 //30秒后恢复
小结:配置了BPDU Guard之后,端口只发不收BPDU,收到的时候就把端口进入err-disable状态。
2:BPDU filter
    工作原理:当如果全局配置了BPDU Filte,当某个Port Fast端口接收到了BPDU,那么交换机将禁用Port Fast和BPDU Filtering特性,把端口更
改回正常的STP状态.
    BPDU filter特性和BPDU Guard特性非常类似.通过使用BPDU Filtering,能够防止交换机在启用了Port Fast特性的端口上发送BPDU给主机。
    如果在单独的Port Fast端口启用BPDU Filtering,此端口将不发送任何的BPDU并忽略所有接收到的BPDU.
    注意,如果在连接到其他交换机的端口(不是连的主机的端口)上配置了BPDUFiltering,那么就有可能导致层2环路(Prevent from sending and
receiving BPDU).另外,如果在与启用了BPDU Filtering的相同端口上配置了BPDU Guard特性,所以BPDU Guard将不起作用,起作用的将是BPDU
Filtering.
配置了BPDU Filter:
A:全局配置:如果在全局配置了BPDU Filter,那么接口放弃PortFast特性,转而进入正常的STP操作,转发BPDU。
B:接口配置:如果是在接口下明确配置BPDU Filter,那么交换机的这个接口将不发送任何BPDU,并且丢弃接收到的所有BPDU。
SW(config-if)#spanning-tree portfast
SW(config-if)#spanning-tree bpdufilter enable | disable
小结:能够防止交换机在启用PortFast特性的接口上发送BPDU,因为PortFast特性的接口一般都是连接到主机,不需要参与STP,减少不必要
的BPDU的发送。
3: Root Guard
    工作原理:当一个端口启动了Root Guard特性,当它收到了一个比根网桥优先值更优的BPDU包,则它会立即阻塞该端口,使之不能形成环路等
情况。这个端口特性是动态的,当没有收到更优的包时,则此端口又会自己变成转发状态了。
       ROOT Guard在DP(designated port)指定端口上做,该端口角色就不会改变了,只会是DP了,这样可以防止新加入的交换机成为root,该端
口就变成了永久的DP了,(show spann inconsistentport),若新加入的交换机想成为root,则它的端口不能工作,直到这个新交换机委曲求全
做RP为止,在PORTFAST端口下敲入后,新接入进来的交换机可以参与生成树的运算,但是不能成为根。
小结:Root Guard:防止新加入的交换机(有更低根网桥ID)影响一个已经稳定了(已经存在根网桥)的交换网络,阻止未经授权的交换机成为根网
桥。
如果真有配置了PORTFAST的端口收到了上级的BPDU(其实默认PORTFAST是不收的,表明就是下级接了新的交换机了),那么这个端口变
为ROOT-INCONSIS状态,完成运算后,恢复为转发状态。Root Guard特性将把该端口设置为root-inconsistent状态(堵塞)来防止客户交换机成为根
桥。

4: Loop Guard
    工作原理:环路保护防止于交换机上的非指定端口(就是说如果你的机器都是指定端口就没有必要了,比如根桥上面不会用的)在max_age时
间内没有收到bpdu数据包时,交换机上的非指定端口会自动转变成forward状态而产生的环路而设计的。Loop Guard技术替代端口(AP)或RP由于单
向链路的故障问题成为指定端口(DP)
 A:接口配置 ,Loop guard在RP接口或替代端口启用:
Switch(config-if)# spanning-tree guard loop
B:全局配置:
Switch(config)#spantree global-default loopguard enable
小结:如果使用Loop Guard,那么Root Guard将会被关闭。 建议Loop Guard 和UDLD同时使用。 Loop Guard主要是对STP提供额外的由于单向链路
故障引起的环路防护(UDLD也可以检测单向链路故障),当阻塞接口接收不到正常的BPDU时,接口不再进行正常的STP收敛,而是进
入“loop-inconsistent(环路不一致)”状态,无需配置即可自动恢复。如果使用Loop Guard,Root Guard将会被关闭,不能同时启用。
STP保护机制总结:
  配置了bpdu guard的端口收到bpdu后会置端口为error disable状态,但互联的设备发不发bpdu由不得自己,所以bpdu guard是配在那些连接不
发送bpdu设备的端口上。既然对方不发bpdu那还配什么呢?这就是这个特性设计的重点,它被设计来防止自环的。
    bpdu filter类似guard,但在全局和接口下配置的效果不一样。在接口下是不发送bpdu和忽略收到的bpdu。而在全局下收到bpdu后禁用port
fast和filter自己。这样端口经历5个stp的状态,避免环路(效果同guard但方法不一样)。
到此可以看到这两个都是对port fast带来的潜在问题的预防。
    两种的具体区别进行比较:1.当在端口下两种都配了,则filter会起作用。2.guard不收但会发bpdu而filter不收不发,如果将两者配在了
非host接口下,guard没问题,但filter会产生环路,因为对面的接口收不到bpdu会进入forward。
    root guard是配在dp上的,这样来保护rp。
    loop guard是配在block端口,使得此端口接受不到bpdu也保持在block状态。
    root和loop的比较:同一端口两个都配了loop生效(loop默认开启,所以手动关闭才能配root)。