軟體定義網路實驗記錄⑤–OpenFlow 協議分析和 OpenDaylight 安裝
- 2020 年 10 月 3 日
- 筆記
一、實驗目的
回顧 JDK 安裝配置,了解 OpenDaylight 控制的安裝,以及 Mininet 如何連接;
通過抓包獲取 OpenFlow 協議,驗證 OpenFlow 協議和版本,了解協議內容。
二、實驗任務
Mininet 生成拓撲連接 OpenDaylight,在 Mininet 上通過 ping 抓包驗證 OpenFlow
1.3 協議
三、實驗步驟
- 實驗環境
安裝了 Ubuntu 18.04.5 Desktop amd64 的虛擬機 - 實驗過程
(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 等資訊可以
上面的抓包能夠對應上。