博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mininet
阅读量:4676 次
发布时间:2019-06-09

本文共 3660 字,大约阅读时间需要 12 分钟。

在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 AssignmentProfessor: Nick FeamsterTeaching Assistant: Muhammad Shahbaz'''from mininet.topo import Topofrom mininet.net import Mininetfrom mininet.node import CPULimitedHostfrom mininet.link import TCLinkfrom mininet.util import irange,dumpNodeConnectionsfrom mininet.log import setLogLevelclass 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: 

2. Mininet wiki: 

 

转载于:https://www.cnblogs.com/wangprince2017/p/8025095.html

你可能感兴趣的文章
2015年秋面试心得汇总
查看>>
海外开发者推荐:10个顶级2D游戏资源站
查看>>
redis 在 php 中的应用(Hash篇)
查看>>
2018新年 flag 了解一下(每月初更新...)
查看>>
软件工程概论个人作业02
查看>>
《SSAO》
查看>>
基于.NET平台常用的框架整理(转)
查看>>
the simulation codes of network resource pre-allocation
查看>>
java远程调试
查看>>
SQLite header and source version mismatch 解决方案
查看>>
算法 binary search
查看>>
cocos2d_android 第一个游戏
查看>>
【python小练】0000
查看>>
改变EasyUI默认分页显示数目
查看>>
Maven开始
查看>>
在sublime中的markdown的简单使用整理
查看>>
简单反爬虫技术介绍
查看>>
UITableView详解
查看>>
HDU1671——前缀树的一点感触
查看>>
codves——5960 信使
查看>>