1. 程式人生 > 其它 >開源控制器實踐-pox

開源控制器實踐-pox

實驗五:開源控制器實踐-pox

一、實驗目的

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

二、實驗環境

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

三、實驗要求

基本要求

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

2.閱讀Hub模組程式碼,使用 tcpdump 驗證Hub模組;

  • h1 ping h2 ,h2和h3都能同時接收到資料包
  • h1 ping h3,h2和h3都能同時接收到資料包

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

進階要求

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

刪除流表

檢視

SendFlowInSingle3程式碼
rom pox.core import core
import pox.openflow.libopenflow_01 as of

class SendFlowInSingle3(object):
def init (self):
core.openflow.addListeners(self)
def _handle_ConnectionUp(self,event):
msg = of.ofp_flow_mod()
msg.priority = 1
msg.idle_timeout=0
msg.match.in_port = 1
msg.actions.append(of.ofp_action_output(port = of.OFPP_ALL))
event.connection.send(msg)
msg = of.ofp_flow_mod()
msg.priority = 1
msg.idle_timeout=0
msg.match.in_port = 2
msg.actions.append(of.ofp_action_output(port = of.OFPP_ALL))
event.connection.send(msg)
msg = of.ofp_flow_mod()
msg.priority = 1
msg.idle_timeout=0
msg.match.in_port = 3
msg.actions.append(of.ofp_action_output(port = of.OFPP_ALL))
event.connection.send(msg)

def launch ():
core.registerNew(SendFlowInSingle3)

四、實驗報告

  • 難度:基礎要求比較簡單,按步驟做就完成。進階比較難,參考別的同學的部落格學習後再做。
  • 困難:
    • 又遇到了之前同樣的困難,不能對鎖住的檔案進行操作 使用 sudo chown -R $USER /home/pothoy/081900511/pox就可以解鎖資料夾
    • 開啟h2,h3節點檢視時,反覆出現bug,到最後也沒明白為什麼。。
  • 理解 POX 控制器的工作原理;通過驗證POX的forwarding.hub和forwarding.l2_learning模組,初步掌握POX控制器的使用方法;能夠運用 POX控制器編寫自定義網路應用程式,進一步熟悉POX控制器流表下發的方法。