大家好,我是老杨。
我相信,任何一个网工都遇到过网络环路,遇到这个情况,你的应对方法是什么?
我了解到大部分的初阶网工,最开始都只能用拔插网线和重启观测法来排除回路。
简单来说,就是先给交换机断电然后再接上电源,认真观察每个端口的亮灯情况。
这个方法,你需要注意的是,一定要观察到第一个开始快速闪烁的端口,那个端口就是有环路的端口,如果没有看清楚,重新断电后再进行观察,直到找到环路端口。
这种方法经验显得尤为重要,且定位的一般都是二层环路,三层环路的问题是很难解决的,费时费力,效率不高。
网络环路问题对企业网络存在很大的威胁,它会造成网络里的广播风暴,耗尽交换资源,造成交换机瘫痪,最终导致的就是直接的经济损失。
今天我们就来聊聊,有什么高效的办法,能一键搞定环路问题。
今日文章阅读福利:《 交换机在江湖 (高清pdf)》
作为华为官方持续连载中的电子期刊,它能提供大量真实、详细的配置案例,以及丰富的维护经验和秘笈。
私信老杨,发送暗号“江湖”,即可获取该份网工交换机秘籍。
01 到底什么是网络环路?
网络环路一般分为四种,分别是物理环路、网络自环、逻辑环路和下游设备自环。
物理环路就是指,如果2台或以上的交换机用网线连接对方,那就形成了一个物理环路。
设备自环是指,比如交换机的两个端口,用一个网线连接,就形成了一个自环,这种自环spanning tree也可以破环。
逻辑环路呢,可以用一段话来描述:
A路由器想发流量给C,A的路由表显示,B可以到达C,A把流量发给B,B接收到流量,查询自己的路由表,发现到C的最优路径是A,于是把流量又发给A……
就这样你来我往,反反复复,直到TTL=0才丢弃罢休,这个就是逻辑环,虽然A与B之间只有一个物理线路,但是由于路由协议的问题,发生了环路。
总而言之,交换机因为其flooding转发机制,无法容忍任何环路的存在,所以需要借助spanning tree来进行防环路保护机制,spanning tree无法防由于网线、网卡故障,所以才会造成环路。
02 为什么要配置环路检测?
网络连接错误或配置错误,都容易导致二层网络中出现转发环路,使网络设备对广播、组播报文进行重复发送,这样就会造成网络资源和设备硬件资源的严重浪费,将会造成设备卡顿运维缓慢甚至导致网络瘫痪。
为了能够及时发现二层网络中的环路,避免对整个网络造成严重影响,需要提供一种检测机制,使网络中出现环路时能及时通知用户检查网络连接和配置情况,这种机制就是环路检测机制。
当网络中出现环路时,环路检测机制通过生成日志信息来通知用户,并可根据用户事先的配置来选择是否关闭出现环路的端口。
设备通过发送环路检测报文,并检测其是否返回本设备以确认是否存在环路,若某端口收到了本设备发出的环路检测报文,就认定该端口所在链路存在环路。
一般,不要求收端口和发端口为同一端口。
总而言之,二层环路较易产生,需要运行破环机制经过计算阻塞某些端口实现预防,且由于二层设备的处理行为导致了后果特别严重。
三层环路不容易产生,由于三层设备的处理行为及 TTL 机制,所以后果并不十分严重。
且每种路由协议都有比较完善的防环机制,三层环路比较容易发生在特殊的场景下,如双点双向路由发布。
03 当网络设备检测到有环路怎么处理?
因为网络时刻都在变化中的,所以环路检测是一个持续进行的过程。
它以一定的时间间隔发送环路检测报文,来确定各端口是否有环路以及存在环路的端口上是否已消除环路等,这个时间间隔就称为环路检测的时间间隔。
当系统检测到端口出现环路时的处理方式,有以下几种方式:
1. Block模式
当系统检测到端口出现环路时,不仅会生成日志信息,还会禁止端口学习MAC地址并将端口阻塞掉(我们知道端口不能学习MAC地址也就是这个端口无法使用了)
2. No-learning模式
当系统检测到端口出现环路时,不仅会生成日志信息,还会禁止端口学习MAC地址
3. Shutdown模式
当系统检测到端口出现环路时,不仅会生成日志信息外,还会自动关闭该端口,使其不能收发任何报文被关闭的端口将在shutdown-interval命令所配置的时间之后自动恢复。
默认情况下系统不采用上述任何一种模式(需要配置),当系统检测到端口出现环路时,只生成日志信息,不对该端口进行任何处理。
要注意的点,我也给你整理出来了:
1. 在Block模式和No-learning模式下
当设备检测到某端口出现环路后,若在三倍的环路检测时间间隔内没有再收到环路检测报文,就会认为这个端口上的环路已经消除了,会自动将该端口恢复为正常状态,并通知给用户。
2. 在Shutdown模式下
出现环路的端口直接被系统关闭,然后在shutdown-interval命令所配置的时间之后自动恢复正常。如果此时环路尚未消除,还是能接收到环路检测报文,这个端口将再次关闭,然后恢复……如此往复直至环路消除
04 环路检测功能开启及配置(以H3C为例)
system-view[H3C]loopback-detection enable
注:全局开启环路检测功能(默认是关闭的)
system-view[H3C]interface GigabitEthernet 1/0/1 #进入需要开启环路检测的端口
[H3C-GigabitEthernet1/0/1]loopback-detection enable #开启端口环路检测功能
system-view[H3C]loopback-detection interval-time 60 #配置环路检测报文的发送间隔(5-300秒)
注:间隔时间越长消耗的系统性能越就越少,间隔时间越短环路检测的灵敏度越高,是系统资源消耗也高,所以一般都不更改(默认30秒)
system-view[H3C]interface GigabitEthernet 1/0/1 #进入需要开启环路检测的端口
[H3C-GigabitEthernet1/0/1]loopback-detection action ? #no-learning No-learning modesemi-block Semi-block modeshutdown Shutdown mode[H3C-GigabitEthernet1/0/1]
注:在端口上配置端口环路处理模式(根据设备类型不同有稍微差别)
配置完环路检测的配置后,我们可以使用以下命令查看设备是否存在环路:
display loopback-detection
以上就是环路检测的内容及配置,原理比较简单,配置更简单,就几条命令。环路在网络实际环境中,尤其是规模比较大、比较复杂的网络中是很容易出现的,所以环路检测最好是配置上,一般都会直接配置发现环路直接shutdown端口。
当你发现同一个lan中的多用户网络很卡,甚至是时断时续,你就要注意了,很可能是有端口环路产生。
当你远程设备远程不上,但是设备在线时,或者通过console口登录设备,发现设备很卡,那么我们也要注意了,是不是有端口环路。
整理:老杨丨10年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部