mininet+floodlight搭建sdn環境並創建簡單topo


第一步:安裝git

sudo apt-get update

sudo apt-get install git

測試git是否安裝成功:

git

第二步:安裝mininet

1.獲取mininet最新源碼樹

git clone git://github.com/mininet/mininet        會在當前目錄下創建mininet文件夾

2.安裝mininet

cd mininet/util       進入mininet目錄

安裝:【一定要加-a,這樣才能保證mininet所有的組件和依賴都能安裝上】

./install.sh  -a

若出現以下錯誤,正確的解決辦法應該是重裝mininet,也就是執行rm -rf mininet,將mininet整個文件夾都刪除,然后再執行上面的重裝命令

3.測試mininet

如果mininet正確安裝會出現enjoy mininet字樣,即

則說明安裝成功

再次打開mininet,可發現已成功安裝如下:

執行命令pingall可以查看連接情況。

sudo mn就是默認進入mininet自帶拓撲結構的網絡環境。

 

備注:在mininet中為什么沒有添加流表的時候兩台主機會ping通,原因在於控制器中的二層自學習功能,因為這是控制器可以通過下發流表的方式來使交換機產生流表,從而兩台機器ping通,這時如果你關閉了控制器,你會發現兩台主機就ping不同了。

 

第三步:安裝floodlight

1.

sudo apt-get update

2.安裝jdk和eclipse

sudo apt-get install build-essential default-jdk ant python-dev eclipse

3.下載最新floodlight源碼樹

git clone git://github.com/floodlight/floodlight.git

4.進入floodlight目錄

git submodule init

git submodule update

ant

第一次執行以上命令結果如下:

5.首次運行floodlight需執行如下命令

sudo mkdir /var/lib/floodlight

sudo chmod 777 /var/lib/floodlight

6.運行floodlight

sudo java -jar target/floodlight.jar

運行成功后在瀏覽器輸入localhost:8080/ui/pages/index.html,會出現如下界面

 

第四步:mininet和floodlight都在虛擬機內搭建拓撲

 

1.運行floodlight

sudo java -jar target/floodlight.jar      打開floodlight正常運行

2.創建簡單topo並運行

執行sudo mn --topo single,3 --mac --switch ovsk --controller remote,ip=127.0.0.1,port=6653,這里是創建了3個主機,一個交換機,一個控制器,ip是誰的ip?還未解。。這個ip是floodlight控制器所在的主機的ip地址,也就是ipconfig后得到的ip地址,port是控制器的端口號,這里在打開floodlight后,可以看到這樣一條信息

floodlight控制器會在0.0.0.0:6653監聽Openflow的switch。

發現floodlight會以6653端口號來監聽交換機,所以這里端口號一定要是6653,否則會顯示下面的連不上控制器的信息:

在正常連接后會是下面的信息:

正常之后執行ping可以正常連接如上。

3.利用python創建topo並運行

簡單topo.py格式:

 1 from mininet.topo import Topo
 2 from mininet.net import Mininet
 3 from mininet.util import dumpNodeConnections
 4 from mininet.log import setLogLevel,info
 5 from mininet.node import CPULimitedHost
 6 from mininet.node import RemoteController
 7 from mininet.link import TCLink
 8 from mininet.cli import CLI
 9 
10 class MyTopo( Topo ):
11     
12     def __init__( self ):
13         "Create custom topo."
14 
15          # initilaize topology   
16         Topo.__init__( self )
17 
18         # add hosts and switches
19         host1 = self.addHost( 'h1' )
20         host2 = self.addHost( 'h2' )
21         switch1 = self.addSwitch( 's1' )
22         switch2 = self.addSwitch( 's2' )
23 
24 
25         # add links
26         self.addLink(host1,switch1)
27         self.addLink(host2,switch2)
28         self.addLink(switch1,switch2)
29 
30 
31 if __name__=='__main__':
32     setLogLevel('info')
33     info( '*** Creating network\n' )
34     
35     topo=MyTopo()
36     net=Mininet(topo=topo,controller=None,host=CPULimitedHost,link=TCLink)
37     net.addController('c0',controller=RemoteController,ip='192.168.80.1',port=6653)
38     net.start()
39     CLI(net)
View Code

其中ip應該改成本機ip。

在topo.py的目錄下執行python topo.py,如果正確的話能看到以下信息:

exit退出之后再執行python topo.py會出現如下錯誤:

原因:因為在開啟topo的時候mininet還會開啟其他的一些組件,導致退出topo的時候仍在占用。

解決辦法是:

1.執行sudo mn,會出現如下問題:

執行pkill -9 -f "sudo mnexec",再次執行python topo.py,發現正確運行。

2.退出topo后執行mn -c,再次執行python topo.py,就可以正確運行。

 

第五步:mininet和floodlight分在兩個主機上運行

1.將floodlight源碼放進eclipse工程中

2.打開Main主函數,run as以java se的方式運行

正確運行結果如下:

3.打開虛擬機,建一個topo,【ip地址一定是當前floodlight所在主機的ip】,正確創建topo並ping通之后結果如下:

IP地址127.0.0.1和本機IP的選擇:

1.如果在虛擬機的mininet中創建topo時使用127.0.0.1,在本機中運行floodlight,會發現創建topo時出現如下無法連接控制器的信息:

此時再在虛擬機中跑floodlight,【此時本機和虛擬機同時在跑floodlight,發現兩者是互不干擾的,雖然監聽端口相同,我覺得原因應該是他倆相當於在兩個不同的主機上跑】,然后再次運行剛才的topo,發現正確創建。

2.如果在虛擬機的mininet中創建topo時使用本機IP,在本機中運行floodlight,會發現topo正確創建,且本機floodlight可以獲取到topo的相關信息。

綜上所述,127.0.0.1是回環地址,也就是只在當前主機中有效,無論是虛擬主機還是實際主機,都只能在本主機中有效,要想虛擬主機認識實際主機,需要設置實際主機的IP地址

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM