我是靠谱客的博主 虚拟身影,最近开发中收集的这篇文章主要介绍ovs的生成树协议(STP)实验,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、相关概念

(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)实验所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部