SDN 教程[2]-SDN基礎操做

實驗二:SDN 基礎操做學習

  1. Mininet 可視化工具建立拓撲
  2. Mininet 拓撲動態更改
  3. Mininet 鏈接控制器
  4. 流表操做

Mininet 可視化工具建立拓撲

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 拓撲動態更改

已經啓動 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 查看結果

mininet 鏈接控制器

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
相關文章
相關標籤/搜索