zoukankan      html  css  js  c++  java
  • 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是开源项目,源代码在这里: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

  • 相关阅读:
    git ——visual studio code 工具之 Git Graph & git clone & git checkout
    docker中添加redis & 在程序中应用
    Configuring Redis for ASP.NET Core Session Store(转载)
    Configuring Redis Session State In ASP.NET Core(转载)
    http请求端口占用异常——处理思路
    在pods中添加有关httpclient的 压力测试 & 监控
    Singleton HttpClient? Beware of this serious behaviour and how to fix it
    HttpClient 之 CLOSE_WAIT
    HttpClient的使用
    HttpClient连接池之CLOSE_WAIT
  • 原文地址:https://www.cnblogs.com/wangprince2017/p/8025095.html
Copyright © 2011-2022 走看看