Mininet 2.2.0 以上版本自帶
1. 進入 mininet/example node
在~目錄下操做
cd ~ cd mininet/example
2. 啓動 miniedit.py python
sudo ./miniedit.py
界面以下:
3. 自定義拓撲:拖拽設備到畫布
4. 配置 Mininet 設備屬性
① 設置控制器屬性
長按右鍵控制器圖標-選擇「Properties」
修改 Controller Type
點擊OK,開啓 miniedit 的終端變化:
② 配置交換機屬性
填寫 16位 DPID,更改 Switch Type
③ 配置主機屬性
設置主機 IP 地址
④ 配置全局屬性
菜單欄 - Edit - Preferences
勾選:Start CLI 和 OpenFlow 1.3緩存
IP Base 默認設置了網段,剛纔第③步驟能夠不填。
5. 點擊左下角 Run bash
觀察打開 miniedit.py 的終端變化
6. mininet 基礎命令
① 使用 dump 命令查看網絡節點信息
② 使用 net 命令查看鏈路端口對應信息
③ 使用 nodes 查看節點信息
④ 使用 links 查看鏈路鏈接狀態
7. 保存拓撲圖 網絡
菜單欄選擇:File - Export Level 2 Script 保存
建立好後,終端 CTRL+C 關閉 miniedit
8. 驗證下次使用 app
打開新的終端Ctrl+Alt+T
cd mininet/examples sudo python sdnsy.py
9. 退出mininet 工具
exit
10. 若是再次使用Mininet報錯,RTENETLINK answers:File exists 學習
sudo mn -c
清空一下緩存再使用。測試
已經啓動 mininet 拓撲條件下
1. 增長主機
py net.addHost('h4')
2. 增長鏈路(主機h4和交換機s2spa
py net.addLink(s2,net.get('h4'))
3. 交換機新增端口,鏈接主機
py s2.attach('s2-eth3')
4. 新增主機配置 IP 地址
py net.get('h4').cmd('ifconfig h4-eth0 10.4')
5. links 查看結果
1. 啓動控制器
開啓終端1
啓動 Ryu 應用(二層交換)
ryu-manager ryu/app/simple_switch.py
2. 啓動 mininet 拓撲
再開啓終端2, 用剛纔本身建立的拓撲
cd mininet/examples sudo python sdnsy.py
3. Ryu 接收到 PACKET-IN 消息
4. mininet 測試連通性
在mininet 終端頁面
pingall
5. mininet 測試帶寬
iperf h1 h2
1. 啓動控制器
在 ryu 文件夾內操做
cd ryu/ ryu-manager ryu/app/simple_switch.py
2. 啓動mininet
打開新的終端Ctrl+Alt+T
cd mininet/examples sudo python sdnsy.py
3. mininet 查看當前流表
網絡拓撲剛建立,沒有數據流傳輸,初始流表爲空
dpctl dump-flows
4. pingall 產生PACKET-IN數據包
simple_switch 應用會處理 Packet-in 並下發流表
pingall
5. 再次查看流表
dpctl dump-flows
6. 刪除全部流表
dpctl del-flows
7. 查看流表,驗證刪除結果
dpctl dump-flows
8. 手動添加流表,實現數據轉發
dpctl add-flow in_port=1,ations=output:2 dpctl add-flow in_port=2,ations=output:1
9. 查看流表,驗證添加結果
dpctl dump-flows
觀察到兩個交換機均添加了這兩條流
10. ping,驗證流表
h1 ping h2
能夠 ping 通
h1 ping h3
因爲流表匹配項是in_port=1,執行的action是轉發到端口2,因此h1 ping h3時,流表匹配,所有轉發到端口2,到達不了h3,ping不通
11. 數據包丟棄的流表操做
交換機丟棄全部端口2傳入的數據包
① 手動添加流表
dpctl add-flow in_port=2,actions=drop
② 查看流表結果
dpctl dump-flows
③ ping 查看流表是否做用
pingall
發現 ping 不通,流表項起做用
12. 流表優先級
① 先刪除全部流表
dpctl del-flows
② pingall 經過應用:simple_switch 下發流
pingall
③ 添加數據包丟棄流表
dpctl add-flow in_port=2,actions=drop
④ 查看流表結果
dpctl dump-flows
⑤ 驗證pingall 是否仍然連通
pingall
結果仍然可以 ping 通
思考:爲何此次主機間還能夠通訊?不是已經添加 drop 了麼?
13. 刪除指定流表
刪除交換機 s1 條件字段中包含 in_port=1 的全部流表,並查看當前流表
sh ovs-ofctl del-flows s1 in_port=2 dpctl dump-flows