PortFast,UplinkFast,BackboneFast是生成树协议(STP: Spanning Tree Protocol)所含有的3个特性,一般应用在思科等厂商的交换设备上。这3个特性都是为了加快生成树(STP)协议的收敛速度,可以从默认的50秒减少的优化后的几秒甚至毫秒级别,这种方案对一般敏感性网络或者含语音通信的网络来说是至关重要的。下面让挨踢小茶娓娓道来。
PortFast
Spanning-tree PortFast可以使交换端口状态直接跳过listening和learning状态而直接达到forwarding状态,而默认的配置中是至少需要30秒的(包括从listening到learning状态的15秒和从learning状态到forwarding状态的15秒)。PortFast特性必须配置在连接终端或者服务器的端口,而一定不能是连接另一台交换机的接口,否则会造成网络环路,而STP就没有意义了。也就是说PortFast只能配置在接入层交换机中。
PortFast的配置也是非常简单的,在接口模式下:
Switch(config-if)#spanning-tree portfast {enable|disbale} [trunk]
或者在全局模式下,让所有接口默认启用PortFast
Switch(config)#spanning-tree portfast default
PortFast还能配合BPDU Guard和BPDU Filter进行应用。
UplinkFast
UplinkFast提供了再生成树拓扑结构发生变化之后的快速收敛和冗余链路的负载均衡措施。在网络实际应用中,上行链路一般不止一条,为的是达到冗余备份,万一其中一条上行链路坏了,还有备用的上行链路可以自动切换使用。事实上,在大型网络中,不仅仅是上行链路,任何一个设备和其他层次的设备相连都不应该只存在一条单一链路。多上行链路在STP拓扑中会有其中一条上行链路处于blocked状态,当另一条链路坏了后,这个blocked状态的链路会自动切换到Forwarding状态来转发数据包。
当链路都正常的时候,根交换机A和交换机B是通过L1链路直连的,交换机C和交换机B相连的端口是处于blocked状态的,目的是为了防止产生环路(如下图)。
当交换机C检测到连接上层的交换机A的链路失效时,UplinkFast特性能使交换机C本来的blocked口直接转换为forwarding状态,而不用从listening和learning状态进行过渡,这个时间可以控制到1~5秒,而如果不开启UplinkFast的话,这个时间将会是30秒。(如下图)
UplinkFast的配置是在全局模式下:
Switch(config)#spanning-tree backbonefast
BackboneFast
当一个交换机从其指定接口(designated port)接收到来自指定桥(designated bridge)一个次级BPDU报文的时候,就会激活BackboneFast功能。当一个设备(一般是汇聚层)失去了和跟桥的连接之后,会认为跟桥失效了,因此会发布一个BPDU,声明自己是网络中的跟桥(BID最低)。但事实上跟桥并没有失效,在接入层交换机C来说,它还是和真实的跟桥进行连接,因此对于刚才那个BPDU认为是次级BPDU,是会直接忽略的。
但是如果持续20秒(默认的老化时间,STP Maximum Aging Time)都收到次级BPDU的话,且收到BPDU的口是blocked口话。交换机会寻找是否有通往跟桥的备用链路。如果没有,则启用BackboneFast,如果有,则发送Root Link Query PDU从备用口发出告诉跟桥(这个在本文不讨论)。
如果L1链路失效了,交换机C定义这个为非直连链路失效,因为交换机C没有直接连接L1。交换机B这个时候已经没有去往根桥的链路了。BackboneFast可以直接将本来blocked的端口转换为listening状态,然后经过15秒切换到learning状态,再经过15秒切换到forwarding状态,这个过程总共耗费大概30秒的时间。
配置也是非常简单
Switch(config)#spanning-tree backbonefast
一般配置在所有交换机中。