实验四&实验五

实验四 基于RYU控制器的网络控制器程序开发与实现

RYU开启后的监听情况

在安装RYU之前,作者建议大家先在root权限下apt get update更新一下自己的apt。

更新完之后,可以输入apt get install python3-pip 来获取最新版的python3的pip,以便自己下的ryu是最新版。

在获取完最新版的ryu之后, 可以输入pip3 install ryu来下载最新版的ryu。

下载完成之后,ryu应该是存放在usr/local/lib/python3.8/dist-packages里面,如图:

具体lib后的python文件夹是要看你的python版本是多少,最新版是3.12,可能就在3.12里面,作者这里是默认Python版本的,所以会存放在3.8中。

之后我们可以点进app里面进行ryu的测试。

这里我们选择simple_switch.py进行ryu的测试。

在app里面打开控制台输入指令:ryu-manager simple_switch.py,回车运行,控制台可能会出现以下内容:

出现这种情况可能是因为自己的eventlet版本过高,建议读者重新安装自己的evenlet,命令如下:

sudo pip3 install  eventlet==0.30.2

这里作者用的清华镜像源,下载速度还是很快的。

下载完成后,我们再输入一次启动指令,发现可以了:

这时候可以打开一个新的控制台,输入netstat -an|grep 6633或者netstat -an|grep 6653来进行查看自己的ryu是否运行成功:

出现这样的内容说明成功运行了ryu的manager。

RYU和mininet的结合

如果我们想在mininet中启用ryu的控制器,我们需要在py文件中额外添加控制器并指定控制器的IP地址和端口。这里作者给出一份拓扑代码作为参考:

from mininet.topo import Topo

from mininet.net import Mininet

from mininet.cli import CLI

from mininet.node import RemoteController

class MyTopology(Topo):

    def build(self):

        # 创建交换机,同时进行交换机的协议配置,使用build()

        switch = self.addSwitch('s0', protocols='OpenFlow13')

        # 创建主机

        host1 = self.addHost('h0')

        host2 = self.addHost('h1')

        # 创建链路

        self.addLink(host1, switch)

        self.addLink(host2, switch)

topo = MyTopology()

# 指定控制器的IP地址和端口

controller_ip = '127.0.0.1'

controller_port = 6633

# 创建Mininet网络,并指定控制器和OpenFlow协议版本

net = Mininet(topo, controller=RemoteController)

net.addController('controller', controller=RemoteController, ip=controller_ip, port=controller_port,protocols='OpenFlow13')

net.start()

CLI(net)

net.stop()

在这里,我们指定交换机的openflow版本为13,同时也把控制器的openflow版本指定为一样的版本。

指定完成后,我们不能直接在控制台打开该py文件,我们需要在原来打开ryu的那个控制台上先ctrl+c退出刚才在跑的ryu,并用同样的方法启动app文件里的simple_switch_13.py文件,否则控制器可能会无法自动学习。

开启后的情况如下:

这里启动完之后,我们再去启动刚才书写的拓扑文件,会发现ryu的控制台多出了一大串东西:

然后读者可以试着在mininet的命令框中pingall并观察ryu的控制台:

Ryu的控制台情况如下:

会多出一些新的packet。

实验五 基于SDN环境的广播风暴包分析与响应

利用RYU来处理广播风暴

什么是广播风暴

广播风暴是一种网络状况,发生在一个网络设备向所有其他设备发送大量的广播或多播数据包,从而导致网络拥塞,影响到网络的正常运行。这种现象通常是由于网络配置错误、设备故障或恶意攻击引起的。如果还是不理解,作者这里举一个简单的例子。

想象你参加了一个大型的派对,人们从各个地方聚集在一起,每个人都带着自己的话题和兴趣。派对的音乐声、谈笑声、交谈声在空气中混杂,非常热闹。每个人都试图分享自己的事情,而其他人也在聆听和回应。

然而,有一位非常兴奋的人站在中央,开始高声地宣布自己的消息。这个人的声音非常吸引人,因此其他人也开始聚集过来,想要听到他在说什么。但是,当更多的人围聚在他周围,就会有更多的人试图发表自己的意见,有人喊叫,有人开始争论,声音逐渐变得混乱。

随着人们越来越多地加入,派对的气氛逐渐失控。人们的声音越来越大,甚至开始争吵。最终,整个派对陷入了混乱,没有人能够听清楚其他人在说什么,整个场景变得一片混乱。

这个比喻可以帮助人们理解交换机广播风暴。在一个计算机网络中,交换机类似于派对,各个设备就像派对上的人。当一个设备发送广播帧(类似于宣布消息)时,交换机会将这个广播帧传递给所有其他设备。然后,其他设备可能也会发出广播帧,回应或者加入讨论,就像派对上的人们加入到声音交流中。

然而,如果太多的设备同时发送广播帧,交换机可能会被不断的广播流量所淹没。就像派对变得喧嚣、混乱,网络中的数据包也可能变得混乱,影响网络性能。这种情况就好像派对上的声音变得难以理解,网络中的数据包也变得难以传输和处理。

广播风暴的代码举例

作者在这里贴出代码进行广播风暴举例:

from mininet.topo import Topo

class MyTopo(Topo):

    def __init__(self):

        # Initialize topology 以下建立的是有环的拓扑,将可以观察到网络的广播风暴(openflow包风暴)

        Topo.__init__(self)

        # Add hosts

        h1 = self.addHost('h1')

        h2 = self.addHost('h2')

        h3 = self.addHost('h3')

        # Add switches

        s1 = self.addSwitch('s1')

        s2 = self.addSwitch('s2')

        s3 = self.addSwitch('s3')

        s4 = self.addSwitch('s4')

        s5 = self.addSwitch('s5')

        # Add links

        self.addLink(h1, s1)

        self.addLink(h2, s1)

        self.addLink(h3, s5)

        self.addLink(s1, s2)

        self.addLink(s1, s3)

        self.addLink(s2, s4)

        self.addLink(s3, s4)

        self.addLink(s4, s5)

topos = {'mytopo':( lambda: MyTopo() )}

代码里采用的是mininet自带的拓扑,我们启动该拓扑的话则是利用外部命令,顺便往其中添加控制器。启动命令如下:

mn --custom=/mnt/hgfs/vmshare/topo_37_ryu_of13.py --topo=mytopo --controller=remote,ip=127.0.0.1,port=6633 --switch=ovs,protocols=OpenFlow13

为了方便我就直接在root权限下创建py文件,添加代码和启动文件了。效果如下:

启动之后我们可以同步打开ryu的py文件来进行包的观察。因为使用的是openflow13,所以我们启动的时候也选择13的文件,如simple_switch_13.py,如下:

这时候我们不用动,过一会它自己就会刷屏了,如下:

出现该情况是由于交换机之间连线过多,网络拓扑搭建出现毛病导致的广播风暴。

此时在mininet上pingall也仅会出现几台主机是能通的,如下:

h1能Ping通h2是因为在同一个交换机上,像h3就会挂掉了。而且这h1能ping通h2也是因为作者这里挂了一会时间才行的,不然也会出现ping不通的现象。

想要停止ryu的刷屏现象的话在mininet上exit退出文件就行了。

如果要让该拓扑能正常运行的话,需要先开启ryu的stp类型的py文件,如simple_switch_stp_13.py。

开启效果如下:

开启之后,再在mininet的命令框中启动刚才的拓扑:

能看到ryu的命令框显示这些内容,说明不会出现广播风暴了。

  • 27
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值