作者:一天,公众号:网络之路博客(ID:NetworkBlog)。让你的网络之路不在孤单,一起学习,一起成长。
真实的环路(来自于VIP群的案例,博主协助解决)
环境很简单,一台三层交换机下面下挂了一台傻瓜交换机,在串接了一台交换机,之前运行的都好好的, 有一天突然网络非常的卡,他觉得是有环路了
对于常见的网络来说,最担心的就是接入层是傻瓜交换机,因为傻瓜交换机往往就真的工作在纯二层,只有二层MAC表的转发机制以及学习功能,像STP、VLAN都不支持,所以对于这样的组网,我们需要多注意,特别在这种中小型场景,管理不是特别规范的网络中,容易形成环路,就像上面这样,不懂网络的人随便把线路一插,网络就产生了,所以作为IT管理者/实施者来说,我们需要做一些措施,让我们去知道网络发生了环路。
如果下面傻瓜之间打环了,它是能够感知的,因为它自己发出去的BPDU,从同一个接口收到了,它认为环路了,所以在protection里面有一个loopback,这个时候环路导致操作已经很卡了,虽然STP将接口状态变成了DISCRDING,但是它是可以接收BPDU的,所以会一直在处理导致设备资源占用过高,我们可以开启一个功能,叫做BPDU保护。
BPDU保护功能直接开启是不会生效的
像这样的网络,下面是傻瓜交换机,用于接用户的,正常情况下它是不会收到BPDU报文的,比如我们在上面介绍的边缘端口,它就是用于直接对接用户的,BPDU保护功能呢,它就是用于保护开启边缘端口的接口,如果收到了BPDU后,直接shutdown接口,所以这里还需要开启一个 边缘端口功能。
[Huawei]stp bpdu-protection
[Huawei]interface g0/0/1
[Huawei-GigabitEthernet0/0/1]stp edged-port enable
Sep 1 2021 20:31:37-08:00 Huawei %%01MSTP/4/BPDU_PROTECTION(l)[11]:This edged-port GigabitEthernet0/0/1 that enabled BPDU-Protection will be shutdown, because it received BPDU packet!
Sep 1 2021 20:31:38-08:00 Huawei %%01PHY/1/PHY(l)[12]: GigabitEthernet0/0/1: change status to down
Sep 1 2021 20:31:38-08:00 Huawei %%01IFNET/4/IF_STATE(l)[13]:Interface Vlanif1 has turned into DOWN state.
//因为接口处于边缘端口,但是又收到了BPDU的包,还开启了BPDU保护功能,触发保护机制,直接shutdown,关闭后,交换机资源占用就立马下来了。
接口直接像被管理员输入了shutdown一样,如果开启了边缘端口跟保护功能的接口被shutdown了,那大部分就是有环路出现了,当然还有一种可能,就是无意中把二层交换机接入到了傻瓜交换机下面,正好又开了STP功能,也会发送BPDU包。
恢复方法
手动:进入接口下面shutdown,在undo shutdown,开启
自动:error-down auto-recovery cause bpdu-protection interval ,通过该命令自动恢复,间隔可以自己调控,通常建议3~5分钟,这样出现了问题下面的人员会告诉你网络故障了。(但是这里需要注意,如果在配置这个命令之前,就已经出发了某种机制把接口down掉了,是需要手动开启的
另外一种解决办法:loopback Detection
Loopback Detection属于单节点防环技术。它通过从接口周期性发送检测报文,检查该报文是否返回本设备(从同一个接口或者其他接口),进而判断该接口、设备下挂网络或设备,或者设备双接口间是否存在环路。在发现环路后,环路检测能向网管发送告警和记录日志,并能根据用户事先的配置对接口进行处理(默认关闭接口),从而使接口处于受控状态,减小环路对本设备乃至整个网络的影响。
[Huawei]interface g0/0/1
[Huawei-GigabitEthernet0/0/1]undo stp edged-port
[Huawei-GigabitEthernet0/0/1]loopback-detect enable
[Huawei-GigabitEthernet0/0/1]undo shutdown
Sep 1 2021 22:19:08-08:00 Huawei LBDT/4/Porttrap:OID 1.3.6.1.4.1.2011.5.25.174.3.3 Loopback does exist on interface(6)GigabitEthernet0/0/1 ( VLAN 1 ) , loopback detect status: 3.(1:normal; 2:block; 3:shutdown; 4:trap; 5:nolearn)
//检测到G0/0/1(VLAN1)存在环路,执行动作,默认3,shutdown
Sep 1 2021 22:19:08-08:00 Huawei %%01MSTP/4/LOOPBACK_DETECTED(l)[2]:The port GigabitEthernet0/0/1 was blocked because it received the BPDU packets sent by itself.
Sep 1 2021 22:19:09-08:00 Huawei %%01PHY/1/PHY(l)[3]: GigabitEthernet0/0/1: change status to down
Sep 1 2021 22:19:09-08:00 Huawei %%01IFNET/4/IF_STATE(l)[4]:Interface Vlanif1 has turned into DOWN state.
通过display loopback-detect可以看到当前哪些接口有环路存在,执行了什么操作,在新版本里面默认会在三倍检测报文时间(15秒)后自动恢复接口,如果没有环路则正常运行,如果有则继续shutdown。也可以使用过[Huawei-GigabitEthernet0/0/1]loopback-detect recovery-time 来指定恢复时间,建议15秒以及以上。
[Huawei-GigabitEthernet0/0/1]loopback-detect action ?
block Block port //阻塞
nolearn Nolearning port //不学习MAC
shutdown Shutdown port //关闭接口
trap Trap only //只告警
执行动作默认是shutdown,还可以改成其他的行为
注意:环路检测只是一个单机功能,并不能像STP这样整个二层网络的设备同时协同,所以它无法替代这些功能,比较适合于核心下挂傻瓜交换机的形式。
疑问:接口是关闭了,但是下面的环路还是没有解决,那关闭的意义在哪呢?
华三设备的配置
也来看看环路,首先我们需要交换机变成一台傻瓜交换机
通过该命令把两个台交换机的STP关闭
[H3C]undo stp global enable
跟华为状态一样,它接口变成阻塞了
[H3C]stp bpdu-protection
[H3C]interface g1/0/1
[H3C-GigabitEthernet1/0/1]stp edged-port
开启方式跟华为一样,直接全局开启BPDU保护,接口开启边缘端口
跟华为效果一样,收到BPDU后呢,接口直接down掉,但是不一样的是华为需要配置自动恢复功能才可以来恢复,华三V7设备,默认情况下是已经开启了自动恢复功能,每个版本默认时间不太一样, 全局通过 shutdown-interval 可以进行修改
可以通过display stp down-port查看 因为STP down掉的原因。
[H3C]interface g1/0/1
[H3C-GigabitEthernet1/0/1]undo stp edged-port
[H3C-GigabitEthernet1/0/1]loopback-detection enable vlan 1 //华三需要指定VLAN,可以ALL
[H3C-GigabitEthernet1/0/1]loopback-detection action shutdown //默认没有对应的执行动作
华三的模拟器该功能不生效,所以没法出效果,同样可以通过display loopback-detection来查看
排查方法与经验
实际中不可能时刻的盯着交换机,所以它弹出来的日志只是发生的时候,反而你登录的时候,可能没有问题,日志就不会出现,这个时候我们就要看设备自己记录日志的缓存
(1)display logbuffer :通过该命令可以查看日志缓存的记录(ENSP模拟器不支持)
(2)WEB查看,在日志里面可以翻看记录,比如下图,环路功能提示在同一个接口收到了相同的BPDU包,以及该接口是边缘端口,也收到了。
(3)display stp brief:查看接口的状态是否正确
(4)通过接口利用率查看某个接口是否占用过多的资源,华三设备通过 display counters rate inbound(outbound) interface 来查看,华为直接通过display interface brief可以看到。
(5)通过拓扑改变以及TC-BPDU次数来判断 华为设备:display stp topology-change :查看最近哪个口状态改变以及时间, display stp tc-bpdu statistic 通过该命令可以查看对应接口收以及发送TC-BPDU的情况(比如某个接口收到的次数非常多,说明对接的对方设备存在不稳定性) 华三设备:display stp tc:查看TC BPDU收发情况, display stp bpdu-statistics :可以看到各种BPDU发送的情况
(6) MAC地址漂移提醒
Sep 2 2021 10:25:22-08:00 Core L2IFPPI/4/MFLPVLANALARM:OID 1.3.6.1.4.1.2011.5.25.160.3.7 MAC move detected, VlanId = 10, MacAddress = 5489-98a3-52af, Original-Port = GE0/0/1, Flapping port = GE0/0/3. Please check the network accessed to flapping port.
MAC地址漂移,通过日志可以看到,MAC 5489-98a3-52af,原本在G0/0/1口,突然从GE0/0/3收到(漂移),如果只是个别的提示,这个问题不大,一直提示的话,就说明网络中出现了环路了(无线环境除外)
通过display mac-address flapping record可以查看记录
(7)环路后通常的现象
进入设备有明细的卡顿现象,输入命令、以及打开WEB都不流畅设备频繁有日志报错,通常是MAC地址漂移、TC、TCN等终端访问明显缓慢,丢包现象验证
设备资源占用非常高(包括CPU、链路百分比)
通过以上的现象就可以判断出下面有环路了,通常主要还是发生在下面是傻瓜交换机的场景,带管理的二层交换机由于能够支持生成树、以及单点环路功能,可控性以及预防能力会强很多。