OpenFlow協議分析


實驗環境

  • 虛擬機軟件(vmware workstation)
  • 裝有 mininet、python2 的 Ubuntu20.04

實驗目的

  • 能夠理解 OpenFlow 協議的工作原理;
  • 能夠通過 Wireshark 抓包軟件對 OpenFlow 協議進行分析;
  • 能夠使用控制器 RYU 連接交換機,並對控制器與交換機的通信流程進行分析;

實驗內容

  • 基礎技能
    • 使用 mininet 的可視化工具創建網絡拓撲,完成相關 IP 配置,並實現主機與主機之間的 IP 通信。用抓包軟件 wireshark 獲取控制器與交換機之間的通信數據包。
  • 進階技能
    • 修改基礎技能中創建的網絡拓撲 python 文件,設置遠程控制器連接,啟動 wireshark 和控制器 RYU,運行 python 文件后,在 wireshark 中查看控制器與交換機的通信流程,對具體消息進行分析。

實驗步驟

  1. 可視化界面搭建網絡拓撲
    在超級用戶模式下,在目錄/mininet/examples 下,運行 miniedit.py 文件

    按照拓撲圖,選擇對應的設備進行連接,完成拓撲圖的搭建

  2. 配置 PC 的 IP 信息
    在主機、交換機、控制器上點擊鼠標右鍵,選擇 Properties 即可設置其屬性

  3. Wireshark 抓包並分析
    在超級用戶下,使用sudo wireshark 命令開啟 wirshark 軟件,點擊“any”,讓其獲取全部的數據包,之后再通過過濾器輸入“openflow_v1”或“openflow_v4”,過濾出 OpenFlowv1.0 或OpenFlowv1.3 的數據報文,進行分析。

    1. HELLO

    HELLO 是使用來協商控制器和交換機之間openflow協議的版本號的消息。

    0x01代表版本1,即 openflow1.0
    Type類型為 HELLO,表示為0

    2. FEATURE_REQUEST

    FEATURE_REQUEST 消息是控制器用來查詢交換機特性消息,如交換機ID,緩沖區數量,端口及端口屬性等。

    Type類型為 FEATURE_REQUEST,標識為5
    Length 代表消息長度,除去消息報頭
    Transation ID 用來表示同一個事件

    3. FEATURE_REPLY

    交換機收到feature_request消息之后會回復feature_reply消息來報告自己的特性。

    Datapath id 數據通道標識符,用來表示交換機的身份。在每一個控制器中獨一無二。
    n_buffers 一次最多緩存的數據包數量,即交換機自己的緩存能力。
    n_tables 表示交換機支持的流表數量。
    capabilities 交換機端口所支持的功能,有流表,端口,STP,隊列,ARP 等。
    actions 該bitmask表示交換機所支持的 actions,有轉發和修改包頭兩種。
    Port 交換機連接的端口消息。端口MAC地址,鏈路數據等。

    4. SET_CONFIG

    SET_CONFIG 消息是控制器對交換機進行配置的消息。控制器可以配置交換機的 MTU,報文分片處理等能力。

    5. PACKET_IN

    當交換機遇到不知道如何轉發的報文時,使用 Packet_IN 消息將無法處理的報文封裝起來發送給控制器,交給控制器去判斷處理。並且交換機會將該數據包緩存。

    Buffer_id Packet-IN 消息所攜帶的數據包在交換機中的緩存 ID。
    Total length 幀的長度。
    In port 數據包進入交換機的入端口號。
    Reason packet-in事件的產生原因,分為兩種:OFPR_NO_MATCH和OFPR_ACTION。

    6. PACKET_OUT

    控制器可以使用 Packet_Out 消息,告訴交換機某一個數據包如何處理

    In port 數據包進入交換機的入端口號。
    Actions length 動作信息的長度。

    7. FLOW_MOD
    FLOW_MOD 消息的作用是下發流表項。通過 Flow_Mod 消息可以對流表進行添加、刪除、變更設置等操作

    Command 表示flow-mod消息的動作。一共五種,實現對流表的增、刪、改操作。
    Idle time-out 流表匹配數據計時器,如果該時間內流表匹配信息還未到達則刪除流表。
    hard time-out 流表項老化時間。一項流表在交換機中存在的時間超過該時間則刪除流表項。
    Priroity 流表項優先級,數字越大越優先。
    Buffer Id 交換機上保存的,發送至控制器請求處理的流表的編號。

    8. ECHO_REQUEST
    控制器和交換機通過 ECHO_REQUEST 和 ECHO_REPLY 報文保持連接

    9. ECHO_REPLY


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM