SDN實驗 3: Mininet 實驗——測量路徑的損耗率
一、實驗目的
在實驗 2 的基礎上進一步熟悉 Mininet 自定義拓撲指令碼, 以及與損耗率相關的設定; 初步瞭解 Mininet 安裝時自帶的 POX 控制器指令碼編寫,測試路徑損耗率。
二、實驗任務
h0 向 h1 傳送資料包,由於在 Mininet 指令碼中設定了連線損耗率,在傳輸過程中會丟失一些包,本次實驗的目的是展示如何通過控制器計算路徑損耗速率(h0-s0-s1-h1)。這裡假設控制器預先知道網路拓撲。控制器將向 s0 和 s1 傳送flow_stats_request,當控制器接收到來自 s0 的 response 時,將特定流的資料包數儲存在 input_pkts 中,當控制器接收到來自 s1 的 response 時,將接收到特定流的資料包數儲存在 output_pkts 中,差值就是丟失的資料包數量。
基於上述拓撲,編寫 Mininet 指令碼,設定特定的交換機間的路徑損耗速率,然後編寫 POX 控制器指令碼,實現對路徑的損耗率的測量。
三、 實驗步驟
1. 實驗環境
安裝了 Ubuntu 18.04.5 Desktop amd64 的虛擬機器
2. 實驗過程
SDNLAB 實驗參考資料: https://www.sdnlab.com/15100.html
(1) 新建並編輯 pox 指令碼 flowstat.py:
在 pox 安裝目錄下(Mininet 完整安裝包含了 pox)執行以下命令執行 pox 指令碼
./pox.py flowstat
(2) 編輯 Mininet 指令碼 mymininet3.py
參照拓撲圖,新建並編輯 Mininet 指令碼 mymininet3.py,控制器因為安裝在本機,所以需修改參考資料程式碼中的控制器地址為 127.0.0.1:6633。
設定 s0 和 s1 之間鏈路的丟包率為 0
再執行命令執行 Mininet 指令碼 mymininet3.py
sudo python mymininet3.py
Ping 預設是每 1 秒鐘測一次, ping 的結果會顯示一個丟包率, 這裡的丟包率是根據 ping 不通的次數佔總次數的百分比計算得到的。 上圖中由於一共 ping 了 20次, 每次都能通, 所以丟包率是 0。
觀察 pox 側的實時狀態更新
平均丟包率為 0,結果符合 Mininet 指令碼中設定的損耗率, 也有可能出現負值,可以認為沒有丟包。
修改程式碼中 s0 和 s1 之間鏈路的丟包率為 10。
重新執行 Mininet 指令碼 mymininet3.py, 20 秒時間的 ping 過程中有 icmp_seq 為
10/11 共 2 次 ping 不通, 所以丟包率計算為 10%。
四、遇到的坑
實驗過程中,程式碼正確無誤,但是無法連線上控制器。
在求助老師後得到了解決方案: 不要使用 root 使用者執行 pox.py