Mininet简介
在Coursera SDN开放课程中,编程作业要用Mininet来完成。这里对Mininet做一个简单的介绍。
什么是Mininet
Mininet是由一些虚拟的终端节点(end-hosts)、交换机、路由器连接而成的一个网络仿真器,它采用轻量级的虚拟化技术使得系统可以和真实网络相媲美。
Mininet可以很方便地创建一个支持SDN的网络:host就像真实的电脑一样工作,可以使用ssh登录,启动应用程序,程序可以向以太网端口发送数据包,数据包会被交换机、路由器接收并处理。有了这个网络,就可以灵活地为网络添加新的功能并进行相关测试,然后轻松部署到真实的硬件环境中。
Mininet的特性
可以简单、迅速地创建一个支持用户自定义的网络拓扑,缩短开发测试周期
可以运行真实的程序,在Linux上运行的程序基本上可以都可以在Mininet上运行,如Wireshark
Mininet支持Openflow,在Mininet上运行的代码可以轻松移植到支持OpenFlow的硬件设备上
Mininet可以在自己的电脑,或服务器,或虚拟机,或者云(例如Amazon EC2)上运行
Mininet提供python API,简单易用
Mininet是开源项目,源代码在这里:点击打开链接
……
Mininet安装
使用VirtualBox安装Mininet虚拟机:点击打开链接
使用Mininet创建一个网络
以Coursera SDN Week3 programming assignment为例,创建一个及其简单的数据中心网络。
Data center networks typically have a tree-like topology. End-hosts connect to top-of-rack switches, which form the leaves (edges) of the tree; one or more core switches form the root; and one or more
layers of aggregation switches form the middle of the tree. In a basic tree topology, each switch (except the core switch) has a single parent switch. Additional switches and links may be added to construct more complex tree topologies (e.g., fat tree) in
an effort to improve fault tolerance or increase inter-rack bandwidth.
In this assignment, your task is to create a simple tree topology. You will assume each level i.e., core, aggregation, edge and host to be composed of a single layer of switches/hosts with a configurable
fanout value (k) looks like:
代码:
# CustomTopo.py ''' Coursera: - Software Defined Networking (SDN) course -- Module 3 Programming Assignment Professor: Nick Feamster Teaching Assistant: Muhammad Shahbaz ''' from mininet.topo import Topo from mininet.net import Mininet from mininet.node import CPULimitedHost from mininet.link import TCLink from mininet.util import irange,dumpNodeConnections from mininet.log import setLogLevel class CustomTopo(Topo): "Simple Data Center Topology" "linkopts - (1:c1, 2:aggregation, 3: edge) parameters" "fanout - number of child switch per parent switch" def __init__(self, linkopts1, linkopts2, linkopts3, fanout=2, **opts): # Initialize topology and default options Topo.__init__(self, **opts) # Add your logic here ... self.fanout = fanout core = self.addSwitch('c1') for i in irange(1, fanout): aggregation = self.addSwitch('a%s' %i) self.addLink(core, aggregation, **linkopts1) for j in irange(1, fanout): edge = self.addSwitch('e%s' %(fanout*(i-1)+j)) self.addLink(aggregation, edge, **linkopts2) for k in irange(1, fanout): host = self.addHost('h%s' %((fanout*(fanout*(i-1)+j-1))+k)) self.addLink(edge, host, **linkopts3) topos = { 'custom': ( lambda: CustomTopo() ) } def simpleTest(): "Create and test a simple network" linkopts1 = dict(bw=10, delay='3ms', use_htb=True) linkopts2 = dict(bw=8, delay='4ms', loss=1, max_queue_size=900, ) linkopts3 = dict(bw=6, delay='5ms', loss=1, max_queue_size=800) topo = CustomTopo(linkopts1, linkopts2, linkopts3, fanout=2) net = Mininet(topo, host=CPULimitedHost, link=TCLink) net.start() print "Dumping host connections" dumpNodeConnections(net.hosts) print "Testing network connectivity" net.pingAll() net.stop() if __name__ == '__main__': # Tell mininet to print useful information setLogLevel('info') simpleTest()
在mininet虚拟机上执行下面操作即可创建自定义的网络拓扑。函数simpleTest()创建网络并进行了简单的ping测试,从屏幕输出可以看到创建的过程。
mininet@mininet-vm:~/mininet$ sudo python CustomTopo.py
Mininet简介的更多相关文章
- Mininet入门与实战 3.9参课记录
Mininet入门与实战 Mininet简介 由来:斯坦福大学发明,基于Linux Container架构开发的进程虚拟化网络仿真工具,交换机支持OF协议. 使用情况: 控制器,不推荐自带控制器(bu ...
- Mininet的内部实现原理简介
原文发表在我的博客主页,转载请注明出处. 前言 之前模拟仿真网络一直用的是Mininet,包括写了一些关于Mininet安装,和真实网络相连接,Mininet简历拓扑的博客,但是大多数都是局限于具体步 ...
- 简单网络搭建与测试 mininet
简介 本实验是基于pox搭建简单的网络并测试网络的连通性,利用mininet代码创建一个交换机四个主机的拓扑,测试各主机之间的连通性以及h1.h4之间的带宽. 代码 实验代码如下所示,SingleSw ...
- SDN概述:简介、工具、环境部署
一.前言: 本文初步接触 SDN 的相关概念.需要依次完成下面几项任务: SDN 简介 SDN 工具 SDN 环境部署 推荐阅读 推荐阅读下述内容: Ethane 项目,openflow 的基础 op ...
- mininet实验 脚本实现控制交换机行为
写在前面 本文参考 通过这个实验,我学习到了另一种下流表的方式. 下流表有两种方式(我目前了解): 通过controller下发. 通过OvS提供的API直接向OvS交换机下流表. 本实验脚本已经把相 ...
- Mininet加强版——DOT(分布式OpenFlow试验平台)
前言 之前在做SDN实验的时候,需要用到包含2000+个交换机的fattree拓扑,当时用的是mininet,生成整个拓扑需要十五六个小时,最终在异常艰苦的环境下做完了实验,之后听说了有DOT(Dis ...
- Python3.x:第三方库简介
Python3.x:第三方库简介 环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex ...
- ASP.NET Core 1.1 简介
ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...
- MVVM模式和在WPF中的实现(一)MVVM模式简介
MVVM模式解析和在WPF中的实现(一) MVVM模式简介 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在 ...
随机推荐
- volatile简要解析
在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写.这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值 ...
- Tomcat8+Spring-Security 启用安全通道(https)的一步步实现
近日学习Spring Security框架,学习到利用安全框架完成系统的安全通道控制时,来来回回遇到了不少问题.spring教程上写的略简单,对于我等小白来讲不足以支撑看书编码,好在网络上有资料可以查 ...
- 剑指offer 丑数
思路:可以发现,每个丑数都是由以前的丑数得到.当前丑数一定是之前丑数能够得到的最小丑数. AC代码 class Solution { public: int GetUglyNumber_Solutio ...
- hdu1995 汉诺塔V
可以直接把前K-1个罗盘全部忽略了,因为移动前K-1个罗盘不会影响第K个. 也就是相当于只移动剩下的n-k-1个罗盘,当只移动第k个罗盘时,f(k)=1;当要哟东第k个和第k+1个时,就必须先把第k个 ...
- mac的一些小技巧
切换到超级管理员: sudo -s: 让你很快的全屏之间进行切换!很方便!很实用! command+tab 今天的感觉到公司的每一个人员,对于mac的系统的使用都是非常的熟悉的,我还什么都不会. 我得 ...
- nodejs之socket.io模块——实现了websocket协议
Nodejs实现websocket的4种方式:socket.io.WebSocket-Node.faye-websocket-node.node-websocket-server,主要使用的是sock ...
- CWnd *和HWnd转换
CWnd *和HWnd转换 CWnd*得到HWnd CWnd wnd; HWND hWnd; hWnd = wnd.m_hWnd; // or ...
- Android okHttp网络请求库详解
okhttp 是一个 Java 的 HTTP+SPDY 客户端开发包,同时也支持 Android.需要Android 2.3以上. 特点 OKHttp是Android版Http客户端.非常高效,支持S ...
- java.lang.NoClassDefFoundError:org/hamcrest/SelfDescribing
1.错误描述 java.lang.NoClassDefFoundError:org/hamcrest/SelfDescribing 2.错误原因 将junit-4.11.jar导入到lib目录中,出现 ...
- 微信小程序hidden
首先hidden默认在display:block;情况下是会默认生效的: but在很多时候只在初始值下有效, 在data下声明 flag:true; 方法中: 无效,所以尽量不要使用hidden这个属 ...