實驗1:SDN拓撲實踐一、實驗目的
- 能夠使用源碼安裝Mininet;
- 能夠使用Mininet的可視化工具生成拓撲;
- 能夠使用Mininet的指令行生成特定拓撲;
- 能夠使用Mininet互動界面管理SDN拓撲;
- 能夠使用Python腳本建構SDN拓撲。
二、實驗環境
- 下載下傳虛拟機軟體Oracle VisualBox 或 VMware;
- 在虛拟機中安裝Ubuntu 20.04 Desktop amd64;
三、實驗要求
(一)基本要求
- 在Ubuntu系統的home目錄下建立一個目錄,目錄命名為學号。
- 在建立的目錄下,完成Mininet的源碼安裝。下圖為mininet的安裝路徑:
- 使用Mininet可視化工具,生成下圖所示的拓撲,并儲存拓撲檔案名為學号.py。 配置各主機IP為10.0.0.1,控制器配置保持預設,在Edit中選擇Preferences将Star CLI、OpenFlow1.0至1.3都選中。如圖: 使用pingall指令測試主機連通性,并作其他擴充操作: 在File菜單中選擇“Export Level 2 Script”,儲存拓撲檔案名為學号.py:
-
使用Mininet的指令行生成如下拓撲:
a) 3台交換機,每個交換機連接配接1台主機,3台交換機連接配接成一條線。
使用指令
b) 3台主機,每個主機都連接配接到同1台交換機上。sudo mn --topo=linear,3
sudo mn --topo=single,3
- 在4 b)的基礎上,在Mininet互動界面上新增1台主機并且連接配接到交換機上,再測試新拓撲的連通性。
和py net.addHost('h4')
上面操作的丢包率為50%的原因是“Error : could not parse ping output: ping: None: Temporary failure in name resolution”py net.addLink(h4,s1)
- 編輯(一)中第3步儲存的Python腳本,添加如下網絡性能限制,生成拓撲:
-
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)
- 修改後的代碼:
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)
(二)進階要求
編寫Python腳本,生成如下資料中心網絡拓撲,要求:
- 編寫.py拓撲檔案,命名為“學号_fattree.py”;
- 必須通過Mininet的custom參數載入上述檔案,不得直接使用miniedit.py生成的.py檔案;
- 裝置名稱必須和下圖一緻;
- 使用Python的循環功能實作,不得在代碼中手工直接添加裝置和鍊路。 根據要求編寫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進行實驗。
- (一)基礎要求
- 其實配置好實驗環境,其實這次實驗就完成了一大半。由于上個學期修習過《資料通信與計算機網絡》這門課程,對于拓撲有一定了解,加上實驗環境很完美,是以實驗要求的部分(一)完成并了解的較好。