實驗 5 : OpenFlow 協議分析和 和 OpenDaylight 安裝
一、實驗目的
回顧 JDK 安裝配置,瞭解 OpenDaylight 控制的安裝,以及 Mininet 如何連線;通過抓包獲取 OpenFlow 協議,驗證 OpenFlow 協議和版本,瞭解協議內容。
二、實驗任務
Mininet 生成拓撲連線 OpenDaylight,在 Mininet 上通過 ping 抓包驗證 OpenFlow1.3 協議
三、實驗步驟
1. 實驗環境
安裝了 Ubuntu 18.04.5 Desktop amd64 的虛擬機器
2. 實驗過程
(1)安裝 OpenDaylight 控制器 (提供兩個版本)
由於 OpenDaylight 是基於 Java 執行的,因此需要先安裝 jdk 8 環境( 版本不宜過高)。
$ sudo mkdir /usr/local/java```
$ sudo tar -zxvf jdk-8u211-linux-x64.tar.gz //需將 jdk 壓縮包提前放在相應目錄下
$ gedit ~/.bashrc
在檔案末尾追加內容如下:
$ export JAVA_HOME=/usr/local/java/jdk1.8.0_211
$ 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 版本
$ tar -zxvf distribution-karaf-0.4.4-Beryllium-SR4.tar.gz //Beryllium 版本
執行 karaf(不能用超級許可權)
$ ./distribution-karaf-0.6.4-Carbon/bin/karaf //Carbon 版本 $ ./distribution-karaf-0.4.4-Beryllium-SR4/bin/karaf //Beryllium 版本
第一次啟動需安裝外掛,這裡兩個版本開始有所區別
Carbon 版本
$ feature:install odl-restconf odl-l2switch-switch-ui odl-openflowplugin-flow-services-
ui odl-mdsal-apidocs odl-dluxapps-applications
Beryllium 版本
$ feature:install odl-restconf odl-l2switch-switch-ui odl-openflowplugin-all odl-mdsal-
apidocs odl-dlux-core odl-dlux-node odl-dlux-yangui
至此 ODL 控制器啟動完畢
(2)啟動 t Mininet 虛擬機器,生成一個最簡拓撲並連線 OpenDaylight
連線前應確認 Mininet 和 OpenDaylight 的網路互通,如果是安裝在同一臺虛擬機器上,那麼可以忽略。
執行命令生成拓撲並連線控制器:
$ sudo mn --switch ovs,protocols=OpenFlow13 --controller=remote,ip=127.0.0.0,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 不下發流表,直接告知交換機如何處理這一個資料包。
用 OVS 命令檢視交換機中確實存在相應版本的流表,cookie、priority 等資訊可以上面的抓包能夠對應上。
如果 wireshark 未安裝,那麼執行下面的命令安裝。
$ sudo apt-get install wireshark
四、實驗心得
做這次實驗的時候,剛開始就遇到了麻煩。總是顯示檔案不存在、路徑不存在等等問題,後來通過向同學求助發現,原來是忘記去指導書末尾的連結下載安裝包了。順利下載並移到虛擬機器上後,開始的一段準備工作就變得順利了起來。
此外,還要注意的是ip地址的設定和java的版本。需要根據具體的下載情況對bashrc裡最後四行的版本號做出修改,不能直接複製貼上。