将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\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与真实网络相连接的更多相关文章
- monkey工具使用中遇到的问题之一:手机模拟器中的部分应用出现网络无法连接
问题描述: 手机模拟器中的部分应用出现网络无法连接,但是比如:浏览器即可以正常访问网页 解决方法如下: 1.以管理员身份进入到cmd中,以WIN10为例 ,在电脑左下角点击鼠标右键就可以看到 注意: ...
- Reachability(判断网络是否连接)
类似于一个网络状况的探针. [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabili ...
- 判断网络是否连接 和 判断GPS是否连接
//判断网络是否连接 public static Boolean isNetworkEnabled(Context context){ int status=-1 //设置默认连接的状态为-1 Co ...
- android 检测网络是否连接,或者GPS是否可用
很多android程序在打开时,检测网络是否连接,或者GPS是否可用: 1.网络是否连接(包括Wifi和移动网络) // 是否有可用网络 private boolean isNetworkConnec ...
- Android判断网络是否连接
<!-- 配置文件判断网络是否连接 --> <uses-permission android:name="android.permission.ACCESS_NETWORK ...
- android 判断网络是否连接
package com.liucanwen.baidulocation.util; import android.app.Activity; import android.content.Contex ...
- Reachability判断网络是否连接
类似于一个网络状况的探针. [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(reachabili ...
- c# 网络是否连接
c# 网络是否连接 方案一: using System; using System.Collections.Generic; using System.Linq; using System.Text ...
- javascript 网络是否连接的几种方案
js 网络是否连接的几种方案 1.通过html5的新属性: window.onload = function () { var isOnLine = navigator.on ...
随机推荐
- cookie的读入和读出
写入cookie中 在mvc的控制器中 HttpCookie GetUserID = new HttpCookie("uID", 要保存的值); GetUserID.Expires ...
- HttpClent4.3 的例子
package com.unbank.robotspider.util; import java.io.IOException; import java.net.MalformedURLExcepti ...
- php的amqp扩展set导致内存溢出
最近做的一个项目中需要用到rabbitmq,按照自己的之前的一篇文章http://www.cnblogs.com/mingaixin/archive/2012/10/28/2743807.html进行 ...
- hdu 1398 Square Coins(简单dp)
Square Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Pro ...
- 动手学习TCP:TCP特殊状态
前面两篇文章介绍了TCP状态变迁,以及通过实验演示了客户端和服务端的正常状态变迁. 下面就来看看TCP状态变迁过程中的几个特殊状态. SYN_RCVD 在TCP连接建立的过程中,当服务端接收到[SYN ...
- [转]轻松学习Ionic (四) 修改应用图标及添加启动画面(更新官方命令行工具自动生成)
本文转自:http://blog.csdn.net/zapzqc/article/details/42237935 由于Ionic更新了命令行工具,以后修改应用图标和添加启动画面就简单了,最新方法见最 ...
- Hello world S.B.S.
#include <iostream> #include <conio.h> #include<cstdio> #include<cstring> #i ...
- RPC(远程过程调用)的应用
接触背景 因为工作上某项目的需要设计一种分布式处理耗时的运算,每个节点然后将运算结果返回给中心服务器,而最初未了解RPC这部分之前我的设计是在每一个RPC服务器上搭建一个webserver,然后部署运 ...
- 【ASP.NET 进阶】根据IP地址进行百度地图定位
昨天有完成一个[ASP.NET 进阶]根据IP返回对应位置信息 的小Demo,既然可以通过IP获得位置信息,那当然可以通过位置信息的经纬度获取IP的当前定位了,虽然与实际地址偏移较大,毕竟不是GPRS ...
- 【CSS】颜色码对照表
英文代码 形像颜色 HEX格式 RGB格式 LightPink 浅粉色 #FFB6C1 255,182,193 Pink 粉红 #FFC0CB 255,192,203 Crimson 猩红 #DC14 ...