1. 程式人生 > 實用技巧 >實驗 5:OpenFlow 協議分析和 OpenDaylight 安裝

實驗 5:OpenFlow 協議分析和 OpenDaylight 安裝

一、實驗目的

回顧 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-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)啟動 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 等資訊可以
上面的抓包能夠對應上。

如果 wireshark 未安裝,那麼執行下面的命令安裝

$ sudo apt-get install wireshark

四、總結

  • 因為許可權問題無法新建資料夾
    解決方法
  sudo chmod -R 777 path

path 是檔案路徑