zoukankan      html  css  js  c++  java
  • 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
    ' )
    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地址

  • 相关阅读:
    msp430入门学习43
    msp430入门学习42
    msp430入门学习41
    msp430入门学习40
    msp430入门学习37
    msp430入门学习36
    msp430入门学习35
    JAVA三大特性之三——多态
    JAVA三大特性之二——继承
    JAVA三大特性之一——封装
  • 原文地址:https://www.cnblogs.com/cing/p/7443076.html
Copyright © 2011-2022 走看看