開源控制器實踐-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控制器流表下發的方法。