首页 > 其他分享 >1.7Mininet多数据中心网络拓扑流量带宽实验

1.7Mininet多数据中心网络拓扑流量带宽实验

时间:2023-06-08 09:14:56浏览次数:32  
标签:Mininet 数据中心 1.7 mininet 步骤 self 网络拓扑 iperf

Mininet多数据中心网络拓扑流量带宽实验

实验目的

1、掌握多数据中心网络拓扑的构建。
2、熟悉网络性能测试工具Iperf,根据实验测试SDN网络的性能。

实验环境

Mininet多数据中心网络拓扑流量带宽实验的拓扑如下图所示。
image-20230524144039707

设备名称 软件环境 硬件环境
主机 Ubuntu 14.04桌面版 Mininet 2.2.0 CPU:1核 内存:2G 磁盘:20G
控制器 Ubuntu 14.04桌面版 OpenDaylight碳版本 CPU:4核 内存:8G 磁盘:20G

注:系统默认的账户为:
管理员权限用户名:root,密码:root@openlab;
普通用户用户名:openlab,密码:user@openlab。
可查看当前实验环境右侧“钥匙” 按钮获取对应的密码。

任务内容

1、通过Mininet模拟搭建基于不同数据中心的网络拓扑。
2、通过程序生成真实网络流量。

实验原理

使用mininet中的iperf工具在网络中生成UDP流量,iperf客户端传送数据流到iperf的服务端,由服务端接收并记录相关信息。网络性能评估中一个巨大的挑战就是如何生成真实的网络流量,可以通过程序来创造人工的网络流量,通过建立测试环境来模拟真实的状况。此应用主要以数据中心网络为目标场景,在mininet仿真环境中尽可能地还原数据中心内部的真实流量情况。
Mininet数据中心应用价值:

  • 树状拓扑结构容错能力强
  • 降低数据中心成本消耗
  • 提供重新排列的全带宽无阻碍路径
  • 提高带宽利用率
  • 分析数据中心网络流量性能
  • 为真实数据中心和仿真测试床提供有用信息
    在mininet中进行自定义命令iperfmulti功能拓展主要分为4步:
    1.修改mininet/net.py
    2.修改mininet/cli.py
    3.修改bin/mn
    4.重新安装Mininet核心文件:~/mininet/util/install.sh -n
操作步骤

一、编写网络带宽测试程序

步骤1

登录Mininet所在虚机主机,打开命令行执行终端。

步骤2

执行sudo mkdir -p /home/sdnlab/log命令添加目录/home/sdnlab/log。

步骤3

执行命令sudo vi openlab/mininet/mininet/net.py打开net.py文件。

步骤4

在Mininet类中添加定义iperf_single()函数,实现在两个主机间进行iperf udp测试,并且在server端记录,具体代码如下,建议将代码放置在“def iperf”下。

       def iperf_single( self,hosts=None, udpBw='10M', period=60, port=5001):
                """Run iperf between two hosts using UDP.
                   hosts: list of hosts; if None, uses opposite hosts
                   returns: results two-element array of server and client speeds"""
                if not hosts:
                    return
                else:
                    assert len( hosts ) == 2
                client, server = hosts
                filename = client.name[1:] + '.out'
                output( '*** Iperf: testing bandwidth between ' )
                output( "%s and %s\n" % ( client.name, server.name ) )
                iperfArgs = 'iperf -u '
                bwArgs = '-b ' + udpBw + ' '
                print "***start server***"
                server.cmd( iperfArgs + '-s -i 1' + ' > /home/sdnlab/log/' + filename + '&')
                print "***start client***"
                client.cmd(
                    iperfArgs + '-t '+ str(period) + ' -c ' + server.IP() + ' ' + bwArgs
                    +' > /home/sdnlab/log/' + 'client' + filename +'&')

image-20230524145419820
说明:为方便用户实验,该段代码在/home/ftp/iperf_single.txt文件中已预置。

步骤5

在Mininet类中添加自定义命令iperfmulti()函数,iperfmulti函数主要是实现依次为每一台主机随机选择另一台主机作为iperf的服务器端,通过调用iperf_single,自身以客户端身份按照指定参数发送UDP流,服务器生成的报告以重定向的方式输出到文件中,使用iperfmulti命令,主机随机地向另一台主机发起一条恒定带宽的UDP数据流。具体代码如下所示,建议将代码放置在“def iperf_single”下。

 def iperfMulti(self, bw, period=60):
        base_port = 5001
        server_list = []
        client_list = [h for h in self.hosts]
        host_list = []
        host_list = [h for h in self.hosts]

        cli_outs = []
        ser_outs = []

        _len = len(host_list)
        for i in xrange(0, _len):
            client = host_list[i]
            server = client
            while( server == client ):
                server = random.choice(host_list)
            server_list.append(server)
            self.iperf_single(hosts = [client, server], udpBw=bw, period= period, port=base_port)
            sleep(.05)
            base_port += 1

        sleep(period)
        print "test has done"

image-20230524150240399
说明:为方便用户实验,该段代码在/home/ftp/iperfmulti.txt文件中已预置。

步骤6

执行如下命令,打开cli.py文件。
$ sudo vi openlab/mininet/mininet/cli.py

步骤7

在cli.py中添加如下代码,注册iperfmulti命令。

def do_iperfmulti( self, line ):
        """Multi iperf UDP test between nodes"""
        args = line.split()
        if len(args) == 1:
            udpBw = args[ 0 ]
            self.mn.iperfMulti(udpBw)
        elif len(args) == 2:
            udpBw = args[ 0 ]
            period = args[ 1 ]
            err = False
            self.mn.iperfMulti(udpBw, float(period))
        else:
            error('invalid number of args: iperfmulti udpBw period\n' +
                   'udpBw examples: 1M 120\n')

image-20230524150318845
说明:为方便用户实验,该段代码在/home/ftp/do_iperfmulti.txt文件中已预置。

步骤8

执行命令sudo vi openlab/mininet/bin/mn打开mn文件,在mn中加入iperfmulti可执行命令,如下所示。
image-20230524150348985

步骤9

执行如下命令,重新编译Mininet。

$ cd openlab/mininet/util
$./install.sh -n

image-20230524150451952

步骤10

执行sudo mn命令创建一个topo,查看是否存在iperfmulti命令,以此验证iperfmulti是否成功。
image-20230524150543724

步骤11

执行exit命令退出Mininet。

二、构建多数据中心网络拓扑

步骤1

执行如下命令,创建多数据中心拓扑创建脚本。

$ cd /home/openlab/openlab/mininet/custom
$ sudo vi fattree.py

步骤2

添加如下内容,通过python脚本自定义拓扑,创建包含两个数据中心的网络拓扑。

#!/usr/bin/python
"""Custom topology example
Adding the 'topos' dict with a key/value pair to generate our newly defined
topology enables one to pass in '--topo=mytopo' from the command line.
"""
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import RemoteController,CPULimitedHost
from mininet.link import TCLink
from mininet.util import dumpNodeConnections

class MyTopo( Topo ):
    "Simple topology example."

    def __init__( self ):
        "Create custom topo."

        # Initialize topology
        Topo.__init__( self )
        L1 = 2
        L2 = L1 * 2 
        L3 = L2
        c = []
        a = []
        e = []

        # add core ovs  
        for i in range( L1 ):
                sw = self.addSwitch( 'c{}'.format( i + 1 ) )
                c.append( sw )

        # add aggregation ovs
        for i in range( L2 ):
                sw = self.addSwitch( 'a{}'.format( L1 + i + 1 ) )
                a.append( sw )

        # add edge ovs
        for i in range( L3 ):
                sw = self.addSwitch( 'e{}'.format( L1 + L2 + i + 1 ) )
                e.append( sw )

        # add links between core and aggregation ovs
        for i in range( L1 ):
                sw1 = c[i]
                for sw2 in a[i/2::L1/2]:
                # self.addLink(sw2, sw1, bw=10, delay='5ms', loss=10, max_queue_size=1000, use_htb=True)
                        self.addLink( sw2, sw1 )

        # add links between aggregation and edge ovs
        for i in range( 0, L2, 2 ):
                for sw1 in a[i:i+2]:
                    for sw2 in e[i:i+2]:
                        self.addLink( sw2, sw1 )

        #add hosts and its links with edge ovs
        count = 1
        for sw1 in e:
                for i in range(2):
                    host = self.addHost( 'h{}'.format( count ) )
                    self.addLink( sw1, host )
                    count += 1
topos = { 'mytopo': ( lambda: MyTopo() ) }

Mininet创建网络拓扑的代码中,可以通过改变代码中定义的L1变量来设置核心交换机的数量,并通过添加额外的交换机和链路来构成更复杂的数据中心网络拓扑。随着边缘交换机的增加,主机个数也随之增长,利用Mininet的易用性和扩展性,可以创建基于多种数据中心场景下的网络拓扑,达到更好更全面的实验效果。
说明:为方便用户实验,该段代码在/home/ftp/fattree.py文件中已预置。

步骤3

登录控制器主机,打开命令行执行终端,执行ifconfig命令查看主机的IP地址。
image-20230524150801989
说明:本实验中主机的IP地址为30.0.1.69,具体实验根据实际情况为准。

步骤4

切换到Mininet主机,执行如下命令,启动Mininet,生成测试拓扑结构。
# sudo mn --custom fattree.py --topo mytopo --controller=remote,ip=30.0.1.69,port=6653
image-20230524150837969

步骤5

执行pingall命令,验证主机间的连通性。
image-20230524150859255

步骤6

登录控制器,打开浏览器,输入URL地址:http://30.0.1.69:8181/index.html 查看ODL控制器Web页面拓扑,用户名密码分别为admin/admin,结果如下所示。
image-20230524150922612

三、测试TCP网络带宽

步骤1

切换到Mininet主机,执行命令iperf h1 h2在h1和h2之间进行iperf操作,测试同一交换机内部的主机间连通性及通信带宽。
image-20230524150937669

步骤2

执行命令iperf h1 h3在h1和h3之间进行iperf操作,测试相同汇聚交换机下不同机架的主机间连通性及通信带宽。
image-20230524150953108

步骤3

执行命令iperf h1 h5在h1和h5之间进行iperf操作,测试相同核心交换机不同汇聚交换机下的主机间连通性及通信带宽。
image-20230524151013872

步骤4

执行命令iperfmulti 0.025M设置带宽参数为0.025M,将能看到8台主机随机地向另外一台主机发送数据包。
image-20230524151054083

步骤5

打开新的命令行执行窗口,执行如下命令查看数据记录,如下所示。

$ cd /home/sdnlab/log
$ ll

image-20230524151253323

步骤6

执行命令sudo vi 1.out打开服务端数据记录,如下所示。
image-20230524151319198

步骤7

执行命令sudo vi client1.out打开客户端数据记录,如下所示。

image-20230524151354862

标签:Mininet,数据中心,1.7,mininet,步骤,self,网络拓扑,iperf
From: https://www.cnblogs.com/ChuenSan/p/17465157.html

相关文章

  • 1.6Mininet流表应用实战2——控制器下发流表协议分析
    Mininet流表应用实战2——控制器下发流表协议分析实验目的1、理解OpenFlow交换机和控制器间的工作原理。2、学会使用Wireshark抓包分析,熟悉了解OpenFlow协议。。实验环境Mininet流表应用实战2——控制器下发流表协议分析实验的拓扑如下图所示。实验环境信息如下表所示。......
  • Mininet基本命令
    Mininet基本命令:1.检查Mininet版本mn--version2.清理现有的ovs网桥和命名空间注意:有时我们错误地关闭了mininetshell,或者mininet崩溃了。但拓扑组件将继续存在。要清理这些东西,请使用清理命令。mn-c3.我们的第一个拓扑(单一)具有单个交换机和4个节点的拓扑。......
  • 怎么安装mininet
    怎么安装mininet本次安装环境为ubuntu20.04mininet为github上的最新版git源代码打开Ubuntu中的Terminal(这一步由于网络环境可能会下载失败,这时候可以更换github域名为国内镜像源域名)gitclonegit://github.com/mininet/mininet例如kgithub.com这一镜像源就可以这样输入g......
  • Taurus.mvc .Net Core 微服务开源框架发布V3.1.7:让分布式应用更高效。
    前言:自首个带微服务版本的框架发布:Taurus.MVCV3.0.3微服务开源框架发布:让.NET架构在大并发的演进过程更简单已经过去快1年了,在这近一年的时间里,版本经历了N个版本的迭代。如今,是时候写文章介绍一下了:以下介绍中,仅以.NetCore6为示例代码。框架支持在.NetFramework2.0+......
  • Spring3.2 + cxf1.7.3整合
    参考:[url]http://tsinglongwu.iteye.com/blog/832704[/url][color=red][b]测试调试工具介绍[/b][/color][b]1.SoapUI1.6[/b][url]http://webservices.ctocio.com.cn/tips/263/7817763.shtml[/url][b]2.TestMaker[/b][url]http://webservices.ctocio.com......
  • 最完美WIN10_Pro_22H2.19045.3031软件选装纯净版VIP41.7
    【系统简介】=============================================================1.本次更新母盘来自网络某大神。进一步精简优化调整。2.只为呈现最好的作品,手工精简优化部分较多。3.OS版本号为19045.3031。个别要求高的就下MSDN吧,里面啥功能都有。4.集成《DrvCeo-2.13.0.8》网卡版、......
  • Mininet拓扑构建与命令使用
    实验目的1、通过命令模拟创建SDN网络。2、深入了解Mininet的命令使用。3、学会使用网络构建启动参数、内部交互命令及外部运行参数。实验环境Mininet拓扑构建与命令使用实验拓扑如下图所示。设备名称软件环境硬件环境主机Mininet_2.2.0_desktop_cv1.1CPU:1核内......
  • Visual Studio1.76.0Mac软件安装包下载VS软件安装教程
    [名称]:VisualStudio1.76.0Mac[大小]:2M[语言]:简体中文 [适用系统]:macOS系统[简介]:VisualStudio是微软推出的一款C++编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序,VS是一个非常完整的开发工具集,包括了所有软件生命周期中所需的大部分工具,如UML工具、代码管控工具、集成开......
  • macOS Big Sur 11.7.7 (20G1345) 正式版 ISO、PKG、DMG、IPSW 下载
    本站下载的macOS软件包,既可以拖拽到Applications(应用程序)下直接安装,也可以制作启动U盘安装,或者在虚拟机中启动安装。另外也支持在Windows和Linux中创建可引导介质。2023年5月18日(北京时间19日凌晨),Apple为那些无法更新macOSVentura的旧Mac发布了macOSBig......
  • MC我的世界模拟城市模拟大都市1.7.10-1.9模组下载
    title:模拟城市下载date:2019-12-2514:27:01permalink:/download/1sidebar:falsearticle:falseauthor:name:trhsylink:https://github.com/trhsy1.7.10下载免费链接自取1.7.10模拟城市整合包curseforge下载(打不开请用梯子):点这里下载不会的看这里视频教......