一、实验目的:

  • 通过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 hostsreturns: results two-element array of server and client speeds"""if not hosts:returnelse:assert len( hosts ) == 2client, server = hostsfilename = 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 = 5001server_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 = clientwhile( 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 += 1sleep(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 dumpNodeConnectionsclass MyTopo(Topo):def __init__(self):super(MyTopo,self).__init__()#Marking the number of switch for per levelL1 = 2;    L2 = L1*2L3 = L2#Starting create the switchc = []    #core switcha = []    #aggregate switche = []    #edge switch#notice: switch label is a special data structurefor i in range(L1):c_sw = self.addSwitch('c{}'.format(i+1))    #label from 1 to n,not start with 0c.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 linkfor 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 linkfor 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 hostsfor 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 中修改的路径)

SDN-Mininet模拟多数据中心带宽实验相关推荐

  1. Mininet教程(六):多数据中心带宽实验

    文章目录 Mininet教程(六):多数据中心带宽实验 拓扑结构 使能生成树协议(STP) 带宽测试 自定义命令拓展 流量随机模型下UDP带宽测试 Mininet教程(六):多数据中心带宽实验 SDN ...

  2. SDN网络控制器Floodlight安装部署和结合Mininet实现多数据中心拓扑网络

    系统前提 系统:Ubuntu 16.04 安装环境:安装JDK 1.8,安装编译打包工具ant 安装Floodlight 1.下载Floodlight 方法一: 到http://www.project ...

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

    任务目的 1.通过Mininet模拟搭建基于不同数据中心的网络拓扑: 2.掌握多数据中心网络拓扑的构建: 3.熟悉网络性能测试工具Iperf,根据实验测试SDN网络的性能: 4.通过程序生成真实网络流 ...

  4. 多数据中心的高可用结构【环状星型数据库架构】

    贴一些比较老的内容,文章是新写的,技术可能都是大家熟悉的,给入门的兄弟们参考.高手轻拍 原文请见:http://www.muduo.net/index.php/u ... space-itemid-3 ...

  5. Mininet系列实验(六):Mininet动态改变转发规则实验

    Mininet系列实验(六):Mininet动态改变转发规则实验 一. 实验目的 熟悉Mininet自定义拓扑脚本的编写: 熟悉编写POX脚本动态改变转发规则 二.实验原理 在SDN环境中,控制器可以 ...

  6. [云数据中心] 《云数据中心网络架构与技术》读书笔记 第七章 构建多数据中心网络(1/3)

    7.1 多数据中心的业务诉求场景 7.1.1 多数据中心的业务场景分析 主流需求:虚拟化和资源池化,形成多活,可就近提供服务 1. 业务跨数据中心部署 2. 两地三中心 是指在同城双活的数据中心基础上 ...

  7. SDN在云数据中心的应用——架构篇

    前言 SDN概念一直如火如荼,若是要谈到概念落地及大规模应用,一定离不开SDN在云计算数据中心的实践应用.云数据中心对网络提出了灵活.按需.动态和隔离的需求,SDN的集中控制.控制与转发分离.应用可编 ...

  8. SDN在云数据中心的架构

    前言 SDN概念一直如火如荼,若是要谈到概念落地及大规模应用,一定离不开SDN在云计算数据中心的实践应用.云数据中心对网络提出了灵活.按需.动态和隔离的需求,SDN的集中控制.控制与转发分离.应用可编 ...

  9. SDN技术在数据中心的应用前景

    编者按:每每提到SDN应用第一反应就是数据中心,可见SDN在数据中心方面的应用得到了很大认可.SDN确实可以帮助数据中心挣脱目前的困境,但是SDN技术尚未成熟,还有一系列问题亟待解决.前途是光明的,道 ...

最新文章

  1. 装配式建筑连入自动驾驶技术,未来城市的房子居然是这个样子......
  2. python霍夫变换检测直线_OpenCV-Python教程(9、使用霍夫变换检测直线)
  3. df.isnull使用细节
  4. System.Web.HttpRequestValidationException——从客户端检测到危险的Request值
  5. MarkDown语法-使用博客园的markDown编辑
  6. aix oracle监听配置_Oracel:ORA-12518:监听程序无法分发客户机连接
  7. 散点图 横纵坐标_厉害了我的Python!散点图还能这么画
  8. [转载] C#面向对象设计模式纵横谈——16 Interpreter解释器模式
  9. opengl学习笔记(三)
  10. java 二维数组动态添加,菜鸟求助: 二维数组如何实现动态接收?
  11. Autodesk 3DSMax 2018 安装注册说明
  12. .net dll反编译出现的问题,以及部分修复的方法
  13. Java并发的一些总结(面试须知)
  14. Picosmos 一键智能抠图
  15. python中dic的操作
  16. ElasticsearchBboss MySQL 同步数据到Elasticsearch
  17. 【工控协议专题01】Modbus协议原理与安全性分析
  18. RGB 颜色透明16进制表示
  19. Elasticsearch: Query string与Simple query string
  20. ImageMagick快速入门

热门文章

  1. Android 12 自动适配 exported 深入解析避坑 | 开发者说·DTalk
  2. Android12(SDK31)中exported的变化
  3. valorant皮肤怎么获得_瓦罗兰特Valorant白女票任务出来啦!免费皮肤,特工任你选!...
  4. 基于JAVA旅游网站设计计算机毕业设计源码+数据库+lw文档+系统+部署
  5. 综合任务1:定时闹铃
  6. Airbnb数据科学家: 历时6个月,我终于找到了心仪的工作
  7. Mac 允许打开任何来源应用,文件损坏等,解决办法
  8. 揭密玄学奥秘(二):同时辰出生的人命运为什么不一样?
  9. 晁岳攀---基于go的 rpc框架实践
  10. MySQL与Java+Python的JDBC操作(代码+解说)