在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是开源项目,源代码在这里:https://github.com/mininet

……

Mininet安装

使用VirtualBox安装Mininet虚拟机:http://mininet.org/download/

使用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

更多资料

1. Mininet: http://mininet.org/

2. Mininet wiki: https://github.com/mininet/mininet/wiki

Mininet的更多相关文章

  1. mininet中iperf sever自动退出

    使用iperf 在mininet进行吞吐量测试是常用的方法,之前结束iperf server的方法是运行os.system('pkill iperf')命令. 但是这种方式iperf server有可 ...

  2. mininet和ryu控制器的连接

    1.执行ryu应用程式:ryu-manager --verbose ryu.app.simple_switch_13 2.启动mininet,配置如下:创建3个host,1个交换器(open vSwi ...

  3. Ubuntu下搭建Mininet环境

    Mininet环境搭建分为两个步骤,如下: 1.从GITHUB上获取mininet源码到本地的opt目录下 打开Linux终端,切换目录到根目录 cd / 切换到Linux的opt目录下 cd opt ...

  4. Mininet在创建拓扑的过程中为什么不打印信息了——了解Mininet的log系统

    前言 写这篇博客是为了给我的愚蠢和浪费的6个小时买单! 过程原因分析 我用Mininet创建过不少拓扑了,这次创建的拓扑非常简单,如下图,创建拓扑的代码见github.在以前的拓扑创建过程中,我都是用 ...

  5. Mininet的内部实现原理简介

    原文发表在我的博客主页,转载请注明出处. 前言 之前模拟仿真网络一直用的是Mininet,包括写了一些关于Mininet安装,和真实网络相连接,Mininet简历拓扑的博客,但是大多数都是局限于具体步 ...

  6. Mininet实验 源码安装Mininet

    参考:MiniNet实验1 安装命令: sudo apt-get update sudo apt-get upgrade sudo apt-get install git(安装过git就可以忽略此步) ...

  7. [SDN] mininet walkthrough

    本次学习使用的是mininet的VM-image,所以安装过程就先忽略掉了,主要学习使用方法. 同时完成了在虚拟机上配置minient和Wireshark, 可以直接在虚拟机上操作. 1. Every ...

  8. mininet之miniedit可视化操作

    Mininet 2.2.0之后的版本内置了一个mininet可视化工具miniedit,使用Mininet可视化界面方便了用户自定义拓扑创建,为不熟悉python脚本的使用者创造了更简单的环境,界面直 ...

  9. Mininet的安装与卸载

    1.Mininet的卸载比较简单,只需要执行以下命令: sudo rm -rf /usr/local/bin/mn /usr/local/bin/mnexec /usr/local/lib/pytho ...

  10. 将Mininet与真实网络相连接

    原文发表在我的博客主页,转载请注明出处 前言 Mininet是SDN网络仿真的一大利器,在小规模网络模拟使用上独领风骚,其开源性允许使用者按照自己的需求修改源码,得到想要的数据,其提供了多个函数用来满 ...

随机推荐

  1. Python 之 cas-clinet

    因为要搞一个用户登录安全的验证,要用到cas服务,所以在网上搜了很多关于cas信息才搞成功. 我写的属于客户端的cas就是从CAS服务,获取返回的ticket验证通过,用户登录成功. 使用的是web. ...

  2. C#中的Attribute详解(下)

    原文地址:https://blog.csdn.net/xiaouncle/article/details/70229119 C#中的Attribute详解(下) 一.Attribute本质 从上篇里我 ...

  3. selenium+python自动化84-chrome手机wap模式(登录淘宝页面)

    前言 chrome手机wap模式登录淘宝页面,点击验证码无效问题解决. 切换到wap模式,使用TouchActions模块用tap方法触摸 我的环境 chrome 62 chromedriver 2. ...

  4. 怎么理解Linux软中断?

    1.什么是中断 中断是系统用来响应硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来响应设备的请求. 2.为什么要有中断呢? "举个生活中的例子" ...

  5. Django---form 详解

    Form表单的功能 准备数据.重构数据,以便下一步提交. 为数据创建HTML 表单 接收并处理客户端提交的表单和数据 普通字段详解: class BooleanField(**kwargs): 默认的 ...

  6. GPO配置时的注意事项

    当两个组策略冲突时: 1.如在同一层OU,后生效的组策略有效,优先级高.在组织单元的'链接的组策略对象'中标明了组策略的先后应用次序,其中下面的组策略先应用,上面的组策略后应用,即上面的组策略优先级高 ...

  7. Haskell语言学习笔记(46)Parsec(3)

    Applicative Parsing 使用 Applicative 式的 Parser. 包括使用 (<$>), (<*>), (<$), (<*), (*> ...

  8. 趣味编程:静夜思(JOOL版)

    JOOL <dependency> <groupId>org.jooq</groupId> <artifactId>jool</artifactI ...

  9. 多个jsp页面共享Java bean

    通过jsp的内置对象—request对象获取参数: 通过超链接传参: 例:把a.jsp中i的值传到b.jsp中: 在a.jsp页面中的核心代码为: <a href="b.jsp?i=1 ...

  10. Python 实践项目 游戏

    https://www.zhihu.com/collection/92700207?page=1