軟體定義網路實驗記錄⑤–OpenFlow 協議分析和 OpenDaylight 安裝

  • 2020 年 10 月 3 日
  • 筆記

一、實驗目的
回顧 JDK 安裝配置,了解 OpenDaylight 控制的安裝,以及 Mininet 如何連接;
通過抓包獲取 OpenFlow 協議,驗證 OpenFlow 協議和版本,了解協議內容。
二、實驗任務
Mininet 生成拓撲連接 OpenDaylight,在 Mininet 上通過 ping 抓包驗證 OpenFlow
1.3 協議
三、實驗步驟

  1. 實驗環境
    安裝了 Ubuntu 18.04.5 Desktop amd64 的虛擬機
  2. 實驗過程
    (1)安裝 OpenDaylight 控制器
    由於 OpenDaylight 是基於 Java 運行的,因此需要先安裝 jdk 8 環境
$ sudo mkdir /usr/local/java
$ sudo tar -zxvf jdk-8u261-linux-x64.tar.gz //需將 jdk 壓縮包提前放在相應目錄下
$ gedit ~/.bashrc

    在文件末尾追加內容如下:

$ export JAVA_HOME=/usr/local/java/jdk1.8.0_261
$ export JRE_HOME=${JAVA_HOME}/jre
$ export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
$ export PATH=${JAVA_HOME}/bin:$PATH

    保存退出,然後運行命令:

$ source ~/.bashrc
$ java -version //驗證安裝版本

版本如下:

    解壓安裝

$ tar -zxvf distribution-karaf-0.6.4-Carbon.tar.gz //Carbon 版本

    運行 karaf(不能用超級許可權)

$ ./distribution-karaf-0.6.4-Carbon/bin/karaf //Carbon 版本

    第一次啟動需安裝插件

$ feature:install odl-restconf odl-l2switch-switch-ui odl-openflowplugin-flow-servicesui odl-mdsal-apidocs odl-dluxapps-applications//Carbon 版本

至此 ODL 控制器啟動完畢

(2)啟動 Mininet 虛擬機,生成一個最簡拓撲並連接 OpenDaylight
連接前應確認 Mininet 和 OpenDaylight 的網路互通,如果是安裝在同一台虛擬機
上,那麼可以忽略。
運行命令生成拓撲並連接控制器:

$ sudo mn --switch ovs,protocols=OpenFlow13 --controller=remote,ip=[此處填入控制器所在
虛擬機的 IP],port=6633


(3)Wireshark 抓包分析 OpenFlow 1.3
sudo wireshark 命令開啟 wireshark,選擇 any,抓取所有數據包。
為了能夠抓到控制器和交換機最初的交互,應在 Mininet 拓撲創建前開啟抓包。
查看抓包結果,利用 openflow_v4 過濾出 OpenFlow 1.3 協議,可以看到 OpenFlow
協議下,交換機和控制器的交互過程。
HELLO——控制器與交換機互相發送 Hello 消息,告訴對方自己能夠支援的
OpenFlow 版本,向下兼容雙方都能夠兼容的版本,建立後續的通訊。
FEATURES_REQUEST——控制器向交換機要求特徵資訊。
FEATURES_REPLY——交換機會送特徵資訊。
SET CONFIG——控制器向交換機下發兩個配置,一個是 flags,指示如何處理
IP 分片;另一個是 Miss send length,指示交換機遇到無法處理的數據包時,
向控制器發送消息的最大位元組數。
PACKET IN——交換機查找流表,發現沒有匹配條目時,或有匹配條目但是對
應的 action 是 OUTPUT=CONTROLLER 時,向控制器發送消息 PACKET
IN 消息,前者數據包會被放到交換機快取中等待處理,後者不會。
PACKET OUT 和 FLOW MOD——控制器接收到交換機 PACKET IN 消息後的響應
方式有兩種,FLOW MOD 下發流表,告知交換機匹配項(MATCH)和對應的
動作(ACTION),去處理這一類數據包;PACKET OUT 不下發流表,直接告知
交換機如何處理這一個數據包。



下面的 PACKET OUT 有兩個動作,對控制器來的消息轉發到 1 和 2 埠

下面的 FLOW MOD 下發了兩條流表,Cookie 不一樣


用 OVS 命令查看交換機中確實存在相應版本的流表,cookie、priority 等資訊可以
上面的抓包能夠對應上。