概述
一、相关概念
(1) 概述
为了提高网络可靠性,交换机网络中通常会使用冗余链路,冗余链路会给交换机带来环路风险,并导致广播风暴以及MAC地址表不稳定等问题,生成树协议STP(Spanning Tree Protocol)可以在提高可靠性的同时又避免环路带来的各种问题。
随着局域网规模的不断扩大,越来越多的交换机被用来实现主机之间的互连。如果交换机之间仅使用一条链路互连,则可能会出现单点故障,导致业务中断。为了解决此类问题,交换机在互连时一般都会使用冗余链路来实现备份。 冗余链路虽然增强了网络的可靠性,但是也会产生环路,而环路会带来一系列的问题,继而导致通信质量下降和通信业务中断等问题。
(2) 广播风暴
根据交换机的转发原则,如果交换机从一个端口上接收到的是一个广播帧,或者是一个目的MAC地址未知的单播帧,则会将这个帧向除源端口之外的所有其他端口转发。如果交换网络中有环路,则这个帧会被无限转发,此时便会形成广播风暴,网络中也会充斥着重复的数据帧。 如下图中,主机A向外发送了一个单播帧,假设此单播帧的目的MAC地址在网络中所有交换机的MAC地址表中都暂时不存在。SWB接收到此帧后,将其转发到SWA和SWC,SWA和SWC也会将此帧转发到除了接收此帧的其他所有端口,结果此帧又会被再次转发给SWB,这种循环会一直持续,于是便产生了广播风暴。交换机性能会因此急速下降,并会导致业务中断。
(3) MAC地址表震荡
交换机是根据所接收到的数据帧的源地址和接收端口生成MAC地址表项的。 主机A向外发送一个单播帧,假设此单播帧的目的MAC地址在网络中所有交换机的MAC地址表中都暂时不存在。SWB收到此数据帧之后,在MAC地址表中生成一个MAC地址表项,00-01-02-03-04-AA,对应端口为G0/0/3,并将其从G0/0/1和G0/0/2端口转发。此例仅以SWB从G0/0/1端口转发此帧为例进行说明。 SWA接收到此帧后,由于MAC地址表中没有对应此帧目的MAC地址的表项,所以SWA会将此帧从G0/0/2转发出去。 SWC接收到此帧后,由于MAC地址表中也没有对应此帧目的MAC地址的表项,所以SWC会将此帧从G0/0/2端口发送回SWB,也会发给主机B。 SWB从G0/0/2接口接收到此数据帧之后,会在MAC地址表中删除原有的相关表项,生成一个新的表项,00-01-02-03-04-AA,对应端口为G0/0/2。此过程会不断重复,从而导致MAC地址表震荡。
(4) STP介绍
具体的介绍,可以参考下列文章,这里不再过多介绍
https://blog.csdn.net/qq_38265137/article/details/80404349
https://blog.csdn.net/network_com/article/details/106038052
二、利用ovs进行STP实验
(1) 实验拓扑
本次实验是利用ovs进行STP的验证,所以利用mininet构建的实验拓扑如下,三个交换机形成一个环路。
拓扑的各项设置如下
(2) STP设置
对于本次实验的网络拓扑而言,若是不开启STP,网络中会产生广播风暴和mac表震荡,可以利用tcpdump抓包查看会有大量的数据包,关于没有设置STP的实验,这里不再赘述。
下面主要介绍ovs如何开启STP服务进行广播风暴的抑制。
ovs关于STP的命令如下
# 开启交换机br-int的STP
ovs-vsctl set bridge br-int stp_enable=true
# 查看交换机是否正确的开启了STP协议
ovs-vsctl get bridge br-int stp_enable
# 查看mac表
ovs-appctl fdb/show br-int
# 查看端口配置
ovs-vsctl list port br-int brint-eth1
# 查看网桥配置
ovs-vsctl list bridge br-int
针对本次实验,接下来分别开启s1-s3的STP协议,命令如下:
ovs-vsctl set bridge s1 stp_enable=true
ovs-vsctl set bridge s2 stp_enable=true
ovs-vsctl set bridge s3 stp_enable=true
接下来,在终端命令行中输入命令h1 ping h2,然后分别用tcpdump监听s2和s3的端口,结果如下,会发现,h1可以正常ping通h3,通过抓包发现,icmp数据报经过s2向h3发送过去,并未发生广播风暴。
接下来,为了验证冗余链路的作用,也就是当根桥发生故障时,网络会不会重新的选择新的链路发送数据,将s1-s2之间的链路断开,如下图所示。
此时,再在终端命令行中输入命令h1 ping h3,如果在断开s1-s2之间的链路之后,立即进行h1 ping h3,发现不会ping通,原因如下:
在STP协议中包含一些重要的时间参数,如Hello Time是指运行STP协议的设备发送配置BPDU的时间间隔,用于检测链路是否存在故障。交换机每隔Hello Time时间会向周围的交换机发送配置BPDU报文,以确认链路是否存在故障。由于断开ls1-s2的链接,所以非根桥便收不到了BPDU数据包,等待Max Age定时器超时后,就会重新选择新的链路,针对STP故障的恢复时间如下:
STP故障:
1、根桥故障:非根桥会在BPDU老化之后,开始根桥的重新选举,根桥故障会导致50秒左右的恢复时间,恢复时间约等于Max Age加上两倍的Forward Delay收敛时间。
2、直连链路故障:交换机检测到直连链路故障后,会将预备端口转换为根端口。预备端口会在30s后恢复到转发状态。
3、间接链路故障:间接链路故障进入到转发状态需要50s(MAX age + Forwarding delay * 2)。
4、拓扑改变导致MAC地址表错误:MAC地址默认老化时间为300s,这段时间内无法转发数据。
所以,当s1-s2之间的链路断开之后,输入命令h1 ping h3,结果如下,可以发现大概过了50s之后,恢复了通信连接。
以上便是利用ovs进行简单的STP实验,各位还可以利用抓包工具wireshark仔细分析STP协议的内容,这里本实验不再进行,如有指正,请留言或私聊,谢谢。
最后
以上就是虚拟身影为你收集整理的ovs的生成树协议(STP)实验的全部内容,希望文章能够帮你解决ovs的生成树协议(STP)实验所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复