网络设计者很可能并不打算让终端用户在用于连接终端用户设备的Access端口上连接交换机。然而,这种事情有时却会发生——例如,有人可能需要大厅的会议室里有更多的端口,于是他觉得他可以把一个小的便宜的交换机接到墙上的端口中
STP拓扑可能会因为这些意外增加到网络中的交换机而发生变化。例如,新交换机可能拥有最低的网桥ID并成为根。为了避免这种情况,工程师可以在Access端口上启用BPDU防护和根防护,用来监控入向BPDU——不应该进入端口的BPDU,因为这些端口应该用于终端用户设备。这两个功能可以一起使用,其操作如下。
- BPDU防护:基于每个端口启用,或使启用了PortFast的端口全局启用;在收到BPDU时立刻由于错误而禁用端口。
- 根防护:基于每个端口启用;忽略收到的更优BPDU,以防止此端口成为根端口。在收到更优BPDU时,此交换机将端口置为根不一致阻塞状态,在停止收到更优BPDU之前,停止转发和接收数据帧。
工程师可以基于每个端口,使用接口命令spanning-tree bpduguard enable无条件启用BPDU防护,也可以在全局使用全局命令spanning-tree portfast bpduguard default启用。然而,全局命令只会在启用了PortFast特性的端口上启用BPDU防护(在端口上配置PortFast特性的方法对此没有影响)。在全局启用了BPDU防护,但特定PortFast端口上又需要禁用BPDU防护的情况下,工程师可以使用接口命令spanning-tree bpduguard disable。
PortFast和BPDU防护之间的关系常令人混淆。事实上,这两个机制之间唯一的依赖关系在于在全局配置的BPDU防护特性。此时,启用了PortFast的端口上会自动启用BPDU防护特性;换句话说,在全局启用BPDU防护特性的话,相当于在所有边界端口上启用该特性。除了这个特定的配置依赖关系外,PortFast和BPDU防护是完全独立的。在一个端口上,无论PortFast的配置是怎样的,工程师都可以配置BPDU防护。而且无论BPDU防护是如何配置的,工程师也都可以端口或全局配置PortFast。
无论BPDU防护是如何在端口上启用的,当启用了BPDU防护的端口收到了BPDU时,它会被置为err-disable状态。
工程师只能基于端口,使用接口配置命令spanning-tree guard root来启用根防护机制。
对于BPDU防护,除非工程师添加额外的命令,否则端口不能从err-disable状态中恢复。可以让交换机在一定的时间后从err-disable状态变为启用状态。对于根防护,如果在最大老化消息时间或RSTP中3倍Hello内没有再次收到非预期的更优BPDU(相当于超时),端口将自动恢复。
BPDU过滤特性考虑的是在端口上停止发送BPDU,以及可选地停止接收BPDU。其行为根据激活方式有所不同。
- 如果在全局使用命令spanning-tree portfast bpdufilter default进行配置,BPDU过滤特性只应用于边界端口(即启用了PortFast的端口)。这些端口连接了设备后,它们会以Hello间隔来发送BPDU;然而,如果在接下来10个Hello间隔期间内,未从直连设备收到BPDU,端口就会停止发送BPDU。因此,端口只会发送11个BPDU(在端口启用后立即发送1个,在10个Hello间隔之间发送10个),然后停止发送BPDU。在此之后端口仍准备好处理任何入向BPDU。如果收到了BPDU,在第1个十倍Hello间隔之间或之后的任意时间,这个端口上就可以有选择地禁用BPDU过滤特性,端口会根据正常的STP规则开始发送和接收BPDU。端口被断开又重连之后,BPDU过滤特性将再次生效。如果在全局配置了BPDU过滤特性,但某个边界端口上不希望启用,工程师可以使用命令spanning-tree bpdufilter disable来排除此端口。
- 如果在端口上使用命令spanning-tree bpdu filter enable进行配置,BPDU过滤特性将使端口无条件地停止发送和接收BPDU。
BPDU过滤的使用依赖于它的配置方式。全局配置的BPDU过滤特性,能够使边界端口在特定时间后停止发送BPDU,因为向不使用STP的终端设备发送BPDU是没有任何用处的。如果因为收到BPDU,而发现端口上其实连接了一台交换机,端口上的BPDU过滤特性就会被禁用,直到端口关闭再启用(通过断开/重连链路,或通过关闭和再次开启)。这在使用多个Access端口连接终端设备的网络中,不得不算是一项优化。
直接在端口上配置BPDU过滤特性,会使端口停止发送和处理收到的BPDU。端口不主动发送BPDU,同时默默丢弃收到的BPDU。这种配置能够避免端口上连接的其他交换机参与STP。通常,工程师使用这个特性,将网络网络分隔为独立的STP域。因为在这种情况中,这些端口上并不进行STP操作,如果STP域之间使用冗余链路互连,就不能避免交换环路的产生。因此管理员需要确保STP域之间没有物理环路。
很多人对于PortFast和BPDU过滤的依赖关系也常有混淆。它们的依赖关系实际上等同于BPDU防护和PortFast的关系。BPDU过滤和PortFast在配置上具有的依赖关系是:唯一一种情况就是在全局配置了BPDU过滤特性的环境中,因为这会自动在所有边界端口(即启用PortFast的端口)上启用BPDU过滤特性。如果因为全局启用了BPDU过滤特性,某个端口上才启用了该特性,在这种情况下,如果端口(必为边界端口)收到了一个BPDU,它将失去边界状态,因为全局BPDU过滤特性的配置应用于边界端口,端口上的BPDU过滤也将被禁用。除此之外,BPDU过滤和BPDU防护之间没有其他的依赖关系。
工程师可以把全局配置的BPDU过滤和BPDU防护结合在一起(BPDU防护可以全局配置,也可以基于端口配置)。如果使用了BPDU过滤和BPDU防护保护的端口收到了一个BPDU,它会自动进入err-disable状态。
另一方面,把端口配置的BPDU过滤和BPDU防护结合起来并没有意义。因为端口会丢弃所有收到的BPDU,而BPDU防护将永远看不到BPDU,意味着它永远不能将端口置为err-disable状态。