• Ryu Controller 運作原理


    转载https://ting-kuan.blog/2018/04/12/%E3%80%90ryu-controller-%E9%81%8B%E4%BD%9C%E5%8E%9F%E7%90%86%E3%80%91/

    當Ryu Controller要與mininet建立連接時,我們會執行「reu-manager –verbose ryu/app/simple_switch_13.py」,其中simple_switch_13.py它是一個由python所撰寫的程式原始碼,其主要功能包含switch的mac address 對應 port 關係,以及flow entry的新增與刪除作業

    以下程式碼針對「simple_switch_13.py」來做改寫

    • 程式碼分析 :
      def switch_features_handler(self, ev): 

      該程式碼區塊主要負責監控關於switch的各種狀態,包含初次建立連接時的握手訊息交換,目前該switch的連線狀態(連接還是斷線)等

    Screenshot from 2018-04-07 03-02-41.png新增 Table-miss Flow Entry 區塊

    OpenFlow 交換器的握手協議完成之後,新增 Table-miss Flow Entry 到 Flow table 中為接收 Packet-In 訊息做準備。

    Table-miss Flow Entry 的優先權為 0 即最低的優先權,而且此 Entry 可以 match 所有的封包。 這個 Entry 的 Instruction 通常指定為 output action ,並且輸出的連接埠將指向 Controller。 

       def _packet_in_handler(self, ev):

    在Ryu 中當有未知的封包流經switch時,便會觸發PacketIn 事件,也就是此段程式區塊所做的事情

    Screenshot from 2018-04-07 03-02-59.png

    Screenshot from 2018-04-07 03-03-23.png

    Screenshot from 2018-04-07 03-03-40.png

    目的 MAC 位址若存在于 MAC 位址表,則判斷該連接埠的號碼為輸出。反之若不存在于 MAC 位址表則 OUTPUT action 類別的實體並生成 flooding( OFPP_FLOOD)給目的連接埠使用

    對於 Flow Entry 來說,設定 match 條件以分辨目標封包、設定 instruction 以處理封包以及 Entry 的優先權和有效時間。

    對於交換器的的實作,Apply Actions 是用來設定那些必須立即執行的 action 所使用。

    最後透過 Flow Mod 訊息將 Flow Entry 新增到 Flow table 中。

    • 程式實作

    執行Ryu和Mininet

    Screenshot from 2018-04-07 03-37-36.png

    當Mininet與Ryu Controller開始建立連接時,觀察Ryu的交換訊息

    Screenshot from 2018-04-07 03-37-59.png當初次建立連接時,分別會在每個switch上新增預設的「table-miss flow entry」,該規則中將所有封包都先往Controller送

    接著在mininet中執行 pingall 指令

    Screenshot from 2018-04-07 03-38-38.png

    Screenshot from 2018-04-07 03-38-49.png

    Screenshot from 2018-04-07 03-38-58.png

    Screenshot from 2018-04-07 03-39-09.png

    Screenshot from 2018-04-07 03-39-18

    Screenshot from 2018-04-07 03-39-28.png

    • 程式運作原則
    1. 初次建立連接時,新增table-miss flow entry,作為前置作業
    2. 使用Flooding機制得知host MAC address 對應的port,並存入mac_to_port table中
    3. flow流經switch時有來源位址(eth_src)和目的位址(eth_dst)和來源port(in_port),新增至flow entry
  • 相关阅读:
    python 学习分享-进程
    python 学习分享-实战篇类 Fabric 主机管理程序开发
    python 学习分享-线程
    python 学习分享-paramiko模块
    linux ubuntu开启sshd
    python 学习分享-实战篇高级的ftp
    python 学习分享-socketserver
    python 学习分享-socket编程
    Java学习笔记--Java开发坏境搭建
    C# 泛型
  • 原文地址:https://www.cnblogs.com/dream397/p/12956140.html
Copyright © 2020-2023  润新知