zoukankan      html  css  js  c++  java
  • 将Mininet与真实网络相连接

    原文发表在我的博客主页,转载请注明出处

    前言

    Mininet是SDN网络仿真的一大利器,在小规模网络模拟使用上独领风骚,其开源性允许使用者按照自己的需求修改源码,得到想要的数据,其提供了多个函数用来满足用户的需求,十分方便。
    OpenvSwitch(OVS)是一个基于Linux内核的虚拟交换机,可以取代Linux网络协议栈,并且效果十分好,OVS的应用十分广泛,在云计算和SDN网络虚拟化中都有重要的应用平台。
    有的时候,我们需要Mininet模拟的网络和真实网络通信,利用OVS搭建一个网桥,便可以实现这样的功能。

    原理

    以例子来讲解,有如下场景,在一个host上面用Mininet搭建了一个网络,这个网络有两个主机h1和h2,一个交换机s1,一个控制器c0,将交换机s1和主机host的网口绑定,原理图如下:

    Mininet创建拓扑的方法

    Mininet创建拓扑主要有两种方法:

    • 创建一个拓扑类,在命令行通过--topo选项指定使用此拓扑
    • Mininet支持参数化拓扑,通过python代码创建一个灵活的拓扑结构,而且可以灵活实现额外的功能需求,本文就是使用这种方式创建拓扑的

    代码解析

    源代码见github
    源码需要注意的注释如下:

    #!/usr/bin/env python
    import os
    from mininet.net import Mininet
    from mininet.node import Controller, RemoteController
    from mininet.cli import CLI
    from mininet.link import Intf
    from mininet.log import setLogLevel, info
    
    def ToRealnet():
    
        net = Mininet( topo=None, build=False)
    
        info( '*** Adding controller
    ' )
        net.addController(name='cotyb')
    
        info( '*** Add switches
    ')
        s1 = net.addSwitch('s1')
        
        info( '*** Add hosts
    ')
        h1 = net.addHost('h1', ip='0.0.0.0')
        h2 = net.addHost('h2', ip='0.0.0.0')
    
        info( '*** Add links
    ')
        net.addLink(h1, s1)
        net.addLink(h2, s1)
        
        info( '*** Starting network
    ')
        net.start()
        os.popen('ovs-vsctl add-port s1 eth0')       #绑定s1和host的eth0接口
        h1.cmdPrint('dhclient '+h1.defaultIntf().name)      #给h1的网口用DHCP动态分配IP
        h2.cmdPrint('dhclient '+h2.defaultIntf().name)      ##给h2的网口用DHCP动态分配IP
        CLI(net)
        net.stop()
    
    if __name__ == '__main__':
        setLogLevel( 'info' )
        ToRealnet()
    
    

    实验

    通过python运行源代码生成拓扑,然后用xterm h1打开h1的终端,使用*ifconfig命令,结果如下图,可以看出红框中的IP地址:192.168.29.179,和host处于同一网段,而且多次运行,发现分配的IP是不一样的,说明是动态分配的

    接下来再在h1的终端下ping和host统一网段的主机,结果如下:

    总结

    通过上面的原理和实验,可以看出成功的将Mininet中的网络和实际网络结合在了一起,这在某些场合是十分有用的

  • 相关阅读:
    Grafana 监控系统是否重启
    Grafana 短信报警
    Python 协程检测Kubernetes服务端口
    python过滤 Kubernetes api数据
    django 实现文件下载功能
    python tar.gz格式压缩、解压
    kafka查看消费数据
    SublimeText设置在浏览器打开 快捷键
    php如何优雅地把数组传递给前端js脚本?
    jQuery因mouseover,mouseout冒泡产生的闪烁问题
  • 原文地址:https://www.cnblogs.com/cotyb/p/5161820.html
Copyright © 2011-2022 走看看