第一步:安装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格式:

 from mininet.topo import Topo
from mininet.net import Mininet
from mininet.util import dumpNodeConnections
from mininet.log import setLogLevel,info
from mininet.node import CPULimitedHost
from mininet.node import RemoteController
from mininet.link import TCLink
from mininet.cli import CLI class MyTopo( Topo ): def __init__( self ):
"Create custom topo." # initilaize topology
Topo.__init__( self ) # add hosts and switches
host1 = self.addHost( 'h1' )
host2 = self.addHost( 'h2' )
switch1 = self.addSwitch( 's1' )
switch2 = self.addSwitch( 's2' ) # add links
self.addLink(host1,switch1)
self.addLink(host2,switch2)
self.addLink(switch1,switch2) if __name__=='__main__':
setLogLevel('info')
info( '*** Creating network\n' ) topo=MyTopo()
net=Mininet(topo=topo,controller=None,host=CPULimitedHost,link=TCLink)
net.addController('c0',controller=RemoteController,ip='192.168.80.1',port=6653)
net.start()
CLI(net)

其中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地址。

mininet+floodlight搭建sdn环境并创建简单topo的更多相关文章

  1. 搭建KVM环境——06 创建虚拟机

    若转载请于明显处标明出处:https://www.cnblogs.com/kelamoyujuzhen/p/9071181.html 虚拟机磁盘格式 创建一个raw格式的虚拟机磁盘 [root@Cen ...

  2. SpringCloud系列二:Restful 基础架构(搭建项目环境、创建 Dept 微服务、客户端调用微服务)

    1.概念:Restful 基础架构 2.具体内容 对于 Rest 基础架构实现处理是 SpringCloud 核心所在,其基本操作形式在 SpringBoot 之中已经有了明确的讲解,那么本次为 了清 ...

  3. cocos2dx 3.x版本搭建Mac环境工程(创建一个新的C++工程)百分百可行

    首先第一篇,想学cocos2dx第一步就是搭建环境,第一步搭建不了环境,创建不了工程那一切都是扯淡. 说到mac下安装cocos2d-x想到的模式就是xcode+cocos2d-x.因为我本身就是一个 ...

  4. 怎么搭建python环境?很简单,就几步的事

    现在学习python的人越来越多了,而学习python必备的就是搭建python环境,那么,到底怎么搭建python环境呢? 首先,你需要有安装包,这个去官网下载就可以了,如果不会的话,可以看文章底部 ...

  5. 配置Maven环境并创建简单的web项目步骤

    Maven的介绍 主要包含以下三个内容: 1.POM(Project Object Model):即An xml file(pom.xml):依赖管理.生命周期和插件的需要等都在pom.xml文件中完 ...

  6. premake在Ubuntu和GCC环境下创建简单的C++工程

    由于premake基于lua脚本,为了方便编辑lua脚本,我在emacs24中利用package system安装了lua-mode. 然后创建config.lua文件,填入下面这段,主要来自:htt ...

  7. 测试人员如何搭建Selenium-Grid2环境(参考Java)

    Selenium对于我们进行web自动化测试有很大的帮助,如果要进行大范围的测试覆盖,就不能仅仅在一两台机器上跑了:同样Selenium-Grid也给我们提供了这样的帮助,我们可以借助Selenium ...

  8. Centos 7 下yum搭建lnmp环境(yum安装方式)

    我们都知道linux下安装软件主要有三种方式: 1.源码编译安装,即下载软件源代码,利用gcc g++ make 等编译工具进行编译安装: 此方式的优点:可以指定软件版本,可选择性好:编译时可以手动指 ...

  9. 搭建KVM环境——07 带GUI的Linux上安装KVM图形界面管理工具

    清空yum源缓存,并查看yun源 [root@CentOS2 ~]# yum clean all Loaded plugins: fastestmirror, langpacks Cleaning r ...

随机推荐

  1. 12-Mysql数据库----多表查询

    本节重点: 多表连接查询 符合条件连接查询 子查询 准备工作:准备两张表,部门表(department).员工表(employee) create table department( id int, ...

  2. Hadoop伪分布式集群

    一.HDFS伪分布式环境搭建 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时, ...

  3. 洛谷P2346四子连棋

    题目描述 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋子,7颗黑色棋子,有两个空白地带,任何一颗黑白棋子都可以向上下左右四个方向移动到相邻的空格,这叫行棋一步. 黑白双方交替走棋,任意一方可 ...

  4. C++ 学习笔记之——输入和输出

    在 C++ 中,我们通过调用输入输出流库中的流对象 cin 和 cout 来实现输入和输出. #include <iostream> using namespace std; int ma ...

  5. mysql语法总结

    增: 删: 改: 查: 索引: 建: alter table: sql一些常用的经典语句,最后是select as的用法

  6. Go基础篇【第1篇】: 内置库模块 OS

    os包提供了操作系统函数的不依赖平台的接口.设计为Unix风格的,虽然错误处理是go风格的:失败的调用会返回错误值而非错误码.通常错误值里包含更多信息.os包的接口规定为在所有操作系统中都是一致的.非 ...

  7. HDU 4588 Count The Carries(数学统计)

    Description One day, Implus gets interested in binary addition and binary carry. He will transfer al ...

  8. for循环再探

    摘要:for循环头的组成.for的执行流程 一.for 语句的组成 0. 举个例子 for (int val = 1; val <= 10; ++val) sum += val; 1. 循环头的 ...

  9. DPDK vhost库

    原创翻译,转载请注明出处. vhost库实现了一个用户空间的virtio net server,允许用户直接处理virtio ring队列.换句话说,它让用户可以从VM virtio网络设备读取或写入 ...

  10. PTA实验报告 数组

    (第二张代码均为英红的代码) 题目1:题目名称:数组元素循环右移问题 1. 本题PTA提交列表 2. 设计思路(包括流程图) 将数组内每个位置移动,第2个放第一个,第三个放第二个,以此类推.使用两个循 ...