Mininet学习笔记
2016-03-09 20:13
239 查看
目录
前言
一、安装
1、直接下载Mininet镜像
2、源码安装
3、包安装
4、升级
二、使用
1、启动mininet(需要root权限)
2、cli命令
3、自定义功能
4、其他
三、源码分析
1、让SouceInsight支持Python。
2、目录结构
3、代码流程分析
Mininet学习笔记
Stanford大学NickMcKeown教授领导的研究小组基于LinuxContainer架构,开发出了这套进程虚拟化的平台。在Mininet的帮助下,你可以轻易的在自己的笔记本上测试一个软件定义网络(Software-DefinedNetworks),对基于Openflow、OpenvSwitch的各种协议等进行开发验证,或者验证自己的想法。
最令人振奋的是,所有的代码几乎可以无缝迁移到真实的硬件环境中。在实验室里,一行命令就可以创建一个支持SDN的任意拓扑的网络结构,并可以灵活的进行相关测试,验证了设计的正确后,又可以轻松部署到真实的硬件环境中。目前Mininet已经作为官方的演示平台对各个版本的Openflow协议进行演示和测试。
本文收集整理一些网上的资料,通过这些资料及动手实践全方位了解Mininet这个轻量级的软件定义网络系统平台。
http://mininet.org/download/
http://mininet.org/walkthrough/#part-1-everyday-mininet-usage
Usage:mn[options]
(typemn-hfordetails)
ThemnutilitycreatesMininetnetworkfromthecommandline.Itcancreate
parametrizedtopologies,invoketheMininetCLI,andruntests.
Options:
-h,--helpshowthishelpmessageandexit
--switch=SWITCHdefault|ivs|lxbr|ovs|ovsbr|ovsk|user[,param=value...]
ovs=OVSSwitchdefault=OVSSwitchovsk=OVSSwitch
lxbr=LinuxBridgeuser=UserSwitchivs=IVSSwitch
ovsbr=OVSBridge
http://www.projectfloodlight.org/indigo-virtual-switch/[/code]
--host=HOSTcfs|proc|rt[,param=value...]
rt=CPULimitedHost{'sched':'rt'}proc=Host
cfs=CPULimitedHost{'sched':'cfs'}
--controller=CONTROLLER
default|none|nox|ovsc|ref|remote|ryu[,param=value...]
ovsc=OVSControllernone=NullController
remote=RemoteControllerdefault=DefaultController
nox=NOXryu=Ryuref=Controller
--link=LINKdefault|ovs|tc[,param=value...]default=Link
ovs=OVSLinktc=TCLink
--topo=TOPOlinear|minimal|reversed|single|torus|tree[,param=value
...]linear=LinearTopotorus=TorusTopotree=TreeTopo
single=SingleSwitchTopo
reversed=SingleSwitchReversedTopominimal=MinimalTopo
-c,--cleancleanandexit
--custom=CUSTOMreadcustomclassesorparamsfrom.pyfile(s)
http://mininet.org/api/annotated.html[/code]
--test=TESTcli|build|pingall|pingpair|iperf|all|iperfudp|none
-x,--xtermsspawnxtermsforeachnode
-iIPBASE,--ipbase=IPBASE
baseIPaddressforhosts
--macautomaticallysethostMACs
--arpsetall-pairsARPentries
-vVERBOSITY,--verbosity=VERBOSITY
info|warning|critical|error|debug|output
--innamespace
swandctrlinnamespace?
--listenport=LISTENPORT
baseportforpassiveswitchlistening
--nolistenportdon'tusepassivelisteningport
--pre=PRECLIscripttorunbeforetests
--post=POSTCLIscripttorunaftertests
--pin
pinhoststoCPUcores(requires--host
cfsor--host
rt)
--nataddsaNATtothetopologythatconnectsMininethosts
tothephysicalnetwork.Warning:Thismayrouteany
trafficonthemachinethatusesMininet'sIPsubnet
intotheMininetnetwork.Ifyouneedtochange
Mininet'sIPsubnet,seethe--ipbaseoption.
--versionprintstheversionandexits
--cluster=server1,server2...
runonmultipleservers(experimental!)
--placement=block|random
nodeplacementfor--cluster(experimental!)
通过table键我们可以看到所有命令,如下所示:
mininet>
EOFintfs
nodesports
switch
dpctliperfnoechopx
time
dumpiperfudp
pingallpy
x
exitlinkpingallfullquitxterm
gtermlinks
pingpairsh
helpnetpingpairfullsource
help:
http://sourceforge.net/projects/xming/files/Xming/6.9.0.31/Xming-6-9-0-31-setup.exe
该命令将会结合OVS与openflow协议一起讲解。
http://www.muzixing.com/pages/2015/02/22/fattree-topo-and-iperfmulti-function-in-mininet.html
在mininet中增加新功能其实不难。
主要分为3步:
修改net.py增加函数实体;
修改cli.py,
增加对应do_function函数,用于命令解析;修改mn函数,用于声明命令。
net.py和cli.py均在mininet/mininet目录,mn文件在在mininet/bin目录中。
http://csie.nqu.edu.tw/smallko/sdn/sdn.htm
http://www.sourceinsight.com/public/
├──build
│├──bdist.linux-x86_64
│├──lib.linux-x86_64-2.7
││└──mininet
││└──examples
│└──scripts-2.7
├──custom#自定义的Python文件
├──debian#生成deb安装包时的配置文件
│└──source
├──dist
├──doc#执行doxygen生成文档时的配置文件
├──examples#一些例子,帮助用户学习使用PythonAPI
│└──test
├──mininet#核心部分
│├──examples->../examples
│└──test
├──mininet.egg-info
└──util#目录下是一些辅助文件,包括安装脚本、文档辅助生成,m命令等
├──kbuild
├──nox-patches
├──openflow-patches
├──sch_htb-ofbuf
└──vm
https://www.gitbook.io/book/yeasy/mininet_book
http://www.sdnlab.com/11495.html
主要过程是创建一个MininetRunner()实例,依次解析传入参数,进行初始化后开启网络。整体过程如下图所示。
其中Mininet类的start()方法是核心的启动过程,主要包括调用build方法来根据拓扑创建网络、控制器、交换机、主机和连接等。之后依次启动控制器和交换机进程。在执行完start()之后,通过test参数来判断mininet运行的模式。
mn.start()
iftest=='none':
pass
eliftest=='all':
mn.waitConnected()
mn.start()
mn.ping()
mn.iperf()
eliftest=='cli':
cli(mn)
eliftest!='build':
mn.waitConnected()
getattr(mn,test)()
ifself.options.post:
cli(mn,script=self.options.post)
mn.stop()默认情况下,参数为cli,即进入到控制台模式,允许用户自己输入对Mininet的操作命令。最终执行mininet.stop()进行删除资源的工作。
接下来就是调用系统中的OVS,controller等来build整个网络结构。
前言
一、安装
1、直接下载Mininet镜像
2、源码安装
3、包安装
4、升级
二、使用
1、启动mininet(需要root权限)
2、cli命令
3、自定义功能
4、其他
三、源码分析
1、让SouceInsight支持Python。
2、目录结构
3、代码流程分析
Mininet学习笔记
前言
Mininet是什么?Stanford大学NickMcKeown教授领导的研究小组基于LinuxContainer架构,开发出了这套进程虚拟化的平台。在Mininet的帮助下,你可以轻易的在自己的笔记本上测试一个软件定义网络(Software-DefinedNetworks),对基于Openflow、OpenvSwitch的各种协议等进行开发验证,或者验证自己的想法。
最令人振奋的是,所有的代码几乎可以无缝迁移到真实的硬件环境中。在实验室里,一行命令就可以创建一个支持SDN的任意拓扑的网络结构,并可以灵活的进行相关测试,验证了设计的正确后,又可以轻松部署到真实的硬件环境中。目前Mininet已经作为官方的演示平台对各个版本的Openflow协议进行演示和测试。
本文收集整理一些网上的资料,通过这些资料及动手实践全方位了解Mininet这个轻量级的软件定义网络系统平台。
一、安装
参考:1、直接下载Mininet镜像
https://github.com/mininet/mininet/wiki/Mininet-VM-Images
2、源码安装
gitclonegit://github.com/mininet/mininet
#
选择你想要安装的版本,
master
为不稳定的
cdmininet
gittag#listavailableversions
gitcheckout-b2.2.12.2.1
cd..
#
可通过
-h
来查看各选项。
mininet/util/install.sh[options]
#
测试是否安装成功
sudomn--testpingall
3、包安装
#删除旧版本
sudorm-rf/usr/local/bin/mn/usr/local/bin/mnexec\
/usr/local/lib/python*/*/*mininet*\
/usr/local/bin/ovs-*/usr/local/sbin/ovs-*
#确认OS版本
lsb_release-a
#各版本对应的包
Mininet2.1.0onUbuntu14.10:sudoapt-getinstallmininet
Mininet2.1.0onUbuntu14.04:sudoapt-getinstallmininet
Mininet2.0.0onUbuntu12.04:sudoapt-getinstallmininet/precise-backports
#关闭[code]openvswitch-controller
sudoserviceopenvswitch-controllerstop
sudoupdate-rc.dopenvswitch-controllerdisable
#验证
sudomn--testpingall
#如果想完成接下来的实验还需要执行如下操作
gitclonegit://github.com/mininet/mininet
mininet/util/install.sh-fw
4、升级
cdmininet
gitfetch
gitcheckoutmaster#Oraspecificversionlike2.2.1
gitpull
sudomakeinstall
二、使用
参考:$
表示普通用户
#
表示
root
用户
mininet>
表示
mininet
命令行
(CLI)
1、启动mininet(需要root权限)
命令:sudomn[options]Usage:mn[options]
(typemn-hfordetails)
ThemnutilitycreatesMininetnetworkfromthecommandline.Itcancreate
parametrizedtopologies,invoketheMininetCLI,andruntests.
Options:
-h,--helpshowthishelpmessageandexit
#
显示帮助信息
--switch=SWITCHdefault|ivs|lxbr|ovs|ovsbr|ovsk|user[,param=value...]
ovs=OVSSwitchdefault=OVSSwitchovsk=OVSSwitch
lxbr=LinuxBridgeuser=UserSwitchivs=IVSSwitch
ovsbr=OVSBridge
#
指定交换机类型,可以带的参数值:
OVSSwitch
:
mininet\mininet\node.py
脚本
name:nameforswitch
failMode:controllerlossbehavior(secure|standalone)
datapath:userspaceorkernelmode(kernel|user)
inband:usein-bandcontrol(False)
protocols:
usespecificOpenFlowversion(s)(e.g.OpenFlow13)
Unspecified(oroldOVSversion)usesOVSdefault
#OVSversion
可通过
ovs-ofctl--version
来查看
reconnectms:maxreconnecttimeoutinms(0/Nonefordefault)
stp:enableSTP(False,requiresfailMode=standalone)
batch:enablebatchstartup(False)
UserSwitch
:
node.py
name:namefortheswitch
dpopts:additionalargumentstoofdatapath(--no-slicing)
IVSSwitch
:
node.py
参考:
IndigoVirtualSwitch
OVSBridge:node.py
stp:enableSpanningTreeProtocol(False)
seeOVSSwitchforotheroptions
LinuxBridge
:
nodelib.py
stp:usespanningtreeprotocol?(defaultFalse)
prio:optionalexplicitbridgepriorityforSTP
#
交换机类型:
default\ovs\ovsk:OVSSwitch(
OpenvSwitch.
)
ovsk
是为了跟
2.0
版本兼容而保留的
lxbr:LinuxBridge
user:UserSwitch
ivs:IVSSwitch
ovsbr:OVSBridge
--host=HOSTcfs|proc|rt[,param=value...]
rt=CPULimitedHost{'sched':'rt'}proc=Host
cfs=CPULimitedHost{'sched':'cfs'}
#
指定
Host
的
CPU
调度方式:
rt
或者
cfs
--controller=CONTROLLER
default|none|nox|ovsc|ref|remote|ryu[,param=value...]
ovsc=OVSControllernone=NullController
remote=RemoteControllerdefault=DefaultController
nox=NOXryu=Ryuref=Controller
#
指定控制器
node.py
default
情况是:
#(whichcontroller/ovs-controller/test-controller)
Controller/OVSController
第一个有效的
protocol
为
tcp
port
为
6633
ip
为
127.0.0.1
其实就是调用了不同的命令
ovsc=ovs-controller
none=None
没有指定控制器
nox=
nox_core
ref=controller
remote=controller
--link=LINKdefault|ovs|tc[,param=value...]default=Link
ovs=OVSLinktc=TCLink
#
--topo=TOPOlinear|minimal|reversed|single|torus|tree[,param=value
...]linear=LinearTopotorus=TorusTopotree=TreeTopo
single=SingleSwitchTopo
reversed=SingleSwitchReversedTopominimal=MinimalTopo
#
指定拓扑结构
-c,--cleancleanandexit
#
进行清理配置操作,适合故障后恢复
--custom=CUSTOMreadcustomclassesorparamsfrom.pyfile(s)
#
利用
MininetpythonAPI
接口编写的脚本
#API
参考:
#
可用
miniedit.py
这个脚本,图形化工具
--test=TESTcli|build|pingall|pingpair|iperf|all|iperfudp|none
#
测试
-x,--xtermsspawnxtermsforeachnode
#
为每个
node
生成一个
xterms
-iIPBASE,--ipbase=IPBASE
baseIPaddressforhosts
#
指定
hostip
地址段
。如:
1.1.1.XX
--macautomaticallysethostMACs
#
更友好的
mac
地址。如:
00:00:00:00:00:01
--arpsetall-pairsARPentries
#
-vVERBOSITY,--verbosity=VERBOSITY
info|warning|critical|error|debug|output
#
显示日志级别
#
默认是
info
级别,
debug
为全输出,
output
不输出
--innamespace
swandctrlinnamespace?
#
--listenport=LISTENPORT
baseportforpassiveswitchlistening
#
指定监听端口号
--nolistenportdon'tusepassivelisteningport
#
不使用任何端口来监听
--pre=PRECLIscripttorunbeforetests
#PRE
为一个文件,文件中写
CLI
命令,在测试前被执行
--post=POSTCLIscripttorunaftertests
#POST
为一个文件,文件中写
CLI
命令,在测试后被执行
--pin
pinhoststoCPUcores(requires--host
cfsor--host
rt)
#
--nataddsaNATtothetopologythatconnectsMininethosts
tothephysicalnetwork.Warning:Thismayrouteany
trafficonthemachinethatusesMininet'sIPsubnet
intotheMininetnetwork.Ifyouneedtochange
Mininet'sIPsubnet,seethe--ipbaseoption.
#
--versionprintstheversionandexits
#
显示
mininet
版本后退出
--cluster=server1,server2...
runonmultipleservers(experimental!)
#
--placement=block|random
nodeplacementfor--cluster(experimental!)
[code]#
2、cli命令
sudomn经过短暂的等待即可进入以mininet>引导的命令行界面。好了,从现在开始,我们就拥有了一个1台控制节点(controller)、一台交换机(switch)、两台主机(host)的网络,并且用wireshark进行观测。通过table键我们可以看到所有命令,如下所示:
mininet>
EOFintfs
nodesports
switch
dpctliperfnoechopx
time
dumpiperfudp
pingallpy
x
exitlinkpingallfullquitxterm
gtermlinks
pingpairsh
helpnetpingpairfullsource
help:
显示帮助
如:
helpdpctl
EOF
:
退出
exit:
退出
quit:
退出
#
0
、服务端允许
ssh
的
x11
转发。
/etc/sshd/sshd_config
1
、客户端是
Windows
主机,需要先在
Windows
机器上安装
Xserver
(
Xming
)。
下载地址:
2
、
SCRT
配置:
gterm
:
gnome
终端。注:可能导致
Mininet
崩溃
xterm:
x
终端
x:
无效果
dump:
查看输出各节点信息
intfs
列出所有的网络接口
net:
显示网络链接情况
switch
:停止
/
启动某个交换机
switch<switchname>{start,stop}
ports:
显示交换机的所有接口
links:
查看链路状态
link:
禁用或启用两个节点之间的链路
nodes:
列出所有的节点信息
time:
测量
mininet
命令所花的时间
pingall:
所有
host
节点之间互
ping
pingallfull:
所有
host
节点之间互
ping,
并返回详细结果
pingpair:
在前两个主机之间互
ping
测试
pingpairfull
:在前两个主机之间互
ping
测试,并返回详细结果
iperf:
两个
host
之间进行简单的
iperfTCP
测试
iperfudp:
两个节点之间用指定带宽
udp
进行测试
sh:
运行外部
shell
命令
source
:从外部文件中读入命令,并执行
px:
执行一条
python
语句
py:
执行
python
表达式。
noecho:
运行交互式窗口,关闭回应(
echoing)
dpctl:
操控交换机,控制交换机行为
(
具体执行是
ovs-dpctl.
该命令将会结合OVS与openflow协议一起讲解。
3、自定义功能
参考:在mininet中增加新功能其实不难。
主要分为3步:
修改net.py增加函数实体;
修改cli.py,
增加对应do_function函数,用于命令解析;修改mn函数,用于声明命令。
net.py和cli.py均在mininet/mininet目录,mn文件在在mininet/bin目录中。
4、其他
通过各大实验学习掌握Mininet:三、源码分析
1、让SouceInsight支持Python。
参考:2、目录结构
├──bin#mn命令,Python脚本├──build
│├──bdist.linux-x86_64
│├──lib.linux-x86_64-2.7
││└──mininet
││└──examples
│└──scripts-2.7
├──custom#自定义的Python文件
├──debian#生成deb安装包时的配置文件
│└──source
├──dist
├──doc#执行doxygen生成文档时的配置文件
├──examples#一些例子,帮助用户学习使用PythonAPI
│└──test
├──mininet#核心部分
│├──examples->../examples
│└──test
├──mininet.egg-info
└──util#目录下是一些辅助文件,包括安装脚本、文档辅助生成,m命令等
├──kbuild
├──nox-patches
├──openflow-patches
├──sch_htb-ofbuf
└──vm
3、代码流程分析
参考:主要过程是创建一个MininetRunner()实例,依次解析传入参数,进行初始化后开启网络。整体过程如下图所示。
其中Mininet类的start()方法是核心的启动过程,主要包括调用build方法来根据拓扑创建网络、控制器、交换机、主机和连接等。之后依次启动控制器和交换机进程。在执行完start()之后,通过test参数来判断mininet运行的模式。
mn.start()
iftest=='none':
pass
eliftest=='all':
mn.waitConnected()
mn.start()
mn.ping()
mn.iperf()
eliftest=='cli':
cli(mn)
eliftest!='build':
mn.waitConnected()
getattr(mn,test)()
ifself.options.post:
cli(mn,script=self.options.post)
mn.stop()默认情况下,参数为cli,即进入到控制台模式,允许用户自己输入对Mininet的操作命令。最终执行mininet.stop()进行删除资源的工作。
接下来就是调用系统中的OVS,controller等来build整个网络结构。
相关文章推荐
- 脚本——生成验证码的函数
- mysql 的简单优化
- 作业-01
- Leetcode: 107. Binary Tree Level Order Traversal II(JAVA)
- scott账户已被锁定,解锁方法
- python学习:机器学习下的pybrain和多线程编程
- 【Http专题】Https
- 个人项目一改进
- linux输入法
- is_a原则和has_a原则
- DEV系列--treeList用法(2)
- linux文件操作学习3
- IOS基础面试题
- hdoj 1896 Stones
- 使用log4j获取SQL语句
- ugui在运行时改变RectTransform的大小
- Spring定时器的配置和使用
- DFS迷宫递归所有路径 新手入门
- DFS迷宫递归所有路径 新手入门
- HTTPS证书生成方法,也适用于APP