SDN-Mininet模拟多数据中心带宽实验

2023-11-15

一、实验目的:

  • 通过Mininet模拟搭建基于不同数据中心的网络拓扑;
  • 掌握多数据中心网络拓扑的构建;
  • 熟悉网络性能测试工具lperf,根据实验测试SDN网络的性能;
  • 通过程序生成真实网络流量。

二、数据中心拓扑逻辑网络

存在线路冗余(多条链路可达),容错能力强-----胖树拓扑

三、Mininet数据中心应用价值

  • 树状拓扑结构容错能力强
  • 降低数据中心成本消耗
  • 提供重新排列的全带宽无阻碍路径
  • 提高带宽利用率
  • 分析数据中心网络流量性能
  • 为真实数据中心和仿真测试床提供有用信息
Mininet最常用的场景就是数据中心。
因为Mininet可以模拟出很复杂的网络拓扑,而不需要硬件的支持,就可以搭建出不同的数据中心的拓扑。 
可以为真正的数据中心网络的搭建起到模拟预测实验作用,为真实的数据中心的成本带来一定的节省。

四、流量模拟介绍

网络性能评估中一个巨大的挑战就是如何生成真实的网络流量,可以通过程序来创造人工的网络流量,通过建立测试环境来模拟真实的状况。此应用主要以数据中心网络为目标场景,在mininet仿真环境中尽可能地还原数据中心内部的真实流量情况。

五、流量随机模型在Mininet中的应用

  • 流量随机模型︰主机向在网络中的另一任意主机以等概率发送数据包。
  • 使用mininet中的iperf工具在网络中生成UDP流量,iperf客户端传送数据流到iperf的服务端,由服务端接收并记录相关信息。
  • 我们需要实现的是将批处理流的自定义命令添加到mininet中,在mininet中使用此自定义命令,实现上述功能。

六、Mininet自定义命令拓展实现

在mininet中进行自定义命令功能拓展主要分为4步:

  • 修改mininet/net.py  ##功能代码实现
  • 修改mininet/cli.py   ##注册命令
  • 修改bin/mn             ##加入到可执行文件中
  • 重新安装Mininet核心文件:  ~/mininet/util/install.sh -n

 

1.修改net.py

在net.py文件中添加下列代码。

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/smyyy/temp_log/' + filename + '&') 
        #/home/smyyy/temp.log/ 字段是自己系统里真实存在的文件夹,需要自己创建和修改代码 
        print "***start client***"
        client.cmd(
            iperfArgs + '-t '+ str(period) + ' -c ' + server.IP() + ' ' + bwArgs
            +' > /home/smyyy/temp_log/' + 'client' + filename +'&')


    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")

这是我添加的位置。

2.修改cli.py将 iperfmulti 命令在CLI类中注册

在cli.py文件中添加下列代码。

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]
            self.mn.iperfMulti(udpBw,float(period))
        else:
            error( 'invalid number of args: iperfMulti udpBw period\n '+
                    'udpBw examples:1M 120\n' )

这是我添加的位置。

3.在mininet/bin/mn文件中加入iperfmulti可执行命令

图示为添加位置

4.重新编译mininet —— 因为我们修改了mininet内核文件

进入mininet/util目录,重新编译安装mininet。

因为我们已经安装OpenFlow协议和openvswitch,所以不需要再加3V

5.测试修改成果

重新创建网络,输入 iperf ,用 Tab 键补全,如果可补全命令中出现 iperfmulti 命令,说明已经修改成功

七、实现网络拓扑 —— 按照结构实现,代码不唯一

from mininet.topo import Topo
from mininet.net import Mininet
from mininet.node import RemoteController
from mininet.link import TCLink
from mininet.util import dumpNodeConnections

class MyTopo(Topo):

    def __init__(self):
        super(MyTopo,self).__init__()

        #Marking the number of switch for per level
        L1 = 2;    
        L2 = L1*2
        L3 = L2

        #Starting create the switch
        c = []    #core switch
        a = []    #aggregate switch
        e = []    #edge switch

        #notice: switch label is a special data structure
        for i in range(L1):
            c_sw = self.addSwitch('c{}'.format(i+1))    #label from 1 to n,not start with 0
            c.append(c_sw)

        for i in range(L2):
            a_sw = self.addSwitch('a{}'.format(L1+i+1))
            a.append(a_sw)

        for i in range(L3):
            e_sw = self.addSwitch('e{}'.format(L1+L2+i+1))
            e.append(e_sw)

        #Starting create the link between switchs
        #first the first level and second level link
        for i in range(L1):
            c_sw = c[i]
            for j in range(L2):
                self.addLink(c_sw,a[j])

        #second the second level and third level link
        for i in range(L2):
            self.addLink(a[i],e[i])
            if not i%2:
                self.addLink(a[i],e[i+1])
            else:
                self.addLink(a[i],e[i-1])

        #Starting create the host and create link between switchs and hosts
        for i in range(L3):
            for j in range(2):
                hs = self.addHost('h{}'.format(i*2+j+1))
                self.addLink(e[i],hs)



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

测试网络拓扑脚本,文件名为 fattree.py

八、进行网络测试

1.开始Ryu —— 为了防止广播风暴,使用生成树协议 STP

ryu-manager simple_switch_stp_13.py

我使用的 simple_switch_stp_13.py ,因为simple_switch_stp.py不成功。

2.Mininet启动网络拓扑 

sudo mn --custom ./fattree.py --topo=mytopo --controller=remote,ip=127.0.0.1,port=6633

3.使用iperf命令,进行TCP带宽测试

1)在测试之前先多ping几次 <h1 ping h2> ,直到 ping 通一次,这样 pingall 就可以 ping 通了

2)同一交换机内部的主机间连通性及通信带宽测试

iperf h1 h2

3)相同汇聚交换机下不同机架的主机间测试

4)相同核心交换机不同汇聚交换机下的主机间测试

4.使用iperfmulti命令,进行UDP带宽测试

iperfmulti 0.025M

查看流量日志(路径为 net.py 中修改的路径)

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SDN-Mininet模拟多数据中心带宽实验 的相关文章

  • linux驱动模块的加载和卸载

    Linux 驱动有两种运行方式 第一种就是将驱动编译进 Linux 内核中 这样当 Linux 内核启动的时候就会自动运行驱动程序 第二种就是将驱动编译成模块 Linux 下模块扩展名为 ko 在Linux 内核启动以后使用 insmod
  • 【以太网硬件三】1000base-T和1000base-TX有什么区别?

    个人主页 highman110 作者简介 一名硬件工程师 持续学习 不断记录 保持思考 输出干货内容 从以太网的发展历程我们知道 以太网接口速率越来越高 传输距离越来越远 编码方式在不断变化发展 诞生了各种各样的以太网物理接口类型 我们先按
  • C++ 实现string字符串替换全部子串

    函数说明 对字符串中所有指定的子串进行替换 参数 string resource str 源字符串 string sub str 被替换子串 string new str 替换子串 返回值 string string subreplace
  • 记录自己激光打眼手术过程

    本人近视500度 其中300多度近视 100多度的散光 想毕业去应征入伍 所以想去做激光手术 在学校初检的医院做了激光打眼前的检查 发现角膜地形图不正常 被告知不能做 要观察半年后才能去做 我又去了JN附属医院做了检查发现还是地形图不正常
  • Ubuntu linux Androidstudio 卡死 杀死进程

    打开任务管理器 方法一 系统搜索 system monitor 如图 打开系统监视器 方法二 打开终端输入 gnome system monitor 打开系统监视器后 注意 androidstudio 对应的进程是java 在监视其中找到J

随机推荐

  • CTF—WEB基础篇

    01 HTML 文本标记语言 标题 h1 这是一个标题 h1 h2 这是一个标题 h2 h3 这是一个标题 h3 复制 段落 p 这是一个段落 p p 这是另外一个段落 p 复制 链接 a href URL 这是一个链接 a 复制 图像 i
  • 【Unity3D】XR: OpenVR Error! OpenVR failed initialization解决方案

    2019年12月2日 0次阅读 共213个字 0条评论 0人点赞 QueenDekimZ Console报错 XR OpenVR Error OpenVR failed initialization with error code VRIn
  • 游戏开发unity xlua框架知识系列:vscode 识别非.lua后缀的代码文件

    插眼 总结 setting json中进行配置 参考 https blog csdn net iway lch article details 91364825
  • 数据库查询语句遇到:Unknown column 'XXXX' in 'where clause'解决方法

    数据库查询语句遇到 Unknown column XXXX in where clause 解决方法 根本原因 可能是sql语句所用到的数据类型错误 int与String 弄错 我的情况 在网页其中的jsp页面接收html页面传来的cssn
  • vue3+vite3+vant搭建移动端简易模版

    前言 vue3 x相关的生态已经在不断的完善中 相应的UI 路由 pinia等都已成熟 新的项目也在考虑使用新版本开发了 开一个帖子记录一下搭建移动端简易模版的过程 方便以后回顾 vite前端构建工具 兼容性注意 Vite 需要 Node
  • 数据结构单向链表的C++实现

    本文的链表实现使用的是c 的类模板 构造节点类模板Node
  • 打卡格式

    2019 X xx Chen70
  • 还只看花书,西瓜书?一文告诉你如何正确学习深度学习,从理论到实战。

    如今春招已接近尾声 大家都知道今年就业形势整体不乐观 不仅应聘人数远远大于招聘岗位 而且面试难度加大 想拿到理想的offer更是难上加难 这段时间 很多人都在自我充电 我也经常在后台给读者解答很多深度学习相关问题 但大家问的更多的却是一些非
  • 如何查看文件的MD5值?

    MD5 什么是MD5 md5是一种信息摘要算法 是计算机广泛使用的杂凑算法之一 又译摘要算法 哈希算法 它可以从一个字符串或一个文件中按照一定的规则生成一个特殊的字符串 这个特殊的字符串就被称之为摘要 我理解就是从文件中摘一些信息片段加工而
  • R语言colorRampPalette函数-创建颜色梯度(渐变色)

    在绘热图时 需要将数值映射到不同的颜色上 这时就需要一系列的颜色梯度 colorRampPalette 函数支持自定义的创建一系列的颜色梯度 代码示例 gt colors lt colorRampPalette c blue red 5 g
  • windows加固-服务安全

    禁用TCP IP上的NetBIOS NETBIOS 在安装了TCP IP协议的同时 NetBIOS也会被作为默认设置安装到系统中 NetBIOS 协议所使用的端 是139端口 139 端 的开放意味硬盘可能会在网络中共享 网上黑客也可通Ne
  • 网络地址转换的类型及特点

    1 网络地址转换的类型及特点 NAT有三种类型 静态NAT StaticNAT 动态地址NAT PooledNAT 网络地址端口转换NAPT Port LevelNAT 静态NAT 指将内部网络的私有IP地址转换为公有IP地址 IP地址对是
  • On Distillation of Guided Diffusion Models

    本论文是解决什么问题的 无分类器引导扩散模型最近被证明在高分辨率图像生成方面非常有效 无分类器的引导扩散模型的缺点是 它们在推理时计算昂贵 原因是 因为它们需要评估两个扩散模型 一个类条件模型和一个无条件模型 数十到数百次 这篇论文提出的解
  • Linux Ubuntu安装教程

    1 创建新的虚拟机 2 选择 典型 点击 下一步 3 选择 稍后安装操作系统 点击 下一步 4 选择 Linux 版本选择 ubuntu 64位 点击 下一步 5 虚拟机名称输入 ubuntu 64位 点击 浏览 更改系统的安装位置 建议安
  • MySQL基础命令学习

    MySQL安装请看上一篇MySQL server安装记录 进入到数据库管理系统 DBMS C Windows System32 gt cd D mysql 8 0 22 winx64 bin D mysql 8 0 22 winx64 bi
  • Web自动化测试(5)-POM

    POM设计模式 目录 POM设计模式 1 简介 2 简单示例 3 UnitTest框架测试用例执行顺序 4 数据驱动 5 简单示例 1 简介 POM Page Object Model 设计模式又被称为页面对象模型 其核心思想是将web项目
  • 面向小白的最全Python可视化教程,超全的

    今天小编总结归纳了若干个常用的可视化图表 并且通过调用plotly matplotlib altair bokeh和seaborn等模块来分别绘制这些常用的可视化图表 最后无论是绘制可视化的代码 还是会指出来的结果都会通过调用streaml
  • Vue3全网最细介绍使用

    文章目录 一 Vue3介绍 二 Vue3项目创建 三 Setup 四 ref与reactive 五 setup context 六 计算属性 七 监听属性 八 Vue3生命周期 九 自定义hook函数 十 toRef 一 Vue3介绍 1
  • 思科命令配置总结

    Packet tracer 6 0 交换机命令配置 1 基本配置 Switch gt enable 用户模式 Switch configure terminal 特权模式 Switch config 全局模式 Switch config h
  • SDN-Mininet模拟多数据中心带宽实验

    一 实验目的 通过Mininet模拟搭建基于不同数据中心的网络拓扑 掌握多数据中心网络拓扑的构建 熟悉网络性能测试工具lperf 根据实验测试SDN网络的性能 通过程序生成真实网络流量 二 数据中心拓扑逻辑网络 存在线路冗余 多条链路可达