第一步:安装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. SQL 基础笔记(三):约束

    个人笔记不保证正确. 数据类型是限制我们可以在表里存储什么数据的一种方法.不过,对于许多应用来说, 这种限制实在是太粗糙了.比如,一个包含产品价格的字段应该只接受正数. 但是没有哪种标准数据类型只接受 ...

  2. Daily Scrum 11.01

    全队进展速度很快,11月伊始都完成了初步的工作.交由负责整合工作的毛宇开始调试整合. Member Today's task  Tomorrow's task 李孟 task 616 测试 (活动) ...

  3. [转]Linux UDP严重丢包问题的解决

    测试系统在Linux上的性能发现丢包率极为严重,发210000条数据,丢包达110000之巨,丢包率超过50%.同等情形下Windows上测试,仅丢几条数据.形势严峻,必须解决.考虑可能是因为协议栈B ...

  4. 解决微信小程序配置https不成功问题

    拿到一个微信小程序的项目,需要配置https安全链接(为什么必须使用https不再赘述),预想这个已经很成熟的流程,应该不会有太大问题,结果还真是出乎意料,竟然掉进一个大坑,折腾好久. 申请证书配置的 ...

  5. Hibernate常用方法之_修改

    1.使用session的saveOrUpdate方法 public void updateUser(User user){ Session session = null; Transaction tr ...

  6. request.getParameterMap() 获取表单提交的键值对 并且 也能获取动态表单的key

    Map<String,String[]> map = request.getParameterMap();Set<String> keys = map.keySet(); 获取 ...

  7. 微服务日志监控与查询logstash + kafka + elasticsearch

    使用 logstash + kafka + elasticsearch 实现日志监控 https://blog.csdn.net/github_39939645/article/details/788 ...

  8. Beats数据采集

    Beats数据采集 Beats是elastic公司的一款轻量级数据采集产品,它包含了几个子产品: packetbeat(用于监控网络流量). filebeat(用于监听日志数据,可以替代logstas ...

  9. Luogu3959 NOIP2017宝藏(状压dp)

    按层dp,f[i][j]表示已扩展i子集的节点当前在第j层的最小代价,预处理点集间距离即可. #include<iostream> #include<cstdio> #incl ...

  10. [洛谷P2584][ZJOI2006]GameZ游戏排名系统

    题目大意:同[洛谷P4291][HAOI2008]排名系统(双倍经验) 题解:略 卡点:无 C++ Code: #include <cstdio> #include <map> ...