一、二层环路的简单介绍
二层环路(Layer 2 loop)是指在数据链路层(OSI模型的第二层)出现的网络环路。在网络中,环路可能会导致以下几个主要问题:
-
广播风暴(Broadcast Storm): 当一个设备发送广播帧时,如果网络中存在环路,这个广播帧会在环路中无限循环,导致广播风暴。广播风暴会消耗大量的网络带宽,影响网络性能。
-
多份拷贝的帧(Frame Duplication): 在环路网络中,同一个帧可能会在环路中循环多次,导致接收设备收到多个相同的帧。这不仅浪费带宽,还可能导致设备处理重复帧,从而影响应用程序的性能。
-
MAC地址表不稳定(MAC Address Table Instability): 由于环路导致的帧不断循环,交换机的MAC地址表会不断更新,导致MAC地址表不稳定,影响交换机的正常工作。
-
网络拥塞(Network Congestion): 环路引起的广播风暴和帧复制会占用大量的网络资源,导致网络拥塞,增加传输延迟,降低网络的整体性能。
-
服务中断(Service Outage): 严重的环路问题可能会导致网络设备过载,甚至崩溃,从而导致服务中断。
为了避免二层环路的危害,通常会在设计网络时采用一些措施,如使用生成树协议(Spanning Tree Protocol, STP)或其变体来防止环路的形成,或者在网络设计中避免物理环路的存在。生成树协议可以在交换机之间通信,选择一个根桥(Root Bridge),并确定到根桥的最佳路径,同时将不必要的冗余链路置于阻塞状态,从而避免环路的产生。
在早期的网络设计中,为了提高可靠性和容错能力,网络工程师可能会在多个交换机之间建立冗余链路,从而形成了物理或逻辑上的环路。这样的设计可以在一条路径发生故障时,通过另一条路径保证网络的连通性。
然而,如果在数据链路层(OSI模型的第二层)没有适当的机制来防止环路的形成,那么数据包就会在环路中无限循环,导致上文提到的广播风暴、帧复制等问题。这些问题会严重影响网络的性能和稳定性。
二、防止二层环路的方法
防止二层环路通常采用以下几种方法:
- 使用生成树协议(STP):这是最常用的防止二层环路的方法。STP通过算法选择一个根桥(Root Bridge),并在交换机之间选择一个路径作为转发路径,其他冗余的路径则被阻塞,从而避免环路的产生。
- 实施快速生成树协议(RSTP):作为STP的改进版,RSTP在网络拓扑发生变化时能够更快地重新计算生成树,减少了网络恢复的时间。
- 配置多生成树协议(MSTP):MSTP允许在网络中同时存在多个生成树实例,这样可以根据需要将流量分配到不同的生成树上,提高了网络的负载均衡能力和容错性。
- 进行人工干预:在网络设计阶段,可以通过合理的网络规划和设计来避免形成环路,例如通过合理布局和规划链路连接。
- 利用环路保护功能:某些设备可能支持STP的环路保护功能,这可以在链路拥塞或单向链路故障时防止生成树协议失效,从而提高网络的稳定性。
- 采用现代网络技术:随着网络技术的发展,一些新的网络技术如以太网Fabric等也可以提供环路预防机制。
- 定期维护和监控:定期对网络进行维护和监控,及时发现潜在的环路问题并进行处理。
- 使用网络管理工具:使用网络管理工具可以帮助识别和管理网络中的环路问题,例如通过监控工具检测广播风暴等异常现象。
- 遵循最佳实践:遵循行业最佳实践和标准,例如在配置交换机时正确设置STP参数,确保所有设备都按照相同的规则运行。
例如,PC1发送了一个未知的单播包,LSW2接收到后查看mac地址表发现没有找到就会进行广播出去,LSW1接收到后发现没有也进行广播,LSW3接收到也没有找到也开始广播,这样就会一直循环下去,这就是二层环路。为此stp也因此产生。
三、实验测试
在设置STP前的二层环路拓扑图:
现在的设备如华为、华三、Cisco网管交换机都会默认开启生成树,来防止环路。
要进行二层环路实验要先关闭STP。关闭STP命令是:undo stp enable
下面是一个二层环路的抓包图:
简单分析:LSW2接收到广播包或未知单播包,进行广播出去,LSW1接收到后进行广播,LSW3接收到后进行广播,一直重复。
设置STP后的拓扑图并且未手动设置主根网桥:
开启stp的命令为是:stp enable
在设置完下面的stp内容后要记得输入stp enable,也可以在设置stp前输入,否则无法成功
LSW1的命令:
<Huawei>system-view
[Huawei]undo info-center enable
[Huawei]sysname LSW1
[LSW1]STP mode stp //开启stp模式,stp的模式为stp,默认为mstp
[LSW1]display stp //查看stp的状态
LSW2的命令:
<Huawei>system-view
[Huawei]undo info-center enable
[Huawei]sysname LSW2
[LSW2]stp mode stp
LSW3的命令:
<Huawei>sys
[Huawei]undo info-center enable
[Huawei]sysname LSW3
[LSW3]stp mode stp
查看端口状态:
将LSW1设置成根网桥 LSW3设置成备用网桥
[LSW1]stp root primary //把LSW1的优先级改成0,变成主根网桥
[LSW3]stp root secondary //把LSW3的优先级改为4096,变成备用网桥
然后查看LSW2的端口状态可以发现变化
LSW2从原来的主根变成了非根
拓扑图也从原来变成了现在
开启stp的抓包拓扑图
四、总结:
二层环路的由来主要是因为:
-
设计冗余:为了提高网络的可靠性和容错能力,网络设计中可能会包含物理或逻辑上的冗余链路。
-
缺乏环路预防机制:在没有使用STP或其他环路预防协议的情况下,冗余链路会导致数据在网络中形成环路。
-
配置错误:网络管理员在配置网络设备时的错误也可能导致环路的形成。
-
协议不兼容:在使用不同厂商的网络设备时,如果它们的STP实现不兼容,也可能导致环路问题。