實驗 5 :OpenFlow 協議分析和 OpenDaylight 安裝
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-8u211-linux-x64.tar.gz $ 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 版本
(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 拓撲建立前開啟抓包。
安裝:
sudo apt-get install wireshark
HELLO——控制器與交換機互相傳送 Hello 訊息,告訴對方自己能夠支援的OpenFlow 版本,向下相容雙方都能夠相容的版本,建立後續的通訊。
FEATURES_REQUEST——控制器向交換機要求特徵資訊。
FEATURES_REPLY——交換機會送特徵資訊。
SET CONFIG——控制器向交換機下發兩個配置,一個是 flags,指示如何處理IP 分片;另一個是 Miss send length,指示交換機遇到無法處理的資料包時,向控制器傳送訊息的最大位元組數。
PACKET IN——交換機查詢流表,發現沒有匹配條目時,或有匹配條目但是對應的 action 是 OUTPUT=CONTROLLER 時,向控制器傳送訊息 PACKETIN 訊息,前者資料包會被放到交換機快取中等待處理,後者不會。
PACKET OUT 和 FLOW MOD——控制器接收到交換機 PACKET IN 訊息後的響應方式有兩種,FLOW MOD 下發流表,告知交換機匹配項(MATCH)和對應的動作(ACTION),去處理這一類資料包;PACKET OUT 不下發流表,直接告知交換機如何處理這一個資料包。