首页 > 代码库 > STP 3 - 生成树协议中4个guard 和 3个fast加一个filter

STP 3 - 生成树协议中4个guard 和 3个fast加一个filter

最近出的几个问题总是和生成树协议有问题,复习的时候顺带总结,温故而知新。


先上一个大牛总结的图(Vinny), 总结的非常好,你看完后面的文章再来看这张图就会会心一笑 - i got it !


先讲下计时器,不论什么协议总是有些计时器,Hello数据包什么的。尤其到路由协议,怎么建立邻居关系,怎么通知拓扑改变,各种不同路由协议是各显神通。

所以在理解的时候最好要了解为什么这些协议需要计时器等等,这样我们就可以以不变应万变。


STP Timer 

(计时器的配置在当前交换机成为根桥时有用,因为默认只有根桥产生bpdu)

  • Hello - 发送BPDU的频率,默认2s
  • Max Age - 在没有收到bpdu的情况下保持在block mode,默认20s
  • Forward Delay - 在listening 和 learning阶段等待时间,默认各15s

配置:

Router(config)#spanning-tree vlan 1 hello-time ?
  <1-10>  number of seconds between generation of config BPDUs

Router(config)#spanning-tree vlan 1 forward-time ?
  <4-30>  number of seconds for the forward delay timer

Router(config)#spanning-tree vlan 1 max-age ?
  <6-40>  maximum number of seconds the information in a BPDU is valid


验证

Router#sh spanning-tree vlan 1 br


VLAN1
  Spanning tree enabled protocol ieee
  Root ID    Priority    32768
             Address     cc00.5f24.0000
             This bridge is the root
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec


  Bridge ID  Priority    32768
             Address     cc00.5f24.0000
             Hello Time   2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time 300


Interface                                   Designated
Name                 Port ID Prio Cost  Sts Cost  Bridge ID            Port ID
-------------------- ------- ---- ----- --- ----- -------------------- -------
FastEthernet0/0      128.1    128    19 FWD     0 32768 cc00.5f24.0000 128.1
FastEthernet0/1      128.2    128    19 FWD     0 32768 cc00.5f24.0000 128.2


====================

PortFast

  • 由于局域网中并不是所有设备都运行STP协议,比如PC,电话等等,对于连接终端用户的交换机端口其实是没有必要把整个生成树端口状态走完。Port Fast的作用就是跳过 Listening & Learning 阶段直接从block进入forwarding。当然前提是确保物理层没有产生环路。
  • portfast命令也会影响TCN的生成。面向终端用户的端口默认是会在用户连接或断开时发送TCN到root,这时成个STP都会重新收敛并重置 mac address table /CAM table (by setting aging time to max)。如果开启portfast,就不会生成TCN
配置:
  • interface command - spanning-tree portfast 
  • global command - spanning-tree portfast default (enable portfast on non-trunk ports)

========================
UplinkFast

用于当直连根端口不工作时,立即启用备用根端口。实际上当原有根端口down,交换机会复制CAM table的内容通过备用端口发送给邻居交换机,加快收敛速度。当启用这个命令后,优先级和root path cost会被更改为更高,意味着更不容易竞争根桥或作为别的交换机去根桥的通路(transit path)。

一般应用于有blocked port,而且处于access层的交换机

配置
global command - spanning-tree uplinkfast

========================
BackboneFast

用于当与交换机非直接相连的链接无效时(邻居交换机通往root的链接down),帮助加速收敛(省去20s Max-age)比如以下拓扑(开启backboneFast)


  • SW4是根桥,SW1通过SW3再到SW4。当SW3和SW4之间的Etherchannel断路, SW3向SW1发送 Inferior BPDU警示SW1下游路径去SW4代价很高,应另寻出路。
  • BackboneFast可以在所有交换机上开启,用来侦测非直连链路失效。
配置
global configuration - spanning-tree backbonefast

======================
BPDU Filter

过滤接收和发送BPDU,可以在interface配置也可以global下配置。被配置的端口就不会发送和接收bpdu。一般会和portfast在一起用,动态管理终端连接,但是有安全风险 (man in the middle attack)

  • interface level - 双向过滤,既收不到,也不向外发。
  • global level - 单向过滤,不向外发

interface配置
intface - spanning-tree bpdufilter enable

interface验证
sh run interface [interface id]
clear spanning-tree counters & sh spanning-tree interface [id] details | in BPDU

Global配置(和portfast一起用
spanning-tree portfast default
spanning-tree portfast bpdufilter default

这种情况很有意思,全局开启portfast和bpdufilter。如果端口A连接的是PC,没有收到bpdu,那么bpdufilter使交换机也不是端口A向外发送bpdu;端口B恰好连接到另一台交换机,收到了bpdu,bpdufilter就会在端口B关闭portfast功能,进而可以进行bpdu沟通。

=========================
BPDU Guard

如果在不该收到bpdu的端口收到bpdu数据包,则关闭该端口(err-disable)。有时候因为bpdu guard,莫名其妙端口变为Err-disable,可参考我另一篇博文 Err-disable诊断与恢复 。
例如:当面向主机的端口开启了bpdu guard,但是有人连接了一个交换机,端口收到bpdu后就会被置于Err-disable状态。如果err-disable recovery time没有开启的话,就必须联系网络管理员去shut/ no shut端口。当然前提是必须先移除那个多余的交换机,不然端口依然会被关闭。

在全局配置模式下可以和portfast一起配合使用
spanning-tree portfast default
spanning-tree portfast bpduguard default

=========================
Root Guard

防止新加入的交换机打乱原有拓扑,一般配置在Core和Distribution 面向access layer的端口。一旦下行端口接收到bpdu包,指示下行邻居交换机为根桥,这时root guard就会block这个下行端口直到邻居交换机priority等信息更改(不再与原有根桥竞争),才会解除对下行端口block。

端口上配置:
interface level - spanning-tree guard root

验证:
sh spanning-tree interface [id] detail

=====================
Loop Guard & UDLD (Unidirection Link Detection) "Guard"

红色标出的是两者的优缺点。这就是为什么经常同时使用
  • Loop Guard - 防止配置错误,ios软件问题导致stp不能正常工作
  • UDLD - 能侦测出物理链路断路或搭错跳线
 
FunctionalityLoop GuardUDLD
ConfigurationPer-portPer-port
Action granularityPer-VLANPer-port
AutorecoverYesYes, with err-disable timeout feature
Protection against STP failures caused by unidirectional linksYes, when enabled on all root and alternate ports in redundant topologyYes, when enabled on all links in redundant topology
Protection against STP failures caused by problems in the software (designated switch does not send BPDU)YesNo
Protection against miswiring.NoYes

loopguard配置
interface level -  spanning-tree guard loop
global level - spanning-tree loopgauard default


UDLD配置和验证:
interface level - udld port
show udld interface [id]


思科文档: http://www.cisco.com/c/en/us/support/docs/lan-switching/spanning-tree-protocol/10596-84.html
INE blog "UDLD mode of Operations":http://blog.ine.com/2008/07/05/udld-modes-of-operation/

看来UDLD需要再来一篇单独讲啊,很多地方都能用到。今天先到这里吧。