該實驗經過Mininet學習python自定義拓撲實現,可在python腳本文件中設計任意想要的拓撲,簡單方便,並經過設置交換機和主機之間鏈路的帶寬、延遲及丟包率,測試主機之間的性能。在實驗過程當中,能夠了解如下方面的知識:node
進一步研究SDN架構的特性,應用創新提供可定義的網絡平臺,在基於OpenFlow的mininet仿真軟件的基礎上,實現SDN架構的仿真。基於Mininet仿真軟件構造,模擬SND網絡架構中的交換機以及主機,提出的仿真方法和搭建的平臺可爲SDN架構的研究提供有效的技術支撐。Mininet 是一個輕量級軟件定義網絡和測試平臺;它採用輕量級的虛擬化技術使一個單一的系統看起來像一個完整的網絡運行想過的內核系統和用戶代碼,也可簡單理解爲 SDN 網絡系統中的一種基於進程虛擬化平臺,它支持 OpenFlow、OpenvSwith 等各類協議,Mininet 也能夠模擬一個完整的網絡主機、連接和交換機在同一臺計算機上且有助於互動開發、測試和演示,尤爲是那些使用 OpenFlow 和 SDN 技術;同時也可將此進程虛擬化的平臺下代碼遷移到真實的環境中。python
實現一個單個交換機的拓撲,添加一個交換機,和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是帶寬性能的測試方法學習