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地址

 

posted on 2017-08-28 11:39  二十年后20  阅读(3587)  评论(2编辑  收藏  举报

导航