天天看點

實驗6:開源控制器實踐——RYU

一、實驗目的

1.能夠獨立部署RYU控制器;

2.能夠了解RYU控制器實作軟體定義的集線器原理;

3.能夠了解RYU控制器實作軟體定義的交換機原理。

二、實驗環境

1.下載下傳虛拟機軟體Oracle VisualBox或VMware;

2.在虛拟機中安裝Ubuntu 20.04 Desktop amd64,并完整安裝Mininet;

三、實驗要求

(一)基本要求

  1. 完成Ryu控制器的安裝。
實驗6:開源控制器實踐——RYU
  1. 搭建下圖所示SDN拓撲,協定使用Open Flow 1.0,并連接配接Ryu控制器。
實驗6:開源控制器實踐——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​

  1. 通過Ryu的圖形界面檢視網絡拓撲。
  2. 閱讀Ryu文檔的The First Application一節,運作并使用 tcpdump 驗證L2Switch,分析和POX的Hub子產品有何不同。
  • 運作并驗證
實驗6:開源控制器實踐——RYU
  • 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通,出現的問題如下圖

    實驗6:開源控制器實踐——RYU
    解決方法:先開啟ryu控制器,執行L2Switch檔案,再建構拓撲,也就是先在

    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,拓撲會報錯。