■ 枝江市职业教育中心 杨华 李善斌
编者按:本文系统探讨了造成网络物理环路的成因以及相关的检测机制,并通过模拟大量实验,对比了主要厂家设备的特点。
关于物理环路,大家很自然想到生成树STP协议。其实STP主要是为了实现链路冗余,而现实中物理环路的情况非常复杂,而STP 只是解决了其中一种,如图1 ~3所示。STP 协议只能解决图中部分的环路,如果交换机下联的傻瓜交换机出现环路,一样会影响到上级交换机造成上层交换机网络瘫痪,并且STP协议无法解决这种问题,此时必须使用其他解决方案来解决。而不同的设备厂商也有不同的技术措施。
笔者根据多年的实践经验,利用手中现有真实设备,模拟了大量实验,并总结如下。
如图1 ~3所示。
图1 设备下挂网络环路
图2 设备所在网络环路
图3 设备接口自环路
在此物理环境下,思科交换机有多种检测机制可以检测,有时系统会直接给出如下内存错误提示信息。登录监控系统查看这台交换机各个端口的使用率,有的端口占用率竟然高达90%。
主要原因是环路引发的广播风暴崩溃了系统,还来不及显示精确的错误信息(是由哪种机制检测出来的),但可以通过err-disabled项查询,如图4 所示。
(1)环路自检测
以上信息就明确表示由于检测到第37 端口出现了环路,所以将该端口置于了err-disable 状态。
(2)思科独有二层邻居发现协议CDP
以上信息就明确表示由于检测到第29 端口收到自己发出的CDP 协议包,认定此端口号下联环境有环路存,所以将该端口置于了err-disable 状态。
(3)思科独有二层动态中继协议DTP
以上信息明确表示由于检测到第35 端口收到自己发出的DTP 协议包,本来是用来发出去进行中继,但又转回来了,认定此端口号下联环境有环路存,所以将该端口置于err-disable 状态。
(4)生成树协议端口保护功能
在全局或在接口号下开启portfast:
图4 通过err-disabled 项查询下连设备物理自环
图5 通过端口流量发现环路风暴
以上信息就明确表示由于检测到第45 端口收到自己发出的BPDU 协议包,本来是用来防止下联端口接入了其它的交换机设备,改变了之前的生成树的拓朴结构,但因为环路又转回来了,认定此端口号下联环境有生产树产生的BPDU,所以将该端口置于了err-disable 状态。
注意:以上几种情况可能根据思科具体产品不同触发机制会不一样了,再加上人为修改了触发时间,可能也不一样了。
端口直接不会UP 起来,不清楚是什么原理。思科的设备不知做了什么技术侦测,直接跟DOWN,可能它认为,自环本身就是一个错误,直接不让它发生。
如图5 所示。
(1)如果只有一台设备的一个端口出入方向流量较大,可能是单端口环回。
(2)如果只有一台设备的两个端口流量较大,可能是本设备两个端口环回,如上所示。
(3)如果某端口只有单方向流量,需要重点排查,该端口下设备可能存在环路。
分析:使用体验不好,因为真正发生环路风暴后,交换机系统CPU 使用过载,无法正常使用命令调试查看。
对于端口配置了广播抑制,或单环、半环场景,流量无法产生风暴,则还可通过MAC 漂移检测来判断是否存在环路,任何二层环路都会伴随持续MAC 地址漂移。如下所示,如果设备一直打印该告警,GE3/0/5 和GE3/0/6端口之间可能存在环路。
华为主要是通过Loop Detection 以及Loopback Detection 这两种技术来检测各种二层环路。它们都是一种通过周期性发送环路检测报文来检设备下挂网络环路、设备所在网络环路、设备接口自环路,并能及时发送告警,自动找出问题的接口受控,从而减小环路对本设备乃至网络的影响。
这个应该是一个公共协议判断,所有设备都支持,虽然其本意不是判断环路。
如下所示,在端口10 上发现了BPDU 报文,迅速把它置于blocked 状态。
H3C 与华为设备的环路检测比较相似,下面探讨一下关于对于不同端口属性的环路处理。
在全局下开启环路检测并设置检测间隔时间:
当网络中真出现环路时,可以用以下命令查看环路来自哪个端口:
缺省情况下,系统只在Trunk 端口或Hybrid 端口所属的缺省VLAN 内进行环回监测。如果要对trunk 或hybrid 接口上的所有VLAN 进行环路检测,则需要使用以下命令开启多VLAN 检测功能。注意,loop back-detection per-vlan enable 命令对Access端口无效。
例如,如果想让交换机trunk 端口g1/0/16 下的所有VLAN 中执行网络环回监测操作,必须进行以下配置操作:
进入接口视图:int G1/0/16
输入命令:loopback-det ection per-vlan enable
或loopback-detection enable vlan
交换机就能在Hybrid 端口和Trunk 端口所属的所有VLAN 中执行网络环路监测。
当检测到端口存在环回后,首先会上报错误信息,提示某端口在某VLAN 中存在环回情况。如果配置了端口要进入受控状态,则会设置该端口不再学习MAC 地址,端口的流量和其它端口隔离,从而进入该端口下存在环路而不影响其它端口的状态。
推荐配置:
设备的上行端口(trunk)打开环回检测,但是配置该端口不受控。这样,当该端口检测到某个VLAN 存在环路后,仅仅上报环回的trap,但不会使端口进入受控状态。这样,一些VLAN 的环路则不会影响别的VLAN 中的业务。
对于下行端口和用户端口,打开环路检测,且配置端口受控。
RLDP 技术是锐捷自己研发的一种链路监测机制,一般应用在接入交换机,它不仅仅能够检测环路故障,还可以检测单侧链路故障和双侧链路故障。
环路故障原理:交换机某个端口可以收到自己的探测报文。
以下是完整的配置命令:
Rujijie(config)#rldp enable 全局开启RLDP 功能
Rujijie(config)# inter face range g0/1-24 对于下联PC 或HUB 的端口需要开启,不要在接入交换机的上联口开启该功能
Rujijie(config-if-ra nge) #rldp port loop-dete ct shutdown-port 接口开启RLDP 功能,如果检测出环路后showdow 该端口
Rujijie(config)# err disable recovery interval 300 如果端口被RLDP 检测并shutdown,再过300 s 后会自动恢复,重新检测是否有环路
建议:环路检测处理机制是当系统检测到端口出现环路时不同厂商设备都有不同的处理机制,比如上报错误信息、处于阻塞状态、直接Shutdown、自动恢复、生成日志信息等。选择合适的处理机制,将会影响到整个网络的性能。当网络中存在环路时,为防止大量报文的冲击,设备会丢弃部分报文。而如果环路检测报文也被丢弃,设备在端口状态自动恢复功能的作用下会误判定环路已消除。在这种情况下,建议将环路检测的处理模式配置为Shutdown 模式,或当设备提示出现环路时通过手工排查来消除环路。
从以上几个厂商的设备分析不难看出,华为针对二层的环路故障做了很多技术保障,在细节上很用心,为不同用户都提供了合适的解决方案;华三也是在基于端口的特征及VLAN 属性上进行精准检测,但在实验上感觉不是很明确,可能没有达到一定的规模。CISCO 设备在链路故障检测和设备智能化的配置上下足了功夫,对设备后期的维护很精准,当然对设备本身的硬件配置提出了更高要求,再就是部分协议是私有的,不具有通用性,与其它厂商设备在一起可能会导致一些不确定故障。