当前位置:首页 >> 计算机软件及应用 >>

mininet 简单的自定义拓扑


# CustomTopo.py ''' Coursera: - Software Defined Networking (SDN) course -- Module 3 Programming Assignment Professor: Nick Feamster Teaching Assistant: Muhammad Shahbaz ''' frommininet.topo import Topo from mininet.net import Mininet frommininet.node import CPULimitedHost frommininet.link import TCLink frommininet.util import irange,dumpNodeConnections from mininet.log import setLogLevel classCustomTopo(Topo): "Simple Data Center Topology" "linkopts - (1:c1, 2:aggregation, 3: edge) parameters" "fanout - number of child switch per parent switch" def __init__(self, linkopts1, linkopts2, linkopts3, fanout=2, **opts): # Initialize topology and default options Topo.__init__(self, **opts) # Add your logic here ... self.fanout = fanout core = self.addSwitch('c1') for i in irange(1, fanout): aggregation = self.addSwitch('a%s' %i) self.addLink(core, aggregation, **linkopts1) for j in irange(1, fanout): edge = self.addSwitch('e%s' %(fanout*(i-1)+j)) self.addLink(aggregation, edge, **linkopts2) for k in irange(1, fanout): host = self.addHost('h%s' %((fanout*(fanout*(i-1)+j-1))+k)) self.addLink(edge, host, **linkopts3) topos = { 'custom': ( lambda: CustomTopo() ) } defsimpleTest(): "Create and test a simple network" linkopts1 = dict(bw=10, delay='3ms', use_htb=True)

linkopts2 = dict(bw=8, delay='4ms', loss=1, max_queue_size=900, ) linkopts3 = dict(bw=6, delay='5ms', loss=1, max_queue_size=800) topo = CustomTopo(linkopts1, linkopts2, linkopts3, fanout=2) net = Mininet(topo, host=CPULimitedHost, link=TCLink) net.start() print "Dumping host connections" dumpNodeConnections(net.hosts) print "Testing network connectivity" net.pingAll() net.stop()

真实的 SDN 网络需要很多 OpenFlow 设备包括控制器、交换机、功能虚拟化等一系列设 备共同依赖来搭建并应用, 但因条件有限, 每一位实验者不可能有这样真实的环境来验证或 者实验,此文将主要介绍在没有 OpenFlow 硬件设备下模拟搭建通过 Mininet 基于不同数据 中心的网络拓扑。使用 Mininet 设计模拟不同网络数据中心拓扑,可以用来分析网络的总流 量,而且除此之外,还可以通过负载均衡策略来保证数据中心的可用性。不同数据中心网络 拓扑管理设计,主要是基于胖树(Fat-Tree)拓扑创建网络,胖树网络的好处是具有一个多 层次的树状拓扑结构固有的容错能力。 1 Mininet 实例模拟 1.1 实验目的 1. 掌握多数据中心网络拓扑的构建; 2. 掌握多数据中心数据交换过程。 1.2 实例介绍 基于树型拓扑类创建弹性的树状网络能够展现多层次的树型拓扑结构固有的容错能力。 假设每层具有不同的级别,具体分为:核心层、汇聚层、边缘层,每一层都只含有交换机。 因此,一个简单的交换机/主机层网络可以由核心交换机、汇聚交换机、边缘交换机以及主 机组成,也可以根据扇出大小来配置不同的数据中心网络拓扑。在该拓扑中,一个或多个核 心交换机构成根;汇聚交换机的一层或多层位于树的中间;终端主机连接至顶端交换机,形 成了树的叶子(边缘) 。 当拓扑创建完成后, 本实例的主要目的是实现交换机下挂主机间的连通。 实现过程如下: 主机间发送消息上报给交换机, 交换机对收到的报文信息进行分析判断, 如果交换机中存在 此消息相对应的流表,则交换机直接下发流表,将报文消息转发给目的主机;如果交换机中 没有消息相对应的流表,交换机将此发送消息给控制器,控制器根 net 据消息分析关键字段 内容,进行流表下发决策,交换机再将消息发送给目的主机,实现主机间达到通信的目的。 1.3 实例模拟拓扑 使用 Mininet 设计模拟一个多数据中心网络。 用 Mininet 模拟仿真测试, 主要是用 Mininet 中的 OpenFlow 交换机和自己提供的 POX 控制器进行测试, 帮助在真实数据中心和仿真测试 床数据中心提供有用的信息评估不同数据中心的网络性能应用性能。 一个简单的基于两个数 据中心的网络拓扑,如图所示:

图基于两个数据中心的网络拓扑 具体主要测试及验证交换机下挂主机间的连通性以及主机间通信收发数据包的速度。 Mininet 中自带的 iperf 性能测试工具可以测试不同主机间通信的性能带宽质量,在此例中, 主要是对相同边缘交换机下的主机间、 相同聚合交换机下不同边缘交换机间、 相同核心交换 机不同聚合交换机下的主机间进行测试。 1.2 实例代码 在此实验中,使用 Mininet 通过 python 自定义拓扑编写脚本创建两个数据中心的网络 拓扑,且使用已准备的 POX 控制器(IP 地址为 192.168.5.104)进行管控。 应用 Mininet 创建两个数据中心的网络拓扑设计的脚本代码如下: # FatTree.py """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. """ frommininet.topo import Topo classMyTopo( 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 fori in range( L1 ): sw = self.addSwitch( 'c{}'.format( i + 1 ) ) c.append(sw ) # add aggregation ovs fori in range( L2 ): sw = self.addSwitch( 'a{}'.format( L1 + i + 1 ) ) a.append(sw ) # add edge ovs fori in range( L3 ): sw = self.addSwitch( 'e{}'.format( L1 + L2 + i + 1 ) ) e.append(sw ) # add links between core and aggregation ovs fori 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 fori in range( 0, L2, 2 ): for sw1 in a[i:i+2]: for sw2 in e[i:i+2]: # self.addLink(sw2, sw1, bw=10, delay='5ms', loss=10, max_queue_size=1000, use_htb=True) self.addLink( sw2, sw1 ) #add hosts and its links with edge ovs count = 1 for sw1 in e: fori in range(2): host = self.addHost( 'h{}'.format( count ) ) self.addLink( sw1, host ) count += 1 topos = { 'mytopo': ( lambda: MyTopo() ) } 在代码中可以通过 L1 变量扩来改变核心交换机的数量,继而改变整个数据中心的网络 拓扑, 使之交换机数量改变后, 边缘交换机数量也会改变, 主机个数也随之改变, 应用 Mininet 的易用可扩展性,生成多个不同数据中心的网络拓扑,可以实现更好更高效率的全局统配。 拓扑创建代码完成后,可以在 Mininet 命令行操作界面通过 ping 操作和 iperf 命令进一

步验证主机间的连通性以及性能带宽分析,也可以通过编写测试脚本应用 Mininet 的操作命 令进行全自动化测试连通性及性能带宽质量,代码如下: defsimpleTest(): "Create and test a simple network" topo = MyTopo() net = Mininet( topo, controller=RemoteController, host=CPULimitedHost, link=TCLink ) net.addController( 'c0', controller=RemoteController, ip='192.168.5.104', port=6633 ) net.start() print "Dumping host connections" dumpNodeConnections(net.hosts ) print "Testing network connectivity" net.pingall() print "Testing bandwidth between h1 with h2, h3, h5" h1, h2 = net.get( 'h1', 'h2' ) net.iperf( ( h1, h2 ) ) h1, h3 = net.get( 'h1', 'h3' ) net.iperf( ( h1, h3 ) ) h1, h5 = net.get( 'h1', 'h5' ) net.iperf( ( h1, h5 ) ) net.stop() if __name__ == '__main__': # Tellmininet to print useful information setLogLevel( 'info' ) simpleTest() self.addLink( Switch1, Switch2 ) 通过测试脚本,验证所有主机的连通性测试以及各主机间的带宽性能测试。使用 iperf 指定特定两个主机进行测试并显示测试结果。 1.3 实验结果 本次实验中应用 Mininet 模拟不同数据中心的网络拓扑,如上述拓扑所示,除上面的测 试脚本外,也可以通过 Mininet 命令控制台进行手动输入命令测试验证或通过实例开发中的 测试脚本进行主机间的连通性及性能带宽进行验证,测试结果如下: 通过 Mininet 手动操作命令创建拓扑: sudomn--custom ~/mininet/custom/FatTree.py --topomytopo–controller=remote,ip=192.168.5.104,port=6633 1.同一交换机内部的主机间连通性及通信带宽测试: h1 和 h2 之间进行 ping 操作,经 验证主机间能够 ping 通。当操作 iperf h1 h2 命令时,h1 和 h2 的带宽性能测试结果为:测 试 TCP 带宽发送数据的速率为 102 Mbit/s,接收数据的速率为 102 Mbit/s。 2.相同汇聚交换机下不同机架的主机间测试: h1 和 h3 之间进行 ping 操作,经验证, 两主机间能够通信。h1 和 h3 的带宽性能测试结果为:测试 TCP 带宽发送数据的速率为 49.9 Mbit/s,接收数据的速率为 49.9 Mbit/s。 3.相同核心交换机不同汇聚交换机下的主机间测试:h1 和 h5 主机在相同汇聚同核心交 换机不同汇聚交换机下,h1 和 h5 之间进行 ping 操作,经验证,两主机间能够通信。h1 和 h5 的带宽性能测试结果为: 测试 TCP 带宽发送数据的速率为 40.1Mbit/s, 接收数据的速率为 40.1Mbit/s。

本文来源于 SDNLAB,可点击此阅读原文。如果您对本文感兴趣,可参与以下互动方式 与作者近距离交流。


相关文章:
mininet 简单的自定义拓扑.doc
mininet 简单的自定义拓扑 - # CustomTopo.py '
Mininet自定义拓扑.doc
Mininet自定义拓扑 - Mininet 自定义拓扑 1) 编辑 Python 文件: cdmininet/custom gedit test.py 2) 使用拓扑 错误:sudomnc...
Mininet命令总结.pdf
Mininet命令总结_计算机软件及应用_IT/计算机_专业...6. minimal最简单的,设置一个交换机和两个...--topo myTopo加载Python文件建立自定义拓扑。其中...
计算机网络mininet实验课设.doc
2.6 自定义拓扑结构:通过 PythonAPI 可以很简单的来定义拓扑结构。这个例子直接连接两 台交换机,每个交换机带有一台主机。(命令: sudo mn --custom ~/mininet/...
MININET部分指令以及其用法总结.doc
(例子) 运行 mininet 并创建一个简单的拓扑(1 个 switch,3 个 host); 创建...(你也可以指定自定义拓 扑本身, 或创建自定义节点和链接构造函数和/或子类)...
Mininet 模拟不同数据中心的网络拓扑.pdf
一个简单的基于两个数据中心的网络拓扑,如图 1 所示: 转载文章请注明,转载自:...4 实例代码在此实验中, 使用 Mininet 通过 python 自定义拓扑编写脚本创建两个...
1-2 RG-ONC与Mininet部署_图文.ppt
Mininet简单启动及拓扑建立 Mininet实践(一) sudo mn net links Mininet实践(二...自定义拓扑(Custom): sudo mn --custom file.py --topo mytopo 线性拓扑 ...
mininet.pdf
对节点进行单独操作如果想要对某个节点的虚拟机单独进行命令操作,也十分简单,格式...mininet提供了pythonapi,可以用来方便的自定义拓扑结构,在mininet/custom目录下...
第一届全国高校软件定义网络(SDN)应用创新开发大赛--我....doc
第 1 小题:简单网络(5 分) 说明:由于对于 SDN 架构的理解在学界和业界并...用 mininet 的 Python 接口创建自定义拓扑 mn --custom /home/ubuntu/mininet/...
13级北邮通信工程专业计网课设.doc
三.实验结果 Mininet 自定义拓扑: 简单性能测试: 1)无限制 2)限制
mininet主机连外网拓扑图.unkown
mininet主机连外网拓扑图_计算机软件及应用_IT/计算机_专业资料。网关:
计算机网络_图文.doc
建立简单网络拓扑及抓包 显示节点,命令:nodes 显示网络链接,命令:net 输出所有节点...自定义拓扑结构: 提供一个自定义的 mininet 文件,就可以创建新的拓扑结构、交换...
Mininet代码分析.pdf
Mininet代码分析_计算机软件及应用_IT/计算机_专业资料...一些用户自定义的 python 文件,比如自定义拓扑类...基于 Topo 创建一个拓扑子类,并进行简单的测试。 4...
基于miniedit的mininet可视化操作_ _ _ 软件定义网络SDN.pdf
基于miniedit的mininet可视化操作_ _ _ 软件定义网络SDN_互联网_IT/计算机_专业...下图是一个简单的网络拓扑示 例: 最新日志 热评日志 随机日志 基于miniedit的...
FlowVisor+Mininet+Oendaylight.doc
支持系统级的还原测试,支持复杂拓扑,自定义拓扑等 ? 提供 Python API, 方便多...Mininet简单webServe... 2页 1下载券 FlowVisor学习文档-菜鸟... 10...
OpenDaylight与Mininet应用实战_基本环境搭建(一).pdf
模拟 OpenFlow 设备使用 Mininet, 远比基于 KVM 的虚拟机应用更高效、更简洁,...OpenFlow 交换机以及 host 主机节点,并且能通过自定义来构造用户 想要的拓扑。虚拟...
建立Mininet之后的OVS使用.pdf
建立Mininet之后的OVS使用 - 建立Mininet之后的OVS使用 用Mininet建立拓扑网络之后,想用真实主机代替虚拟主机怎么办? 我不管用mininet本身怎么写脚本,怎么做到,我...
SDN和Openflow详解+mininet与opendaylight环境搭建与测试.doc
模拟 OpenFlow 设备使用 Mininet,远比基于 KVM 的虚拟机应用更高效、更简洁,且...OpenFlow 交换机以及 host 主机节点,并且能通过自定义来构造用户想要的 拓扑。虚...
OpenDaylight与Mininet应用实战之复杂网络验证(五).pdf
OpenDaylight 与 Mininet 应用实战之复杂网络验证(五) 1 多交换机的测试 Mininet 中本身就支持多交换机网络拓扑的模拟创建,可通过 Python API 自定义拓扑创建满 ...
sdn和openflow详细分析+mininet简介_图文.ppt
12 基于OpenFlow的简单网络模型。 13 SDN & Openflow backgound Openflow ...使用Mininet模拟出OpenFlow交换机(基于 OpenvSwitch )、host以及自定义的网络拓扑...
更多相关标签: