天天看點

實驗1:SDN拓撲實踐

實驗1:SDN拓撲實踐一、實驗目的

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

二、實驗環境

  1. 下載下傳虛拟機軟體Oracle VisualBox 或 VMware;
  2. 在虛拟機中安裝Ubuntu 20.04 Desktop amd64;

三、實驗要求

(一)基本要求

  1. 在Ubuntu系統的home目錄下建立一個目錄,目錄命名為學号。
  2. 在建立的目錄下,完成Mininet的源碼安裝。下圖為mininet的安裝路徑:
  3. 使用Mininet可視化工具,生成下圖所示的拓撲,并儲存拓撲檔案名為學号.py。
    實驗1:SDN拓撲實踐
    配置各主機IP為10.0.0.1,控制器配置保持預設,在Edit中選擇Preferences将Star CLI、OpenFlow1.0至1.3都選中。如圖:
    實驗1:SDN拓撲實踐
    使用pingall指令測試主機連通性,并作其他擴充操作:
    實驗1:SDN拓撲實踐
    在File菜單中選擇“Export Level 2 Script”,儲存拓撲檔案名為學号.py:
    實驗1:SDN拓撲實踐
  4. 使用Mininet的指令行生成如下拓撲:

    a) 3台交換機,每個交換機連接配接1台主機,3台交換機連接配接成一條線。

    使用指令

    sudo mn --topo=linear,3

    實驗1:SDN拓撲實踐
    b) 3台主機,每個主機都連接配接到同1台交換機上。

    sudo mn --topo=single,3

    實驗1:SDN拓撲實踐
  5. 在4 b)的基礎上,在Mininet互動界面上新增1台主機并且連接配接到交換機上,再測試新拓撲的連通性。

    py net.addHost('h4')

    py net.addLink(h4,s1)

    實驗1:SDN拓撲實踐
    上面操作的丢包率為50%的原因是“Error : could not parse ping output: ping: None: Temporary failure in name resolution”
  6. 編輯(一)中第3步儲存的Python腳本,添加如下網絡性能限制,生成拓撲:
  7. a) h1的cpu最高不超過50%;

    b) h1和s1之間的鍊路帶寬為10,延遲為5ms,最大隊列大小為1000,損耗率50。

    打開檔案代碼進行修改

    源代碼:

h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None)
net.addLink(h1, s1)      
  1. 修改後的代碼:
h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None, cpu=0.5)

net.addLink(h1, s1, bw=10, delay='5ms',max_queue_size=1000, loss=50, use_htb=True)      
  1. 實驗1:SDN拓撲實踐

(二)進階要求

編寫Python腳本,生成如下資料中心網絡拓撲,要求:

  • 編寫.py拓撲檔案,命名為“學号_fattree.py”;
  • 必須通過Mininet的custom參數載入上述檔案,不得直接使用miniedit.py生成的.py檔案;
  • 裝置名稱必須和下圖一緻;
  • 使用Python的循環功能實作,不得在代碼中手工直接添加裝置和鍊路。
    實驗1:SDN拓撲實踐
    根據要求編寫Python腳本:
from mininet.topo import Topo
class MyTopo(Topo):
  def __init__(self):
    Topo.__init__(self)
    #hosts
    hosts=[]
    for i in range(16):
      h =self.addHost('h'+str(i+1))
      hosts.append(h)
    
    #switchs
    switchs=[]
    for i in range(14):
      s =self.addSwitch('s'+str(i+1))
      switchs.append(s)
    
    #links
    #switch to switch
    for i in range(0,2):
      for j in range(2,6):
        self.addLink(switchs[i],switchs[j])
    
    for i in range(2,4):
      for j in range(6,10):
        self.addLink(switchs[i],switchs[j])
    
    for i in range(4,6):
      for j in range(10,14):
        self.addLink(switchs[i],switchs[j])
    
    #switch to host
    for i in range(8):
      self.addLink(switchs[i+6],hosts[2*i])
      self.addLink(switchs[i+6],hosts[2*i+1])
      
topos = {'mytopo': (lambda: MyTopo())}      
  • 儲存檔案:有空再補上

    運作檔案結果:

四、實驗心得

個人覺得這次實驗的内容難度不大。主要的困難和時間花費都在實驗環境的配置上。

  • 配置實驗環境
  • 我将兩個虛拟機軟體Oracle VisualBox 和VMware都下載下傳安裝了。首先進行的是Oracle VisualBox的配置,配置過程中出現的各種小問題都經過百度的幫助解決了,但是在Oracle VisualBox上安裝mininet實驗環境時,總是請求失敗,詢問并查找了多種辦法都沒辦法解決。于是不得已暫時停止,在VMware上嘗試,令人意外的是,配置過程一路絲滑。是以最後選擇了VMware進行實驗。
  • (一)基礎要求
  • 其實配置好實驗環境,其實這次實驗就完成了一大半。由于上個學期修習過《資料通信與計算機網絡》這門課程,對于拓撲有一定了解,加上實驗環境很完美,是以實驗要求的部分(一)完成并了解的較好。