一、實(shí)驗(yàn)?zāi)康?/strong>
回顧 JDK 安裝配置,了解 OpenDaylight 控制的安裝,以及 Mininet 如何連接;通過抓包獲取 OpenFlow 協(xié)議,驗(yàn)證 OpenFlow 協(xié)議和版本,了解協(xié)議內(nèi)容。
二、實(shí)驗(yàn)任務(wù)
Mininet 生成拓?fù)溥B接 OpenDaylight,在 Mininet 上通過 ping 抓包驗(yàn)證 OpenFlow1.3 協(xié)議。
三、實(shí)驗(yàn)步驟
1. 實(shí)驗(yàn)環(huán)境:安裝了 Ubuntu 18.04.5 Desktop amd64 的虛擬機(jī)
2. 實(shí)驗(yàn)過程
(1)安裝 OpenDaylight 控制器(提供兩個(gè)版本)
由于 OpenDaylight 是基于 Java 運(yùn)行的,因此需要先安裝 jdk 8 環(huán)境(版本不宜過高)。
$ sudo mkdir /usr/local/java
$ sudo tar -zxvf jdk-8u211-linux-x64.tar.gz
//需將 jdk 壓縮包提前放在相應(yīng)目錄下

$ gedit ~/.bashrc
在文件末尾追加內(nèi)容如下:
$ 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

保存退出,然后運(yùn)行命令:
$ source ~/.bashrc
$ java -version //驗(yàn)證安裝版本

解壓安裝,運(yùn)行 karaf(不能用超級權(quán)限),第一次啟動(dòng)需安裝插件:
//Carbon 版本
$ tar -zxvf distribution-karaf-0.6.4-Carbon.tar.gz
$ ./distribution-karaf-0.6.4-Carbon/bin/karaf
$ feature:install odl-restconf odl-l2switch-switch-ui odl-openflowplugin-flow-services ui odl-mdsal-apidocs odl-dluxapps-applications
//Beryllium 版本
$ tar -zxvf distribution-karaf-0.4.4-Beryllium-SR4.tar.gz
$ ./distribution-karaf-0.4.4-Beryllium-SR4/bin/karaf
$ feature:install odl-restconf odl-l2switch-switch-ui odl-openflowplugin-all odl-mdsal apidocs odl-dlux-core odl-dlux-node odl-dlux-yangui

至此 ODL 控制器啟動(dòng)完畢 。
(2)啟動(dòng) Mininet 虛擬機(jī),生成一個(gè)最簡拓?fù)洳⑦B接 OpenDaylight 連接前應(yīng)確認(rèn) Mininet 和 OpenDaylight 的網(wǎng)絡(luò)互通,如果是安裝在同一臺虛擬機(jī)上,那么可以忽略。運(yùn)行命令生成拓?fù)洳⑦B接控制器:
$ sudo mn --switch ovs,protocols=OpenFlow13 --controller=remote,ip=[此處填入控制器所在虛擬機(jī)的 IP],port=6633

(3)Wireshark 抓包分析 OpenFlow 1.3
sudo wireshark 命令開啟 wireshark,選擇 any,抓取所有數(shù)據(jù)包。
為了能夠抓到控制器和交換機(jī)最初的交互,應(yīng)在 Mininet 拓?fù)鋭?chuàng)建前開啟抓包。查看抓包結(jié)果,利用 openflow_v4 過濾出 OpenFlow 1.3 協(xié)議,可以看到 OpenFlow協(xié)議下,交換機(jī)和控制器的交互過程。



遇到問題待解決!
HELLO——控制器與交換機(jī)互相發(fā)送 Hello 消息,告訴對方自己能夠支持的OpenFlow 版本,向下兼容雙方都能夠兼容的版本,建立后續(xù)的通信。
FEATURES_REQUEST——控制器向交換機(jī)要求特征信息。
FEATURES_REPLY——交換機(jī)會(huì)送特征信息。
SET CONFIG——控制器向交換機(jī)下發(fā)兩個(gè)配置,一個(gè)是 flags,指示如何處理
IP 分片;另一個(gè)是 Miss send length,指示交換機(jī)遇到無法處理的數(shù)據(jù)包時(shí),向控制器發(fā)送消息的最大字節(jié)數(shù)。
PACKET IN——交換機(jī)查找流表,發(fā)現(xiàn)沒有匹配條目時(shí),或有匹配條目但是對應(yīng)的 action 是 OUTPUT=CONTROLLER 時(shí),向控制器發(fā)送消息 PACKETIN 消息,前者數(shù)據(jù)包會(huì)被放到交換機(jī)緩存中等待處理,后者不會(huì)。
PACKET OUT 和 FLOW MOD——控制器接收到交換機(jī) PACKET IN 消息后的響應(yīng)方式有兩種,F(xiàn)LOW MOD 下發(fā)流表,告知交換機(jī)匹配項(xiàng)(MATCH)和對應(yīng)的動(dòng)作(ACTION),去處理這一類數(shù)據(jù)包;PACKET OUT 不下發(fā)流表,直接告知交換機(jī)如何處理這一個(gè)數(shù)據(jù)包。
下面的 PACKET OUT 有兩個(gè)動(dòng)作,對控制器來的消息轉(zhuǎn)發(fā)到 1 和 2 端口。
下面的 FLOW MOD 下發(fā)了兩條流表,Cookie 不一樣。
用 OVS 命令查看交換機(jī)中確實(shí)存在相應(yīng)版本的流表,cookie、priority 等信息可以上面的抓包能夠?qū)?yīng)上。
浙公網(wǎng)安備 33010602011771號