實驗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。

成功搭建要求拓撲:

保存為要求文件名

4.使用Mininet的命令行生成如下拓撲:
a) 3台交換機,每個交換機連接1台主機,3台交換機連接成一條線。

  • 按題目要求,生成拓撲應為參數為3的線性拓撲,
  • 成功使用命令行生成要求拓撲:
sudo mn --topo linear, 3

b) 3台主機,每個主機都連接到同1台交換機上。

  • 按題目要求,生成拓撲應為簡單拓撲,
  • 成功使用命令行生成要求拓撲:
sudo mn --topo=single, 3

5.在4 b)的基礎上,在Mininet交互界面上新增1台主機並且連接到交換機上,再測試新拓撲的連通性。

  • 成功添加新主機h4,並將其連接到s1上:
py net.addHost('h4')
py net.addLink(h4, s1)

  • 測試連通性:

    (由於未設置路由表,丟包率較高)

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

  • 通過sudo chmod -R 777 + 文件名令之前的文件可寫,直接在腳本內添加
  • 為先前保存Python腳本添加題示網絡性能限制:
  • 再次生成拓撲:

(二)進階要求

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

  • 編寫.py拓撲文件,命名為“學號_fattree.py”;

  • 必須通過Mininet的custom參數載入上述文件,不得直接使用miniedit.py生成的.py文件;

  • 設備名稱必須和下圖一致;

  • 使用Python的循環功能實現,不得在代碼中手工直接添加設備和鏈路。

  • 生成.py文件

  • Python 腳本具體實現
from mininet.topo import Topo

class MyTopo(Topo):
    def __init__(self):
        Topo.__init__(self)
        
        #loop for add hosts
        hosts = []
        for i in range(16):
            h = self.addHost('h'+str(i+1))
            hosts.append(h)
        
        #loop for add switchs
        switchs = []
        for i in range(14):
            s = self.addSwitch('s'+str(i+1))
            switchs.append(s)
        
        #loops for add links
        #s & s
        for i in range(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])
        #s & h
        for i in range(6, 14):
            loca = 2 * ( i - 6 )
            self.addLink(switchs[i], hosts[loca])
            self.addLink(switchs[i], hosts[loca+1])
 
topos = {'mytopo': (lambda: MyTopo())}

  • 最終執行結果:

個人總結

本次實驗為軟件定義網絡(Software Defined Network, SDN)的第一次實踐活動。主要任務是搭建Mininet實驗環境以及動手嘗試通過不同的方式搭建簡單的的網絡拓撲結構。當然,科學實踐沒有一帆風順的。在本次實驗實踐中,我也在以下方面遇到了一些問題:

1.環境安裝方面

本次實驗是在基於虛擬機軟件的環境下進行的,由於實驗之前缺乏對網絡管理和虛擬機等方面了解,相關軟件的安裝與運行還無法十分得心應手。實驗提供了兩種虛擬機軟件,我這里選擇了Oracle VisualBox。

  • Q1. 在安裝Ubuntu鏡像時,系統安裝曾一度卡在Checking Disk:67%處,隨后報錯關閉,使系統安裝無法順利完成。
  • 解決方法:在查閱資料和類似博客后,嘗試調換“啟動順序”,問題解決成功。
  • Q2. 在安裝Mininet過程中中,執行安裝腳本時報錯:No module named pip
  • 解決方法:Mininet運行需要Python,目前版本一般要Python3,Ubuntu20.04原有Python默認是Python2。故修改軟鏈,指向Python3。再次運行安裝腳本,成功運行,問題解決。

2.系統運行方面

  • Q1.Ubuntu系統&Mininet安裝完畢,但是實際在虛擬機系統運行時,卡頓現象相對嚴重,嚴重影響實踐體驗和實驗效率
  • 解決方法:調高設置中分配給虛擬機的處理器數量可以有效緩解卡頓 (真的不是因為你電腦配置太拉胯嗎?🌚)

3.實踐任務方面

  • Q1. 在通過MiniEdit搭建網絡拓撲時,實驗要求保存拓撲為.py格式文件。然而在通過“保存”,僅能產生.mn格式文件
  • 解決方法:通過“導出模型”方式,即可導出.py格式的Python腳本文件。值得注意的是,.mn格式文件內部保存的是多個鍵值對, 而.py格式文件內部保存的Python腳本,而這有本質不同。故對於MiniEdit而言, 已經導出的.py文件無法再次直接讀取,而只能直接讀取.mn文件

總體而言,本次軟件定義網絡實驗實踐令我對 何為軟件定義網絡 以及 何為網絡 有了更加直觀且全面的認識。同時本次實驗依然仍然留下了一些還未解決的問題需要我進一步思考和實踐,就例如,如何有效解決在基本要求5中的網絡拓撲丟包率高的問題,還有為何進階要求中我構造出來的網絡拓撲連通性不行等等問題,都有待進一步的學習和實驗實踐來解決與完善。


免責聲明!

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



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