真正的SDN网络需要大量的OpenFlow设备包括控制器、交换机、功能虚拟化等一系列设备来搭建和应用,但由于条件所限,不可能每一个experimenter有一个真实的环境来验证或实验。利用Mininet设计模拟不同的网络数据中心拓扑结构,可以用来分析网络的总流量,另外还可以通过负载均衡策略来保证数据中心的可用性。不同数据中心的网络拓扑管理设计主要基于Fat-Tree拓扑来创建网络。Fat-Tree网络的优点是它具有多级树形拓扑固有的容错能力。使用Mininet设计和模拟多数据中心网络。使用Mininet进行模拟测试,主要使用Mininet中的OpenFlow交换机和自己提供的ODL控制器进行测试。一个简单的基于两个数据中心的网络拓扑结构,如图所示:主要测试和验证连接到交换机的主机之间的连通性以及主机之间收发数据包的速度。Mininet中内置的iperf性能测试工具,可以测试不同主机之间通信的性能和带宽质量。本例主要针对同一边缘交换机下的主机、同一汇聚交换机下的不同边缘交换机之间、同一核心交换机的不同聚合。交换机下主机间测试。本实验使用Mininet通过python自定义拓扑脚本创建两个数据中心的网络拓扑,并使用准备好的POX控制器(IP地址192.168.28.131)进行控制。使用Mininet创建两个数据中心网络拓扑设计的脚本代码如下:拓扑创建代码完成后,可以通过Mininet命令上的ping操作和iperf命令进一步验证主机之间的连通性和性能带宽分析线接口,或者通过编写测试脚本,应用Mininet的运行命令,实现连通性和性能带宽质量的全自动化测试。代码如下:#FatTree.py"""CustomtopologyexampleAddingthe'topos'dictwithakey/valuepairtogenerateournewlydefinedtopologyenablesonetopassin'--topo=mytopo'fromthecommandline."""frommininet.topoimportTopoclassMyTopo(Topo):"Simpletopologyexample."def__init__(self):"createcustomtopo."#initializatologyTopo.__init__(self)L1=2L2=L1*2L3=L2cSwitch=[]aSwitch=[]eSwitch=[]#addcoreovsforiinrange(L1)复制代码:sw=self.addSwitch('c{}'.format(i+1))cSwitch.append(sw)#addaggregationovsforiinrange(L2):sw=self.addSwitch('a{}'.format(L1+i+1))aSwitch.append(sw)#addedgeovsforinrange(L2):sw=self.addSwitch('e{}'.format(L1+L2+i+1))eSwitch.append(sw)#addlinksbetweencoreaggregationovsforiinrange(L1):forjinrange(L2):#self.addLink(sw2,sw1,bw=10,delay='5ms',loss=10,max_queue_size=1000,use_htb=True)link=self.addLink(cSwitch[i],aSwitch[j])#addlinksbetweenaggregationandedgeovsforiinrange(L1):forjinrange(L1):self.addLink(aSwitch[i],eSwitch[j])foriinrange(L1):forjinrange(L1):#self.addLink(sw2,sw1,bw=10,delay='5ms',loss=10,max_queue_size=1000,use_htb=True)self.addLink(aSwitch[L1+i],eSwitch[L1+j])#addhostsanditslinkswithedgeovscount=1forsw1ineSwitch:foriinrange(L1):host=self.addHost('h{}'.format(count))self.addLink(sw1,host)count+=1topos={'mytopo':(lambda:MyTopo())}通过Mininet命令控制台进行手动输入命令测试验证,测试结果如下:通过Mininet手动操作命令创建拓扑:root@ubuntu:/home/wr/study/sdn#mn--customFatTree.py--topomytopo--controller=remote,ip=192.168.28.131,port=66331。测试同一交换机内主机之间的连通性和通信带宽:pingh1和h2,验证主机是否能ping通。运行iperfh1h2命令时,h1和h2的带宽性能测试结果为:测试TCP带宽下发送数据速率为16.1Gbit/s,接收数据速率为16.1Gbit/s。2、测试同一台汇聚交换机下不同机架的主机:在h1和h3之间进行ping操作,验证两台主机可以互通。h1和h3的带宽性能测试结果如下:在测试的TCP带宽中发送数据的速率为91.6Mbit/s,接收数据的速率为98.0Mbit/s。3、同一核心交换机不同汇聚交换机下主机间测试:h1和h5主机在同一核心交换机不同汇聚交换机下,在h1和h5之间进行ping操作。验证两台主机可以通信。h1和h5的带宽性能测试结果为:测试TCP带宽中发送数据速率为73.7Mbit/s,接收数据速率为79.3Mbit/s。
