Mininet系列实验(五):Mininet设置带宽之简单性能测试
1.实验目的
该实验通过Mininet学习python自定义拓扑实现,可在python脚本文件中设计任意想要的拓扑,简单方便,并通过设置交换机和主机之间链路的带宽、延迟及丢包率,测试主机之间的性能。在实验过程中,可以了解以下方面的知识:
- Python脚本实现自定义拓扑
- 设置链路的带宽、延迟及丢包率
- iperf测试主机间的带宽性能
2.实验原理
进一步研究SDN架构的特性,应用创新提供可定义的网络平台,在基于OpenFlow的mininet仿真软件的基础上,实现SDN架构的仿真。基于Mininet仿真软件构造,模拟SND网络架构中的交换机以及主机,提出的仿真方法和搭建的平台可为SDN架构的研究提供有效的技术支撑。Mininet 是一个轻量级软件定义网络和测试平台;它采用轻量级的虚拟化技术使一个单一的系统看起来像一个完整的网络运行想过的内核系统和用户代码,也可简单理解为 SDN 网络系统中的一种基于进程虚拟化平台,它支持 OpenFlow、OpenvSwith 等各种协议,Mininet 也可以模拟一个完整的网络主机、链接和交换机在同一台计算机上且有助于互动开发、测试和演示,尤其是那些使用 OpenFlow 和 SDN 技术;同时也可将此进程虚拟化的平台下代码迁移到真实的环境中。
3.实验内容
实现一个单个交换机的拓扑,添加一个交换机,和N个主机到网络中。交换机和主机之间的每个链路能够设置带宽、延迟时间、以及丢包率。创建一个包含一个交换机和四个主机的网络,使用iperf测试主机之间的带宽。
拓扑图如下所示:
1.在mininet/custom下创建并编辑checkmininet.py
1 2 #!/usr/bin/python 3 4 # 调用mininet的模块 5 6 from mininet.topo import Topo 7 8 from mininet.net import Mininet 9 10 from mininet.node import CPULimitedHost 11 12 from mininet.link import TCLink 13 14 from mininet.util import dumpNodeConnections 15 16 from mininet.log import setLogLevel 17 18 # 创建一个基于Topo类的“单交换机拓扑”类 19 20 class SingleSwitchTopo(Topo): 21 22 "Single switch connected to n hosts." 23 24 # 定义构造函数(其中**opts代表的是关于网络一些选项的字典) 25 26 def __init__(self, n=2, **opts): 27 28 # 调用父类函数 29 30 Topo.__init__(self, **opts) 31 32 # 添加s1交换机 33 34 switch = self.addSwitch('s1') 35 36 for h in range(n): 37 38 #每个主机占50/n%的CPU 39 40 host = self.addHost('h%s' % (h + 1), cpu=.5/n) 41 42 #10 Mbps, 5ms 延迟, 0% 丢包, 1000 字节的大小 43 44 self.addLink(host, switch, bw=10, delay='5ms', loss=0, max_queue_size=1000, use_htb=True) 45 46 47 48 def perfTest(): 49 50 "Create network and run simple performance test" 51 52 # 创建4个主机的单交换机拓扑 53 54 topo = SingleSwitchTopo(n=4) 55 56 # 调用Mininet()的函数设置拓扑,主机,以及链路 57 58 net = Mininet(topo=topo,host=CPULimitedHost, link=TCLink) 59 60 net.start() 61 62 print "Dumping host connections" 63 64 dumpNodeConnections(net.hosts) 65 66 print "Testing network connectivity" 67 68 net.pingAll() 69 70 print "Testing bandwidth between h1 and h4" 71 72 h1, h4 = net.get('h1', 'h4') 73 74 net.iperf((h1, h4)) 75 76 net.stop() 77 78 79 80 if __name__=='__main__': 81 82 setLogLevel('info') 83 84 perfTest()
这是效果图:
总结:
1.更能看懂脚本了
2.iperf是带宽性能的测试方法