该实验通过Mininet学习python自定义拓扑实现,可在python脚本文件中设计任意想要的拓扑,简单方便,并通过设置交换机和主机之间链路的带宽、延迟及丢包率,测试主机之间的性能。在实验过程中,可以了解以下方面的知识:
Python脚本实现自定义拓扑;
设置链路的带宽、延迟及丢包率;
iperf测试主机间的带宽性能。
进一步研究SDN架构的特性,应用创新提供可定义的网络平台,在基于OpenFlow的mininet仿真软件的基础上,实现SDN架构的仿真。基于Mininet仿真软件构造,模拟SND网络架构中的交换机以及主机,提出的仿真方法和搭建的平台可为SDN架构的研究提供有效的技术支撑。Mininet 是一个轻量级软件定义网络和测试平台;它采用轻量级的虚拟化技术使一个单一的系统看起来像一个完整的网络运行想过的内核系统和用户代码,也可简单理解为 SDN 网络系统中的一种基于进程虚拟化平台,它支持 OpenFlow、OpenvSwith 等各种协议,Mininet 也可以模拟一个完整的网络主机、链接和交换机在同一台计算机上且有助于互动开发、测试和演示,尤其是那些使用 OpenFlow 和 SDN 技术;同时也可将此进程虚拟化的平台下代码迁移到真实的环境中。
实现一个单个交换机的拓扑,添加一个交换机,和N个主机到网络中。交换机和主机之间的每个链路能够设置带宽、延迟时间、以及丢包率。创建一个包含一个交换机和四个主机的网络,使用iperf测试主机之间的带宽。
拓扑图如下所示:
需要两台虚拟机,分别安装OpenDaylight(省略了)和Mininet。
1 进入mininet/custom目录下,通过vi mymininet1.py创建脚本并添加内容。本实验通过python脚本自定义拓扑,创建包含一个交换机、四个主机的网络拓扑:
#!/usr/bin/python from mininet.topo import Topo from mininet.net import Mininet from mininet.node import CPULimitedHost from mininet.link import TCLink from mininet.util import dumpNodeConnections from mininet.log import setLogLevel class SingleSwitchTopo(Topo): "Single switch connected to n hosts." def __init__(self, n=2, **opts): Topo.__init__(self, **opts) switch = self.addSwitch('s1') for h in range(n): #Each host gets 50%/n of system CPU host = self.addHost('h%s' % (h + 1), cpu=.5/n) #10 Mbps, 5ms delay, 0% Loss, 1000 packet queue self.addLink(host, switch, bw=10, delay='5ms', loss=0, max_queue_size=1000, use_htb=True) def perfTest(): "Create network and run simple performance test" topo = SingleSwitchTopo(n=4) net = Mininet(topo=topo,host=CPULimitedHost, link=TCLink) net.start() print "Dumping host connections" dumpNodeConnections(net.hosts) print "Testing network connectivity" net.pingAll() print "Testing bandwidth between h1 and h4" h1, h4 = net.get('h1', 'h4') net.iperf((h1, h4)) net.stop() if __name__=='__main__': setLogLevel('info') perfTest()
执行此脚本命令:python mymininet.py,或者使用chmod +x mymininet.py添加文件执行属性,启动Mininet,生成测试拓扑结构。
2 给mymininet.py python脚本赋执行权限:
chmod +x mymininet.py
3 执行mymininet.py脚本如下:
通过python脚本创建Mininet脚本,对设备链路间的带宽、延迟、丢包率等(如:bw=10, delay='5ms', loss=0, max_queue_size=1000, use_htb=True)进行设置,对设备有一个限制作用,且通过iperf来进行测试主机间的性能。