1. 程式人生 > 其它 >2021 SDN實驗5:開源控制器實踐——POX

2021 SDN實驗5:開源控制器實踐——POX

實驗5:開源控制器實踐——POX

一、實驗目的

1.能夠理解 POX 控制器的工作原理;
2.通過驗證POX的forwarding.hub和forwarding.l2_learning模組,初步掌握POX控制器的使用方法;
3.能夠運用 POX控制器編寫自定義網路應用程式,進一步熟悉POX控制器流表下發的方法。

二、實驗環境

1.下載虛擬機器軟體Oracle VisualBox 或 VMware;
2.在虛擬機器中安裝Ubuntu 20.04 Desktop amd64;

三、實驗要求

(一)基本要求

1.搭建下圖所示SDN拓撲,協議使用Open Flow 1.0,控制器使用部署於本地的POX(預設監聽6633埠)

2.閱讀Hub模組程式碼,使用 tcpdump 驗證Hub模組;
· h1分別ping h2、h3。 獲得h2的ip:10.0.0.2;獲得h3的ip:10.0.0.3。

· h1的命令端,分別ping h2和h3的ip地址。

· 總結:h1 ping h2和h3,h2和h3都能同時接收到資料包,結果符合Hub模組的作用:在每個交換機上安裝泛洪萬用字元規則,將資料包廣播轉發,此時交換機等效於集線器。

3.閱讀L2_learning模組程式碼,畫出程式流程圖,使用 tcpdump 驗證Switch模組。
· 流程圖

· h1命令端ping h2的ip時,只有h2能接受icmp報文。

· h1命令端ping h3的ip時,只有h3能接受icmp報文。

· 總結: 當h1 ping 其他主機時,只有相應主機可以接收到資料包,驗證了switch模組的功能:讓Openflow交換機實現L2自學習,可見交換機對資料包進行了學習,實現從相應的埠發出,只有目的主機可以抓取到報文

(二)進階要求

重新搭建(一)的拓撲,此時交換機內無流表規則,拓撲內主機互不相通;編寫Python程式自定義一個POX模組SendFlowInSingle3,並且將拓撲連線至SendFlowInSingle3(預設埠6633),實現向s1傳送流表規則使得所有主機兩兩互通。

· 重新搭建拓撲後,刪除流表 dpctl del-flows,後pingall,所有主機無法ping通。

from pox.core import core
import pox.openflow.libopenflow_01 as of
from pox.openflow.of_json import *

 
def _handle_ConnectionUp(event):
    msg = of.ofp_flow_mod()
    msg.priority = 1
    msg.match.in_port = 1
    msg.actions.append(of.ofp_action_output(port=2))
    msg.actions.append(of.ofp_action_output(port=3))
    event.connection.send(msg)
 
    msg = of.ofp_flow_mod()
    msg.priority = 1
    msg.match.in_port = 2
    msg.actions.append(of.ofp_action_output(port=1))
    msg.actions.append(of.ofp_action_output(port=3))
    event.connection.send(msg)
 
    msg = of.ofp_flow_mod()
    msg.priority = 1
    msg.match.in_port = 3
    msg.actions.append(of.ofp_action_output(port=1))
    msg.actions.append(of.ofp_action_output(port=2))
    event.connection.send(msg)
 
 
def launch():
    core.openflow.addListenerByName("ConnectionUp", _handle_ConnectionUp)

· 在pox目錄下執行./pox.py SendFlowInSingle3後,流表下發成功,所有節點均可ping通

(三)實驗報告

實驗難度:
本次實驗基礎部分難度適中,進階部分難度較大。

實驗問題:
   · 問題1:閱讀L2_learning模組程式碼,畫出程式流程圖時遇到了困難,程式的引數太多,太複雜。
    解決:參考了一下同學的流程圖思路,根據同學的思路去看程式碼,就勉強畫出了流程圖。

收穫感想:
通過本次實驗,我能夠理解 POX 控制器的工作原理;驗證POX的forwarding.hub和forwarding.l2_learning模組,比較實驗結果分析了不同模組之間的區別,初步掌握POX控制器的使用方法;能夠運用 POX控制器編寫自定義網路應用程式,進一步熟悉POX控制器流表下發的方法。使我初步瞭解掌握了POX控制器的一些使用方法,並進一步熟悉了流表。基本要求中的實驗操作還是比較簡單的,但進階要求就進行的比較困難,對於POX控制器的原理有了初步的理解,但仍然有不太懂的地方需要進一步去了解