實驗1:SDN拓撲實踐
一、實驗目的
- 能夠使用源碼安裝Mininet;
- 能夠使用Mininet的可視化工具生成拓撲;
- 能夠使用Mininet的命令行生成特定拓撲;
- 能夠使用Mininet交互界面管理SDN拓撲;
- 能夠使用Python腳本構建SDN拓撲。
二、實驗環境
下載虛擬機軟件Oracle VisualBox 或 VMware;
在虛擬機中安裝Ubuntu 20.04 Desktop amd64;
三、實驗要求
(一)基本要求
- 在Ubuntu系統的home目錄下創建一個目錄,目錄命名為學號。
- 在創建的目錄下,完成Mininet的源碼安裝。
- 使用Mininet可視化工具,生成下圖所示的拓撲,並保存拓撲文件名為學號.py。
- 畫出拓撲圖
- 配置四台主機ip地址、控制器、Edit Preferences
- 驗證連通性
- 保存py文件 031902241.py
- 使用Mininet的命令行生成如下拓撲:
a) 3台交換機,每個交換機連接1台主機,3台交換機連接成一條線。
為線性拓撲(Linear) sudo mn --topo=linear,4 #主機數=交換機數=4
b) 3台主機,每個主機都連接到同1台交換機上。
為簡單拓撲 sudo mn --topo=single,3 #主機數=3
查看當前鏈路、網絡狀態
- 在4 b)的基礎上,在Mininet交互界面上新增1台主機並且連接到交換機上,再測試新拓撲的連通性。
- 添加主機h4、添加鏈路、配置s1端口號以及主機4IP地址
- 查看添加完后的鏈路、網絡狀態
- 測試新拓撲連通性
- 編輯(一)中第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安裝上出現了許多問題,一共安裝了三次才安裝清楚,但每一次發現問題、解決問題都會讓我覺得自己學到了一些東西。第一次實驗這么做下來,覺得最有意思的是可視化實現拓撲的部分,這部分最容易,拓撲結構一目了然,少去了很多書寫代碼段、命令行控制的繁瑣,用簡單的方式就可以達到很好的效果。
遇到的一些問題:
- 在對原有拓撲新增主機和鏈路時,為了驗證連通性還需要新配置主機的IP地址以及路由器端口。
- 拓展題需要編寫python代碼,這次編寫的python代碼設計到range()函數和數組,以及format格式化函數,由於之前沒有真正的寫過python代碼,所以在編寫的過程中也遇到了許多問題,比如range()函數的索引確定,數組下標的確定等等。