*注:這是我在學習時整理的筆記,包含我遇到的問題已經一些需要注意的點。轉載請標明出處並附上原文連接,謝謝!http://blog.csdn.net/sherkyoung/article/details/38405907
1 mininet+FlowVisor+ODL
將mininet、FlowVisor和ODL連接起來進行實驗
1.1 mininet
Mininet作爲一個輕量級軟定義網絡研發和測試平臺,其主要特性包括:
1)靈活性。可通過軟件的方式簡單、迅速地創建一個用戶自定義的網絡拓撲,縮短開發測試周期,支持系統級的還原測試,且提供Python API,簡單易用;
2)可移植性。Mininet支持OpenFlow、OVS等軟件定義網絡部件,在Mininet上運行的代碼可以輕鬆移植到支持OpenFlow的硬件設備上;
3)可擴展性。在一臺電腦上模擬的網絡規模可以輕鬆擴展到成百上千個節點;
4)真實性。模擬真實網絡環境,運行實際的網絡協議棧,實時管理和配置網絡,可以運行真實的程序,在Linux上運行的程序基本上都可以在Mininet上運行,如Wireshark;
5)共享性。實現的原型系統可共享,任何人都可以在自己的筆記本上運行和開發自己的系統。
1.1.1安裝
mininet的安裝有三種方法一種是下載mininet虛擬機鏡像文件安裝一個虛擬機,一種是下載源代碼進行編譯安裝,最後一種是通過命令行安裝。這裏選用第三種安裝方式:輸入如下命令進行安裝:
$sudo apt-get install mininet
如果之前安裝過openvswitch將會報錯,這是只需要輸入以下命令刪除ovs殘存文件即可:
$sudo rm /usr/local/bin/ovs*
解決完錯誤之後再輸入安裝mininet的命令便不再報錯,但是使用mn創建命令的時會在報錯,提示6633端口已被佔用。這是因爲mininet安裝完畢之後會自行啓動,輸入以下命令關閉服務:
$sudo service openvswitch-controller stop
Miniet同時也是開機自啓動,關閉自啓動:
$sudo update-rc.d openvswitch-controller disable
這是在用mininet的創建命令就沒有任何問題了:
$sudo mn --controller,ip=172.168.1.2,port=6633
(此處的IP地址運行floodlight控制器的機器的IP地址,請根據自己的情況自行修改)
1.1.2 mininet啓動
mininet必須用root身份啓動:
$sudo mn
這樣使用默認方式創建虛擬網絡,默認情況下創建一個交換機(s1),兩個主機(h1,h2)。當mininet指定或不指定遠程控制器的時候,h1和h2之間都是可以ping通的,如圖:
1.1.3 Mininet連接到遠程控制器:
輸入如下命令啓動控制器
$sudo mn --controller=remote,ip=192.168.119.130,port=6633
注意此處的IP爲已經啓動的odl控制器所在主機的ip地址,端口號是控制器默認的web端口。
下圖爲mininet連接到遠程控制器時,瀏覽器登錄http:\\localhost:8080\顯示的網絡拓撲結構:
1.1.4 Mininet命令:
(1)設置拓撲
--topo用於指定OpenFlow的網絡拓撲。Mininet已經爲大多數應用實現了五種類型的OpenFlow網絡拓撲,分別爲:tree、single、reversed、linear和minimal。默認情況下,創建的是minimal拓撲。
設置自定義拓撲
--custom:在上述已有拓撲的基礎上,Mininet支持自定義拓撲,使用一個簡單的Python API即可,例如導入自定義的mytopo:
$sudo mn --custom ~/mininet/custom/topo-2sw-2host.py –topo mytopo --test pingall
(2)設置交換機
--switch:可以有三類openflow交換機,分別是:kernel內核狀態、user用戶狀態以及ovsk Open vSwith狀態。當然kerner和ovsk的性能和吞吐量會高一些,通過運行命令:
$sudo mn –switch ovsk –test iperf
可以進行iperf的測試結果得知。
(3)設置控制器
--controller:通過參數設置的控制器可以是Mininet默認的控制器、NOX或者虛擬機之外的遠端控制器,如Floodlight、POX以及NOX等控制器都可以使用,指定遠端控制器的方法如下:
$sudo mn --controller=remote,ip=[controller IP],port=[controllerlistening port]
(4)設置MAC地址
--mac:通過設置MAC地址的作用是增強設備MAC地址的易讀性,即將交換機和主機的MAC地址設置爲一個較小的、唯一的、易讀的ID,以便在後續工作中減少對設備識別的難度。
(5)設置主機類型
--host:主機類型只要有兩種類型,分別是默認的Host類型以及CPULimitedHost類型,其中CPULimitedHost類型用於將CPU的部分資源分配給虛擬主機使用。
(6)設置鏈路屬性
--link:鏈路屬性可以是默認Link及TCLink。將鏈路類型指定爲tc後,可以進一步指定具體參數。具體參數如下命令顯示:
--link tc,bw=<>,delay=<>,loss=<>,max_que_size=<>
bw表示鏈路帶寬,使用 Mb/s爲單位表示;時延delay以字符串形式表示,如'5ms'、 '100us'、'1s';loss表示數據丟包率的百分比,用0到100之間的一個百分數表示;max_queue_size表示最大排隊長度,使用數據包的數量表示。
創建Mininet拓撲成功後,一般可用nodes、dump、net等基本命令查看詳細信息。
常用CLI命令 |
功能 |
dump |
打印節點信息 |
gterm |
給定節點上開啓gnome‐terminal。 |
xterm |
給定節點上開啓xterm |
intfs |
列出所有的網絡接口 |
iperf |
兩個節點之間進行簡單的iperf TCP測試 |
iperfudp |
兩個節點之間用指定帶寬udp進行測試 |
net |
顯示網絡連接情況 |
noecho |
運行交互式窗口,關閉迴應(echoing) |
pingpair |
在前兩個主機之間互ping測試 |
source |
從外部文件中讀入命令 |
dpctl |
在所有交換機上用dptcl 執行相關命令,本地爲tcp 127.0.0.1:6634 |
link |
禁用或啓用兩個節點之間的鏈路 |
nodes |
列出所有的節點信息 |
pingall |
所有host節點之間互ping |
py |
執行python表達式 |
sh |
運行外部shell命令 |
quit/exit |
退出 |
(7)其他注意:mininet遠程連接FlowVisor之後如果需要斷開連接,直接在mininet>命令行輸入quit或exit即可。但有時會出現即便退出mininet但是仍然顯示有ovs連接到FlowVisor,這時只需要輸入以下命令刪除一下mn的緩存配置信息即可:
$sudo mn -c
1.2 OpenDayLight
這裏的ODL(OpenDayLight)指的是ODL中的Controller這一源碼包。不包含其他的如openflowjava等。
1.2.1 ODL安裝、啓動
l 獲取ODL代碼
$git clone https://git.opendaylight.org/gerrit/p/controller.git
l 編譯Controller:
$cd controller/opendaylight/distribution/opendaylight
$mvn clean install
l 執行controller:
$cd controller/opendaylight/distribution/opendaylight/target/distributions.oepndaylight-OSGIpackage/opendaylight
$./run.sh
這樣每次啓動controller需要cd目錄十分麻煩。可以自己寫一個啓動腳本來管理ODL控制器的運行:
$cd controller
$vim odlStart.sh
輸入以下內容:
#!/bin/bash ./opendaylight/distribution/opendaylight/target/distribution.opendaylight-osgipackage/opendaylight/run.sh |
文件創建完畢之後需要修改權限將其改爲可執行文件:
$sudo chmod a+x odlStart.sh
這樣每次只要執行odlStart.sh文件即可運行ODL Controller了。
啓動ODL Controller之後可以從網頁登錄http:\\localhost:8080進行驗證:
1.4 聯機實驗
FlowVisor作爲透明的中間層,對於mininet來說FlowVisor就是控制器,而對於ODL控制器來說FlowVisor就是OVS。
1.4.1 mininet連接FlowVisor
(1)修改FlowVisor配置文件
FlowVisor的配置文件是/etc/flowvisor/config.json圖中標出的兩個修改後的值,一個是監聽端口6666,原默認值爲6633;一個是web端口8888,源默認端口是8081。這樣修改是爲了防止以後與控制器端口混淆。
(2)啓動FlowVisor
可以採用以下命令啓動FlowVisor:
$cd flowvisor
$nohup flowvisor /etc/flowvisor/config.json > /etc/null &
以上的命令可以讓FlowVisor後臺啓動並且不再控制檯輸出任何信息
(1)啓動mininet:
輸入以下命令:
$sudo mn --controller=remote,ip=192.168.119.129,port=6666
注:這裏的端口是監聽端口,而不是web端口(8888),web端口在FlowVisor查看信息時會經常使用到。
這時新開一個控制檯輸入如下命令,查看datapaths信息,可以看到mininet虛擬的交換機已經連接到FlowVisor上:
$fvctl -p 8888 list-datapaths
注意這裏的端口號是web端口號
再輸入以下命令查看6666監聽端口情況:
$netstat -an | grep 6666
這時在返回mininet中使用ping命令,用h1 ping h2,就會發現兩者已經無法ping通而且無法使用mininet的link命令建立h1與h2之間的鏈路:
4.4.2 FlowVisor連接控制器
這裏爲了更提高實驗的可靠性,我運行了兩個控制器:floodlight和opendaylight。
(1)創建切片
使用FlowVisor創建切片,這裏兩個ip分別對應兩個不同主機的控制器,192.168.119.130對應的是ODL控制器,192.168.5.79對應的是Floodlight控制器。
Opendaylight和floodlight默認的端口都是6633,這裏並未做修改
(2)查看slice信息
(3)創建flowspace
(4)驗證連接
在opendaylight控制器所在主機打開控制檯輸入以下命令:
$netstat -an | grep 6633
在floodlight控制器所在的主機打開控制檯輸入以下命令:
$netstat -an
(5)登錄控制器頁面
此時登錄控制器頁面查看連接設備信息只能看到交換機信息,需要在mininet中執行pingall命令,才能顯示主機信息:
然後分別打開控制器頁面查看信息:
Opendaylight:
Floodlight:
問題:floodlight中無法正常顯示主機信息