實驗1:SDN拓撲實踐


實驗1:SDN拓撲實踐

一、實驗目的

  1. 能夠使用源碼安裝Mininet;
  2. 能夠使用Mininet的可視化工具生成拓撲;
  3. 能夠使用Mininet的命令行生成特定拓撲;
  4. 能夠使用Mininet交互界面管理SDN拓撲;
  5. 能夠使用Python腳本構建SDN拓撲。

二、實驗環境

下載虛擬機軟件Oracle VisualBox 或 VMware;
在虛擬機中安裝Ubuntu 20.04 Desktop amd64;

三、實驗要求

(一)基本要求

  1. 在Ubuntu系統的home目錄下創建一個目錄,目錄命名為學號。
     
  2. 在創建的目錄下,完成Mininet的源碼安裝。
     

     
  3. 使用Mininet可視化工具,生成下圖所示的拓撲,並保存拓撲文件名為學號.py。
  • 畫出拓撲圖

     
  • 配置四台主機ip地址、控制器、Edit Preferences

     

     
  • 驗證連通性

     
  • 保存py文件 031902241.py

     
  1. 使用Mininet的命令行生成如下拓撲:
     
    a) 3台交換機,每個交換機連接1台主機,3台交換機連接成一條線。
    為線性拓撲(Linear) sudo mn --topo=linear,4 #主機數=交換機數=4

     
    b) 3台主機,每個主機都連接到同1台交換機上。
    為簡單拓撲 sudo mn --topo=single,3 #主機數=3

    查看當前鏈路、網絡狀態

     
  2. 在4 b)的基礎上,在Mininet交互界面上新增1台主機並且連接到交換機上,再測試新拓撲的連通性。
  • 添加主機h4、添加鏈路、配置s1端口號以及主機4IP地址

     
  • 查看添加完后的鏈路、網絡狀態

     
  • 測試新拓撲連通性

     
  1. 編輯(一)中第3步保存的Python腳本,添加如下網絡性能限制,生成拓撲:
     
    a) h1的cpu最高不超過50%;
    b) h1和s1之間的鏈路帶寬為10,延遲為5ms,最大隊列大小為1000,損耗率50。
     
  • 直接執行Python代碼

     
  • 添加網絡性能限制(方法1)

     
  • 添加網絡性能限制(方法2)

     
  • 性能測試

     

     

(二)進階要求

  • 生成的指定拓撲結構
  • 編寫.py拓撲文件,命名為“學號_fattree.py”;
  • 編寫代碼如下:
  from mininet.topo import Topo
  from mininet.net import Mininet
  from mininet.node import RemoteController,CPULimitedHost
  from mininet.link import TCLink
  from mininet.util import dumpNodeConnections
  class MyTopo(Topo):
	def __init__( self ):
	
        	# Initialize topology
        	Topo.__init__( self )
        	L1 = 2
        	L2 = L1 * 2 
        	L3 = L2 * 2
        	s = []
        	h = []
        	# add ovs  
        	for i in range( L1+L2+L3 ):
                	sw = self.addSwitch( 's{}'.format( i + 1 ) )
                	s.append( sw )
                	
		# add links between core and aggregation ovs
        	for i in range( L1 ):
                	sw1 = s[i]
                	for sw2 in s[L1:L2+L1]:
                		self.addLink( sw2, sw1 )
                		
 		# add links between aggregation and edge ovs
        	for i in range( L1, L2+L1, 2 ):
                	for sw1 in s[i:i+2]:
	                	for sw2 in s[2*i+2:2*i+6]:
	                		self.addLink( sw2, sw1 )
	                		
	        #add hosts and its links with edge ovs
	        count = 1
        	for sw1 in s[L1+L2:]:
                	for i in range(2):
                		host = self.addHost( 'h{}'.format( count ) )
                		self.addLink( sw1, host )
                		count += 1
topos = { 'mytopo': ( lambda: MyTopo() ) }
  • 運行結果如下

四.實驗心得

這次實驗是第一次SDN實驗,老師上課講的很詳細,實驗內容也並沒有特別復雜。但是由於本次實驗是第一次實驗,對於我來說,大多數的操作還很生疏,對於虛擬機也並不熟悉,在mininet安裝上出現了許多問題,一共安裝了三次才安裝清楚,但每一次發現問題、解決問題都會讓我覺得自己學到了一些東西。第一次實驗這么做下來,覺得最有意思的是可視化實現拓撲的部分,這部分最容易,拓撲結構一目了然,少去了很多書寫代碼段、命令行控制的繁瑣,用簡單的方式就可以達到很好的效果。

遇到的一些問題:

  1. 在對原有拓撲新增主機和鏈路時,為了驗證連通性還需要新配置主機的IP地址以及路由器端口。
  2. 拓展題需要編寫python代碼,這次編寫的python代碼設計到range()函數和數組,以及format格式化函數,由於之前沒有真正的寫過python代碼,所以在編寫的過程中也遇到了許多問題,比如range()函數的索引確定,數組下標的確定等等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM