一、實驗目的
1.能夠獨立部署RYU控制器;
2.能夠了解RYU控制器實作軟體定義的集線器原理;
3.能夠了解RYU控制器實作軟體定義的交換機原理。
二、實驗環境
1.下載下傳虛拟機軟體Oracle VisualBox或VMware;
2.在虛拟機中安裝Ubuntu 20.04 Desktop amd64,并完整安裝Mininet;
三、實驗要求
(一)基本要求
- 完成Ryu控制器的安裝。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCM581dvRWYoNHLwEzX5xCMx8FesU2cfdGLwATMfRHLGZkRGZkRfJ3bs92YskmNhVTYykVNQJVMRhXVEF1X0hXZ0xiNx8VZ6l2cssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL0ADN0kzYiJDO1MmMmdjNxYzX5ATNwcTM0EzLcBTMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL5M3Lc9CX6MHc0RHaiojIsJye.png)
- 搭建下圖所示SDN拓撲,協定使用Open Flow 1.0,并連接配接Ryu控制器。
- 通過 vim 編輯儲存 L2Switch.py 檔案
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import MAIN_DISPATCHER
from ryu.controller.handler import set_ev_cls
from ryu.ofproto import ofproto_v1_0
class L2Switch(app_manager.RyuApp):
OFP_VERSIONS = [ofproto_v1_0.OFP_VERSION]
def __init__(self, *args, **kwargs):
super(L2Switch, self).__init__(*args, **kwargs)
@set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
def packet_in_handler(self, ev):
msg = ev.msg
dp = msg.datapath
ofp = dp.ofproto
ofp_parser = dp.ofproto_parser
actions = [ofp_parser.OFPActionOutput(ofp.OFPP_FLOOD)]
data = None
if msg.buffer_id == ofp.OFP_NO_BUFFER:
data = msg.data
out = ofp_parser.OFPPacketOut(
datapath=dp, buffer_id=msg.buffer_id, in_port=msg.in_port,
actions=actions, data = data)
dp.send_msg(out)
-
搭建拓撲
sudo mn --topo=single,3 --mac --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow10
- 通過Ryu的圖形界面檢視網絡拓撲。
- 閱讀Ryu文檔的The First Application一節,運作并使用 tcpdump 驗證L2Switch,分析和POX的Hub子產品有何不同。
- 運作并驗證
- h1 ping h2
實驗6:開源控制器實踐——RYU - h1 ping h3
實驗6:開源控制器實踐——RYU -
分析:
兩個子產品都使用的是洪泛轉發 ICMP 封包,當h1 ping h2時 h3都能抓到資料包。L2Switch 與 Hub 子產品的不同在于:L2Switch 下發的流表無法在 mininet 檢視(如下圖),Hub 可以。
實驗6:開源控制器實踐——RYU
四、個人總結
1. 實驗難度:中等
本次實驗我認為難在建構拓撲和啟動ryu控制器的順序上,因為順序問題我遇到了ping不通的情況,加大了實驗的難度。
2. 遇到的問題
-
拓撲搭建出錯并且ping不通
一開始我是先建構拓撲再啟動ryu控制器的,但是這樣會導緻建構拓撲時報錯,也會導緻拓撲無法ping通,出現的問題如下圖
解決方法:先開啟ryu控制器,執行L2Switch檔案,再建構拓撲,也就是先在實驗6:開源控制器實踐——RYU
目錄下執行ryu/ryu/app
,再新開一個終端在ryu-manager L2Switch.py
lab6
sudo mn --topo=single,3 --mac --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow10
- ryu的圖形界面沒有顯示出網絡拓撲
實驗6:開源控制器實踐——RYU 實驗6:開源控制器實踐——RYU 在我正确搭建拓撲之後再進行可視化的操作時,可視化頁面是空白的。
尚未找到解決方法。
3. 實驗心得
本次實驗的過程其實挺坎坷的,因為一開始我并沒有發現搭建拓撲時指令行報錯,于是我便繼續做下去,結果在驗證L2Switch檔案時,h1與h2并不能ping通,于是我進行pingall操作進行驗證,發現拓撲并不能ping通,于是我又進行了關機開機的操作,但還是解決不了問題。這時,坐在旁邊的同學注意到了我的問題,他非常樂于助人,并告訴我先啟動ryu控制器,運作L2Switch檔案,再建構拓撲,就可以解決問題了,于是我按照他的步驟,問題解決了,我很感謝這位同學。
通過這次實驗,我能夠獨立部署RYU控制器;能夠了解RYU控制器實作軟體定義的集線器原理。同時我也注意到了POX和ryu的差別(并不是非常重大的發現):POX控制器的開啟先後順序對搭建拓撲沒有影響,但是如果先搭建拓撲再開啟ryu,拓撲會報錯。