平台環境說明:
Cpu:Intel Core 2 Duo T6570
Mem:4.00GB
Os :Ubuntu 14.04
1.Floodlight
Floodlight是一個比較成熟的sdn控制器實現,其中opendaylight項目中也采用了它的很多實現方法,官方網站:http://www.projectfloodlight.org/floodlight/。本文采用它作為控制器,采用包含mininet的虛擬機作網絡拓撲,兩者結合模擬顯示網絡。
Floodlight安裝:
A. $ sudo apt-get install build-essential default-jdk ant python-dev //由於控制器由java實現,故需要一些java環境需要先安裝上;
B. $ git clone git://github.com/floodlight/floodlight.git //然后git下載源碼,如果沒有git,需要安裝:sudo apt-get install git ;
C. $ cd floodlight
D. $ ant
E. $ java -jar target/floodlight.jar //然后依次完成命令,就會將控制器打開,這時輸入網址:http://localhost:8080/ui/index.html即可看到控制器的ui界面,此時控制器未檢測到網絡拓撲(switchs hosts個數都是0)
2.Mininet
Mininet為研究人員提供輕量級的網絡拓撲實現,其支持包擴openflow協議的switch,支持可打開終端界面的host等等。官方主頁:http://mininet.org/,其中Mininet集成於一個虛擬機中(其中還集成了wireshark),官方提供了幾個可下載版本:https://github.com/mininet/mininet/wiki/Mininet-VM-Images本文采用的是Ubuntu14.04版本。本文采用的是Ubuntu14.04版本。
本文采用的是Ubuntu14.04版本,解壓縮取得其中.ovf文件。
Mininet安裝
A. $ sudo apt-get install virtualbox //如果未安裝虛擬機軟件,先按上。
B. $ su - root
C. # virtualbox //以root身份打開,這是參考網上的,普通用戶貌似有bug
D. 在virtualbox圖形界面:file ->import virtual appliance
導入mininet的.ovf文件,直接就算裝好了。。。。。。
初始用戶名密碼均為mininet(此時可以激活一下root權限),關於mininet軟件的操作相見官方主頁:http://mininet.org/walkthrough/
3.平台整合
將floodlight,virtualbox等軟件啟動完畢后,可在實體機上ssh登錄至虛擬機實現各種操作:
A.$ ifconfig //可於實體機虛擬機分別執行取得pc-ip,vm-ip
B.$ ssh -X root@vm-ip //-X表示X11轉發,這樣可以出現wireshark圖形界面
C.$ wireshark & //在實體機調出了vm中帶有的支持openflow的wireshark,可開始對eth0口抓包ofp協議
D.$ sudo mn --controller=remote,ip=pc-ip,port=6633 //將mininet連接上遠程controller(floodlight,此時默認監聽於實體機的6633端口),此時mininet將默認創建一個switch,兩個hosts。
I.此時可見wireshark中出現ofp數據,說明floodlight與mininet正用openflow協議通信。
II.此時打開http://localhost:8080/ui/index.html可見控制器已發現下層網絡結構中的switch與host。
III.此時在mininet中pingall,發現全通,floodlight控制器默認使交換機全通。
4.下發流表
Floodlight將自己的API通過Rest Api的形式向外暴露,關於Rest Api,簡單來講,就是講程序的API封裝成為通用的http GET/PUT的形式,這樣的話無需關注程序實現細節,通過發送http請求即可完成API操作。
所以,我們可以通過Floodlight的Restful api來向Floodlight請求各種信息,包括交換機狀態,能力,拓撲等等,而static flow pusher這套機制則是通過Restful api來進行流表的操作,包括添加,刪除流表等等。
A.生成流表
$ sudo curl -d {“switch”: “00:00:00:00:00:00:00:01″, “name”:”flow-mod-1″, “cookie”:”0″, “priority”:”32768″, “ingress-port”:”1″,”active”:”true”, “actions”:”output=1″}’ http://<pc_ip>:8080/wm/staticflowentrypusher/json //這里將入口為1的數據包都發回1,即將連在1口的host隔絕。此時在mn中pingall發現不通了。
B.查看流表
$ sudo curl http://<pc_ip>:8080/wm/staticflowentrypusher/list/all/json
C.刪除流表
$ sudo curl -X DELETE -d ‘{“name”:”flow-mod-1″}’ http://<pc_ip>:8080/wm/staticflowentrypusher/json //此時發現又能都ping通,這些過程中wireshark中都可見openflow協議交互流程,提供了很好的研究環境。