實驗環境
- 虛擬機軟件(vmware workstation)
- 裝有 mininet、python2 的 Ubuntu20.04
實驗目的
- 能夠理解 OpenFlow 協議的工作原理;
- 能夠通過 Wireshark 抓包軟件對 OpenFlow 協議進行分析;
- 能夠使用控制器 RYU 連接交換機,並對控制器與交換機的通信流程進行分析;
實驗內容
- 基礎技能
- 使用 mininet 的可視化工具創建網絡拓撲,完成相關 IP 配置,並實現主機與主機之間的 IP 通信。用抓包軟件 wireshark 獲取控制器與交換機之間的通信數據包。
- 進階技能
- 修改基礎技能中創建的網絡拓撲 python 文件,設置遠程控制器連接,啟動 wireshark 和控制器 RYU,運行 python 文件后,在 wireshark 中查看控制器與交換機的通信流程,對具體消息進行分析。
實驗步驟
-
可視化界面搭建網絡拓撲
在超級用戶模式下,在目錄/mininet/examples 下,運行 miniedit.py 文件
按照拓撲圖,選擇對應的設備進行連接,完成拓撲圖的搭建
-
配置 PC 的 IP 信息
在主機、交換機、控制器上點擊鼠標右鍵,選擇 Properties 即可設置其屬性
-
Wireshark 抓包並分析
在超級用戶下,使用sudo wireshark 命令開啟 wirshark 軟件,點擊“any”,讓其獲取全部的數據包,之后再通過過濾器輸入“openflow_v1”或“openflow_v4”,過濾出 OpenFlowv1.0 或OpenFlowv1.3 的數據報文,進行分析。1. HELLO
HELLO 是使用來協商控制器和交換機之間openflow協議的版本號的消息。
0x01代表版本1,即 openflow1.0
Type類型為 HELLO,表示為02. 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