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格式:
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的更多相关文章
- 搭建KVM环境——06 创建虚拟机
若转载请于明显处标明出处:https://www.cnblogs.com/kelamoyujuzhen/p/9071181.html 虚拟机磁盘格式 创建一个raw格式的虚拟机磁盘 [root@Cen ...
- SpringCloud系列二:Restful 基础架构(搭建项目环境、创建 Dept 微服务、客户端调用微服务)
1.概念:Restful 基础架构 2.具体内容 对于 Rest 基础架构实现处理是 SpringCloud 核心所在,其基本操作形式在 SpringBoot 之中已经有了明确的讲解,那么本次为 了清 ...
- cocos2dx 3.x版本搭建Mac环境工程(创建一个新的C++工程)百分百可行
首先第一篇,想学cocos2dx第一步就是搭建环境,第一步搭建不了环境,创建不了工程那一切都是扯淡. 说到mac下安装cocos2d-x想到的模式就是xcode+cocos2d-x.因为我本身就是一个 ...
- 怎么搭建python环境?很简单,就几步的事
现在学习python的人越来越多了,而学习python必备的就是搭建python环境,那么,到底怎么搭建python环境呢? 首先,你需要有安装包,这个去官网下载就可以了,如果不会的话,可以看文章底部 ...
- 配置Maven环境并创建简单的web项目步骤
Maven的介绍 主要包含以下三个内容: 1.POM(Project Object Model):即An xml file(pom.xml):依赖管理.生命周期和插件的需要等都在pom.xml文件中完 ...
- premake在Ubuntu和GCC环境下创建简单的C++工程
由于premake基于lua脚本,为了方便编辑lua脚本,我在emacs24中利用package system安装了lua-mode. 然后创建config.lua文件,填入下面这段,主要来自:htt ...
- 测试人员如何搭建Selenium-Grid2环境(参考Java)
Selenium对于我们进行web自动化测试有很大的帮助,如果要进行大范围的测试覆盖,就不能仅仅在一两台机器上跑了:同样Selenium-Grid也给我们提供了这样的帮助,我们可以借助Selenium ...
- Centos 7 下yum搭建lnmp环境(yum安装方式)
我们都知道linux下安装软件主要有三种方式: 1.源码编译安装,即下载软件源代码,利用gcc g++ make 等编译工具进行编译安装: 此方式的优点:可以指定软件版本,可选择性好:编译时可以手动指 ...
- 搭建KVM环境——07 带GUI的Linux上安装KVM图形界面管理工具
清空yum源缓存,并查看yun源 [root@CentOS2 ~]# yum clean all Loaded plugins: fastestmirror, langpacks Cleaning r ...
随机推荐
- [leetcode-644-Maximum Average Subarray II]
Given an array consisting of n integers, find the contiguous subarray whose length is greater than o ...
- C#的internal访问修饰符
文章:C# 访问修饰符internal的访问范围误区释疑 internal访问修饰符限定的类,只能在本程序集中访问.
- Win10 1803安装Ubuntu1804子系统
1.win10应用商店选择Ubuntu1804安装 点击打开会提示https://docs.microsoft.com/zh-cn/windows/wsl/install-win10 2.用管理员po ...
- 【EasyNetQ】- 控制队列名称
在为队列生成名称时,EasyNetQ的默认行为是使用消息类型名称并将其附加到订阅ID.例如PartyInvitation,命名空间中的消息类型EasyNetQ.Tests.Integration将使用 ...
- [剑指Offer] 9.变态跳台阶
题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. [思路1]每个台阶都有跳与不跳两种可能性(最后一个台阶除外),最后一个台阶必 ...
- post 中文乱码处理 接受的编码--->解码成字节数组(无任何编码形式)----->编码成想要的格式
- LeetCode--Factorial Trailing Zeroes(注意)
Given an integer n, return the number of trailing zeroes in n!. 问题描述:给出一个正整数n,计算n!结构后面有几个0.要求:在多项式时间 ...
- 2017 Multi-University Training Contest - Team 2 TrickGCD(组合数学)
题目大意: 给你一个序列An,然后求有多少个序列Bn 满足Bi<=Ai,且这个序列的gcd不为1 题解: 考虑这样做 枚举一个因子k,然后求出有多少个序列的gcd包含这个因子k 然后把结果容斥一 ...
- Augmenting Path Algorithm : 一般图最大匹配
算法原理详见 http://www.csie.ntnu.edu.tw/~u91029/Matching.html orz 带花树很神奇,挖坑最大权匹配 #include <iostream> ...
- 安全警告——“Windows已经阻止此软件因为无法验证发行者”解决办法
步骤:打开IE工具-->Internet选项-->安全-->自定义级别 -->找到ActiveX 控件和插件,按照图里进行配置.