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

前言

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\n' )
net.addController(name='cotyb') info( '*** Add switches\n')
s1 = net.addSwitch('s1') info( '*** Add hosts\n')
h1 = net.addHost('h1', ip='0.0.0.0')
h2 = net.addHost('h2', ip='0.0.0.0') info( '*** Add links\n')
net.addLink(h1, s1)
net.addLink(h2, s1) info( '*** Starting network\n')
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中的网络和实际网络结合在了一起,这在某些场合是十分有用的

将Mininet与真实网络相连接的更多相关文章

  1. monkey工具使用中遇到的问题之一:手机模拟器中的部分应用出现网络无法连接

    问题描述: 手机模拟器中的部分应用出现网络无法连接,但是比如:浏览器即可以正常访问网页 解决方法如下: 1.以管理员身份进入到cmd中,以WIN10为例 ,在电脑左下角点击鼠标右键就可以看到 注意: ...

  2. Reachability(判断网络是否连接)

    类似于一个网络状况的探针. [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabili ...

  3. 判断网络是否连接 和 判断GPS是否连接

    //判断网络是否连接 public static Boolean isNetworkEnabled(Context context){ int status=-1  //设置默认连接的状态为-1 Co ...

  4. android 检测网络是否连接,或者GPS是否可用

    很多android程序在打开时,检测网络是否连接,或者GPS是否可用: 1.网络是否连接(包括Wifi和移动网络) // 是否有可用网络 private boolean isNetworkConnec ...

  5. Android判断网络是否连接

    <!-- 配置文件判断网络是否连接 --> <uses-permission android:name="android.permission.ACCESS_NETWORK ...

  6. android 判断网络是否连接

    package com.liucanwen.baidulocation.util; import android.app.Activity; import android.content.Contex ...

  7. Reachability判断网络是否连接

    类似于一个网络状况的探针. [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabili ...

  8. c# 网络是否连接

    c#  网络是否连接 方案一: using System; using System.Collections.Generic; using System.Linq; using System.Text ...

  9. javascript 网络是否连接的几种方案

    js   网络是否连接的几种方案 1.通过html5的新属性: window.onload = function () {            var isOnLine = navigator.on ...

随机推荐

  1. linux修改open files数

    概要 linux系统默认open files数目为1024, 有时应用程序会报Too many open files的错误,是因为open files 数目不够.这就需要修改ulimit和file-m ...

  2. Spring依赖注入三种方式详解

    在讲解Spring依赖注入之前的准备工作: 下载包含Spring的工具jar包的压缩包 解压缩下载下来的Spring压缩包文件 解压缩之后我们会看到libs文件夹下有许多jar包,而我们只需要其中的c ...

  3. 机器学习五 -- 机器学习的“Hello World”,感知机

    机器学习五 -- 机器学习的“Hello World”,感知机 感知机是二类分类的线性分类模型,是神经网络和支持向量机的基础.其输入为实例的特征向量,输出为实例的类别,取+1和-1二值之一,即二类分类 ...

  4. 第一次配置Android环境

    配置Android环境,相信很多人都做过,而且网上的资料也一大堆,我就来分享一下我配置Android的心得吧! 第一步:下载好需要的文件:Android SDK.JDK.Eclipse.ADT ps: ...

  5. windows 下安装nginx

    1.首先去官网下载 nginxWindows版本,官网下载:http://nginx.org/en/download.html 选择最新版本,下载到软件包后,解压文件包到指定目录,例如我的目录是D:\ ...

  6. Ubuntu 安装JDK并配置成为默认的JDK

    Ubuntu安装JDK 系统版本:Ubuntu 15.04 x64 JDK版本:jdk-8u60-linux-x64 1.查看系统位数,输入以下命令即可 getconf LONG_BIT 2.下载对应 ...

  7. [书目20160218]微软软件研发的奥秘:MSF精髓

    目录 第一部分 解决方案交付基础 第1章 什么是MSF,它适合你吗 2 1.1 MSF的历史和起源 2 1.2 为什么是“框架” 3 1.3 MSF有何不同 5 1.4 MSF第四版的要素 5 1.5 ...

  8. 使用selenium实现右键另存为保存文件

    1.需要借住autoit工具和Robot类,下载地址:https://www.autoitscript.com/site/autoit/downloads/ 2.autoit的使用不再详细讲解.如下图 ...

  9. Angular 入门学习

    1.Hello World 入门 源代码 <!doctype html> <html ng-app> <head> <script src="htt ...

  10. Android应用中菜单(Menu)的位置显示问题

    http://blog.csdn.net/songjinshi/article/details/17381245 注意:为了适配4.0菜单能够横向显示,建议在activity中添加android:th ...