在Coursera SDN开放课程中,编程作业要用Mininet来完成。这里对Mininet做一个简单的介绍。 如Wireshark Mininet支持Openflow,在Mininet上运行的代码可以轻松移植到支持OpenFlow的硬件设备上 Mininet可以在自己的电脑,或服务器 ,或虚拟机,或者云(例如Amazon EC2)上运行 Mininet提供python API,简单易用 Mininet是开源项目,源代码在这里:点击打开链接 Mininet安装 import Topo from mininet.net import Mininet from mininet.node import CPULimitedHost from mininet.link mininet@mininet-vm:~/mininet$ sudo python CustomTopo.py
0x00 Mininet 尝试理解一下mininet,话说mininet是基于python编写的,代码结构清晰,简直清醒脱俗((≧▽≦)/啦啦啦),附上链接mininet,mark一下。 Links in Mininet are bidirectional unless noted otherwise. setLogLevel( 'info' | 'debug' | 'output' ): set Mininet's default output level; 'info' is recommended /usr/bin/python from mininet.topo import Topo from mininet.net import Mininet from mininet.util import irange,dumpNodeConnections from mininet.log import setLogLevel class LinearTopo(Topo): "" "
参考文章https://mininet.org/download/本文采用下载源码的方式安装2. 从github下载源码git clone git@github.com:mininet/mininet.git推荐使用git协议clone,否则会有下载失败的可能fatal: unable to access 'https://github.com/mininet/mininet/': Failed to connect to github.com port 443 after 75003 ms: Couldn't connect to server3选择合适的版本cd mininetgit tag # list available versionsgit checkout -b mininet-2.3.0 2.3.0 执行安装mininet/util/install.sh -a # 完整模式,也可以选择其他模式, 可以 -h 查看选项问题记录错误1Installing Mininet core~/mininet ~/
1、环境介绍: (1)Ubuntu操作系统 (2)Mininet仿真环境 (3)Floodlight1.2版本 2、使用拓扑介绍: (1)使用的拓扑图: 在这次实战中,部署的拓扑为两个三层树形节点与一个三角形节点的结合
二.Mininet自定义拓扑图(需要先把刚才的floodlight关闭) fattree.py(ip指的是自己的主机ip) #! import Topo from mininet.net import Mininet from mininet.node import RemoteController,CPULimitedHost from mininet.link import TCLink from mininet.util import dumpNodeConnections class MyTopo( Topo ): /usr/bin/python from mininet.topo import Topo from mininet.net import Mininet from mininet.util import irange,dumpNodeConnections from mininet.log import setLogLevel from mininet.node import RemoteController
/usr/bin/python import time from mininet.net import Mininet from mininet.node import Controller, RemoteController , OVSKernelSwitch,UserSwitch from mininet.cli import CLI from mininet.log import setLogLevel from mininet.link > h1 route add default gw 10.123.10.2 mininet> h3 route add default gw 10.123.1.2 mininet> h1 ping 10.123.10.2 mininet> h1 ping 10.123.1.2 这时候再次测试h1 ping h3 就可以通 举例 环境继承上述,再添加一个h4,使他们都可以通 mininet> py net.addHost , mac='00:00:00:00:00:13' ) 创建链路 mininet> py net.addLink(s3, h4, 1, 0) mininet> py net.addLink(h2, s3
3 实验任务 本实验基于一台OpenDaylight Helium版本虚拟机和一台Mininet模拟实验。 我们已安装相关环境的虚拟机中启动ODL和Mininet,Mininet创建一个默认树形拓扑并选择Mininet的控制器指定为ODL,进行基本的添加、删除流表操作,使网络实现网络通信和不通信。 步骤4:创建2个虚拟机,一个是选择OpenDaylight镜像的虚拟机作为控制器(注:内存大于2G),另一个是选择Mininet镜像作为所需Mininet。如下图已创建虚拟机所示: ? 修改成功后,reboot重启VM,重启后,IP即与Mininet是同一网段,且能够相互通信。 OpenDaylight所在虚拟机的IP及路由: ? Mininet所在虚拟机的IP及路由: ? OpenDaylight所在虚拟机和Mininet所在虚拟机能够互相通信。 ? 4.3 创建拓扑并连接控制器 ? ?
3 实验任务 本实验通过Mininet模拟二层交换机和两个主机,通过两个主机通信来了解交换机MAC地址学习过程。 本实验Mininet拓扑如下: ? 步骤4:创建虚拟机 本实验需要创建一个虚拟机,这里取名为mininet。选择镜像mininet-OF13,这里设置2核CPU,4G内存。 镜像选择: ? 创建成功后的虚网详情: ? 4.2 实验操作 1在虚拟机上启动Mininet,创建一个线型拓扑(如实验任务中图所示),控制器设置为无。 # screen mn –-topo linear –-mac –-switch ovsk –-controller=none 如下图,mininet搭建好了我们所需的拓扑环境: ? 我们需要按ctl+a+d跳出当前mininet窗口,在主窗口命令行中输入如下命令来打开交换机s1和交换机s2的二层。操作完成后,s1和s2就是两台普通的二层交换机了。
Mininet是一款非常轻巧但是功能很强大的网络模拟器。网络研究者可以使用Mininet创建支持OpenFlow的SDN拓扑。 随着SDN研究的发展,多控制器协作成为未来的研究方向,所以使用Mininet构建多控制器网络拓扑也成为一种需求。本篇将讲述如何使用Mininet搭建多控制器网络拓扑。 ? 本篇将针对这两种理解,介绍如何搭建多控制器的Mininet拓扑。 面向交换机的多控制器网络拓扑 对于一个交换机而言,可以连接多个控制器,其实现方式非常简单, 在Mininet的源码中已经实现。 Hope it will work perfectly. """ from mininet.net import Mininet from mininet.node import Controller, RemoteController, OVSSwitch from mininet.cli import CLI from mininet.log import
SDN 网络系统之 Mininet 与 API 详解 Mininet 是轻量级的软件定义网络系统平台,同时提供了对 OpenFlow 协议的支持。 本文主要介绍了 Mininet 的相关概念与特性,并列举的 Mininet 自定义网络及参数网络拓扑示例,以及相关重要执行文件的分析,帮助用户更好的理解与使用 Mininet 技术 SDN 与 Mininet # git clone git://github.com/mininet/mininet # cd mininet/util/ # . ">install-mininet-vm.sh
Mininet作为一个轻量级的SDN仿真工具,在其系统实现架构中充分利用了Linux命名空间内核技术,其中Linux Network Namespace机制更是Mininet软件架构的基石,对网络资源的模拟发挥着重要作用 由于命名空间的虚拟技术没有提供类似于虚拟机的持久化能力,所以在Mininet关闭时不能保存所有的配置。 Mininet使用网络命名空间来让不同的Host进程拥有独立的网络上下文。 http://mininet.org/walkthrough 7、Mininet运作原理。 http://hwchiu.logdown.com/posts/221370-mininet-parsing 8、Testing SDN behavior with Mininet。 http://www.linux-magazine.com/Issues/2014/162/Mininet 9、Mininet network simulator review。
镜像作为所需Mininet。 Mininet虚拟机IP: ? OpenDaylight所在虚拟机和Mininet所在虚拟机能够互相通信。 ? ? 查看网络: 在Mininet中通过操作网络命令,可以查看OVS间及OVS与主机间的连接关系,也可以查看Mininet是否远程连接控制器。 例如,通过nodes命令可以查看网络中所有的节点。 ? 在Mininet中pingall一下,交换机下面的两台主机h1、h2应能互相通信,如果不能通信,请检查交换机是否与ODL正确连接。 ? 查看交换机通信流表: ? 由下图可知,ODL与Mininet之间应用的是OpenFlow1.0版本协议 ?
本文简要介绍在虚拟机环境下,主要目的是对Open vSwitch下发的流表操作,通过OpenDaylight与Mininet熟悉添加、删除流表的命令及设备通信的原理。 2 环境准备 参考本专题前面两篇文章装好OpenDaylight(以下简称“ODL”)和Mininet的虚拟机环境。 3 Mininet连接ODL控制器 首先我们在已安装有相关环境的虚拟机终端中启动ODL和Mininet,Mininet创建一个默认树形拓扑并选择Mininet的控制器为ODL。 ODL启动详见:OpenDaylight与Mininet应用实战之基本环境搭建(一)。 增加这条流表以后,Mininet中h1和h2主机之间没有办法通信了。
因为Mininet的方便且易用,以及实验条件及真实设备的不足,它已经被越来越多的SDN学习者使用。 在Ubuntu13.10系统中安装Mininet-2.1.0版本简单提一下。 Mininet安装并验证成功后检验Mininet环境: 1、查看Mininet版本 12 # mn --version2.1.0 2、查看Open vSwitch版本 123 # ovs-vsctl 版本,Mininet版本还是2.1.0,如查看结果显示: 12 # mn --version2.1.0 验证Mininet是否在正常使用: ? 3 后语 以上就是升级Mininet里面的Open vSwitch版本的方法,但是目前的Mininet版本还不支持OpenFlow版本的选择,有兴趣的同学可以参考本网站的技术文章《OpenDaylight
步骤4:创建2个虚拟机,一个是选择OpenDaylight桌面版带有wireshark镜像的虚拟机,其镜像名称是odl_wireshark_zj作为控制器(注:内存大于4G),另一个是选择Mininet 镜像作为所需Mininet。 Mininet虚拟机IP: ?
3 Mininet获取安装 Mininet主要是虚拟出OpenFlow交换机以及host主机节点,并且能通过自定义来构造用户想要的拓扑。 从http://mininet.org/download/下载Mininet的VM镜像,打开此镜像后,用户名为mininet,密码为mininet。 登录进入Mininet虚拟机,之后即可通过 mn命令来创建拓扑。后续也会提供Mininet的源码编译安装方法。 (2)也可在Mininet所在的VM中安装wireshark,因Mininet虚拟机是server版,所以使用wireshark时,可使用Xming与Putty相结合,将X11中的转发功能勾选,远程登录此 5 总结 本文主要是为后续了解ODL及Mininet做准备,通过ODL和Mininet的安装获取熟悉它们的基本概念。
mn 观察,可以知道,已经进入了这个自带的网络,网络中有1个交换机和2个主机,且在打开这个网络之后,进入了 mininet> 这个命令模式 然后输入相关命令查看网络状态,如下图所示: 查看可用节点 此处,我们将mininet命令参数分为三大类: (1)用于创建网络拓扑结构的命令参数; (2)用于查看现有(或创建好的)网络拓扑中的各个节点(设备)的网络状态(ip地址、连通性等信息); (3)用于修改当前网络拓扑 语法如下: mn --custom file.py --topo mytopo 具体使用请看下一篇:mininet自定义网络拓扑结构 (2)--switch 定义网络拓扑要使用的交换机,后面可以接的参数有 2.用户查看设备信息和状态的命令参数 这些命令在 mininet> 命令模式下使用,仅查看网络设备状态信息,不对网络结构进行改变 net 查看链路信息,两个设备之间的之间连线, 下面举例说明: 在mininet自带的网络拓扑的基础上,我们想添加一个主机h3,并且让它和s1之间连通,且可以和其他两个主机h1和h2互相ping通。
1、打开Ubuntu命令行 2、输入:apt-get update 3、输入:apt-get install git 4、输入:git clone git://github.com/mininet/mininet 5、输入:mn --version 5.1、如果出现安装失败,请安装:【apt install mininet】 5.2、输入:mn --version 6、再次确认版本号 7、输入:【mn
生成拓扑后,将OpenDaylight连接至Mininet作为交换机的控制器控制主机通信。 图2 ODL Web界面交换机端口与三层网关相关联 然后对各个Host的主机IP地址、子网掩码和默认网关进行逐一设置,在Mininet提示符下如下设置: mininet> h1 ifconfig h1- eth0 10.0.0.1 netmask 255.0.0.0 mininet> h3 ifconfig h3-eth0 10.0.0.3 netmask 255.0.0.0 mininet> h2 ifconfig h2-eth0 20.0.0.1 netmask 255.0.0.0 mininet> h4 ifconfig h4-eth0 20.0.0.2 netmask 255.0.0.0 mininet> h1 route add default gw 10.0.0.254 mininet> h3 route add default gw 10.0.0.254 mininet> h2 route add
1 多交换机的测试 Mininet中本身就支持多交换机网络拓扑的模拟创建,可通过Python API自定义拓扑创建满足使用者在仿真过程中的多方位需求。 通过Mininet验证,在Mininet中模拟创建的OvS交换机不能指定连接多个控制器,且在同一个Mininet中创建的多个交换机不能指定不同的控制器。 所以在验证交换机被多个同一类型的控制器管控时,不能通过用Mininet来验证,但是可通过真实交换机来验证。 因Mininet现在无法模拟多控制器管控一个交换机的情况,所以本专题还是侧重对多交换机的管控实验。 至此,OpenDaylight与Mininet应用实战专题将结束,有介绍不到位或者有疑问的地方请多多指教,互相交流。谢谢!