基于Mininet测量路径的损耗率

控制器采用POX,基于OVS仿真

Mininet脚本

  1. 创建Node mininet.node Node
  2. 创建链路连接 mininet.link TCLink
  3. 设置intf link.intf1 link.intf2
    • node.intf1.setMAC()
  4. 配置HOST
    • node.setIP()
  5. 配置vswitch
    • bridge node.cmd("ovs-vsctl addr-br dp0")
  6. 设置controller contrller -v ptcp: &
  7. 绑定端口与对应的网桥
    • vswitch上的端口号 switch.intfs.values()
    • ovs-vsctl add-port br0 %s % intf
  8. 设置控制器 ovs-vsctl set-controller dp0:127.0.0.1:6653
  9. 检测是否连接成功,'is_connected' not in quietRun('ovs-vsctl show')
  10. ping测试
  11. 停止网络
    • controller.cmd("kill %" + cname)
    • 删除网桥
    • 删除端口

概念补充

  • network space

在专业的网络世界中,经常使用到Virtual Routing and Forwarding(VRF),比如Cisco,Alcatel-Lucent, Juniper 等。对于L2 switch,自从上世纪90年代就开始使用VLAN,一个物理交换机上可以使用多个广播域,如今大多数交换机都支持4K vlan。

这个概念被引入到L3,如今很多网络设备支持VRF。这意味着,单个物理设备上可运行多个虚拟路由(L3 转发实例)。

在linux中,VRF被叫做“network namespace”,当然了linux中还包括其他namespace,不过本文不讨论。

每个network namespace拥有其对应的路由表(routing table)& 其对应的iptables,并且运行程序运行其中。 为什么有人使用它?比如一个运行在linux上的 Firewall,将firewall的所有服务端口分配给一个network namespace,这样,默认的network namespace 和 Firewall network namespace就运行着不同的路由表。像SSH这样的application运行在默认的network namespace,但是不在Firewall network namespace。

详解:https://www.cnblogs.com/linux-wangkun/p/5750246.html

参考资料

(Mininet Python API Reference Manual)[http://mininet.org/api/annotated.html]

#!/usr/bin/python
#coding:utf-8 from mininet.net import Mininet
from mininet.node import Node
from mininet.link import TCLink
from mininet.log import setLogLevel, info
from threading import Timer
from mininet.util import quietRun
from time import sleep def myNet(cname='controller', cargs='-v ptcp:'):
# Create network from scratch using Open vSwitch
info("*** Creating nodes\n")
controller = Node('c0', inNamespace=False)
switch = Node('s0', inNamespace=False)
switch1 = Node('s1', inNamespace=False)
h0 = Node('h0')
h1 = Node('h1') info("*** Creating links\n")
linkopts0 = dict(bw=100, delay='1ms', loss=0)
linkopts1 = dict(bw=100, delay='1ms', loss=10)
link0 = TCLink(h0, switch, **linkopts0)
link1 = TCLink(switch, switch1, **linkopts1)
link2 = TCLink(h1, switch1, **linkopts0) # set mac to vDevice
link0.intf2.setMAC("0:0:0:0:0:1")
link1.intf1.setMAC("0:0:0:0:0:2")
link1.intf2.setMAC("0:1:0:0:0:1")
link2.intf2.setMAC("0:1:0:0:0:2") info("*** Configuring hosts\n")
h0.setIP('192.168.123.1/24')
h1.setIP('192.168.123.2/24') info("*** Starting network using Open vSwitch\n")
switch.cmd('ovs-vsclt del-br dp0')
switch.cmd('ovs-vsctl add-br dp0')
switch1.cmd('ovs-vsctl del-br dp1')
switch1.cmd('ovs-vsctl add-br dp1') controller.cmd(cname + ' ' + cargs + '&')
for intf in switch.intfs.values():
print intf
print switch.cmd('ovs-vsctl add-port dp0 %s' % intf)
for intf in switch1.intfs.values():
print intf
print switch1.cmd('ovs-vsctl add-port dp1 %s' % intf) # Note: controller and switch are in root namspace, and we
# can connect via loopback interface
switch.cmd('ovs-vsctl set-controller dp0:127.0.0.1:6633')
switch1.cmd('ovs-vsctl set-controller dp1 tcp:127.0.0.1:6633') info('*** Waiting for switch to connect to controller')
while 'is_connected' not in quietRun('ovs-vsctl show'):
sleep(1)
info('.')
info('\n') # info("*** Running test\n")
h0.cmdPrint('ping -Q 0x64 -c 20 ' + h1.IP()) sleep(1)
info("*** Stopping network\n")
controller.cmd('kill %' + cname)
switch.cmd('ovs-vsctl del-br dp0')
switch.deleteIntfs()
switch1.cmd('ovs-vsctl del-br dp1')
switch1.defaultIntf()
info('\n') if __name__ == "__main__":
setLogLevel('info')
info('*** Scratch networkd demo (kernel datapath)\n')
Mininet.init()
myNet()

基于Mininet测量路径的损耗率的更多相关文章

  1. Mininet实验 基于Mininet测量路径的损耗率

    实验原理 在SDN环境中,控制器可以通过对交换机下发流表操作来控制交换机的转发行为,此外,还可以利用控制器测量路径的损耗率.在本实验中,基于Mininet脚本,设置特定的交换机间的路径损耗速率,然后编 ...

  2. Mininet系列实验(四):基于Mininet测量路径的损耗率

    1 实验目的 熟悉Mininet自定义拓扑脚本的编写与损耗率的设定: 熟悉编写POX脚本,测量路径损耗速率 2 实验原理 在SDN环境中,控制器可以通过对交换机下发流表操作来控制交换机的转发行为,此外 ...

  3. 实验 3:Mininet 实验——测量路径的损耗率

    实验目的 在实验 2 的基础上进一步熟悉 Mininet 自定义拓扑脚本,以及与损耗率相关的设 定:初步了解 Mininet 安装时自带的 POX 控制器脚本编写,测试路径损耗率. 实验任务 h0 向 ...

  4. SDN实验 3: Mininet 实验——测量路径的损耗率

    验 3:Mininet 实验--测量路径的损耗率 一.实验目的 在实验 2 的基础上进一步熟悉 Mininet 自定义拓扑脚本,以及与损耗率相关的设定:初步了解 Mininet 安装时自带的 POX ...

  5. 软件定义网络实验记录③--Mininet 实验——测量路径的损耗率

    一.实验目的 在实验 2 的基础上进一步熟悉 Mininet 自定义拓扑脚本,以及与损耗率相关的设定: 初步了解 Mininet 安装时自带的 POX 控制器脚本编写,测试路径损耗率. 二.实验任务 ...

  6. 实验 3:Mininet 实验——测量路径的损耗率

    一.实验目的 在实验 2 的基础上进一步熟悉 Mininet 自定义拓扑脚本,以及与损耗率相关的设定;初步了解 Mininet 安装时自带的 POX 控制器脚本编写,测试路径损耗率. 二.实验任务 h ...

  7. Mininet实验 测量路径损耗率

    参照:基于Mininet测量路径的损耗率 在SDN环境中,可以利用控制器来测量特定路径的损耗率,在本实验中,基于Mininet脚本,设置特定的交换机间的路径损耗速率,然后编写POX脚本,实现对路径的损 ...

  8. Mininet实验 基于Mininet实现BGP路径挟持攻击实验

    参考:基于Mininet实现BGP路径挟持攻击实验 实验目的: 掌握如何mininet内模拟AS. 掌握BGP路径挟持的原理和分析过程. 实验原理: 互联网是由相互连接的自治系统AS组成的,通过一个通 ...

  9. Mininet实验 OpenFlow1.3协议基于Mininet部署与验证

    参照:OpenFlow1.3协议基于Mininet部署与验证 安装过程,参考原文. 实验 使用ifconfig查看本机IP地址:192.168.1.101 进入OpenDayLight界面,cd到bi ...

随机推荐

  1. linux 下线程错误查找,与线程分析命令

    一. 使用top和jstack查找线程错误 我们使用jdk自带的jstack来分析.当linux出现cpu被java程序消耗过高时,以下过程说不定可以帮上你的忙: 1.top查找出哪个进程消耗的cpu ...

  2. 【腾讯敏捷转型No.3】Scrum有什么好?

    在敏捷转型的过程中,除了敏捷宣言中的四个价值观和十二条原则以外,并没有太多比较权威的理论实践. 如图一,敏捷宣言中的四个价值观: (图一) 四条敏捷核心价值观指出了敏捷的核心思想,但是并没有仔细说明具 ...

  3. Spring boot 零配置开发微服务

    2018年12月29日星期六 体验Spring boot 零配置开发微服务 1.为什么要用Spring  boot? 1.1 简单方便.配置少.整合了大多数框架 1.2 适用于微服务搭建,搭建的微服务 ...

  4. C++ C# VC VC.net以及VC++有什么区别和联系?

    C/C++是编程语言,C是C++的爸爸,也就是说C++从C发展而来,而C++完全兼容C的语法.国际上有一个专门管理C++的机构,它们负责C++的标准制定. VC++是微软公司的C++编译环境,使用它可 ...

  5. mysql数据库用户密码管理

    创建用户:create user 'oracle'@'localhost' identified by 'password'; MySQL 8以上:alter user 'root'@'localho ...

  6. 基于Centos7系统部署cobbler批量安装系统

    前言 cobbler是一个可以实现批量安装系统的Linux应用程序.它有别于pxe+kickstart,cobbler可以实现同个服务器批量安装不同操作系统版本 系统环境的准备及下载cobbler 一 ...

  7. mac安装配置mysql

    目录 mac安装配置mysql 1.mysql的安装 2.设置root用户的密码 3.分别执行一下命令 4.配置mysql环境变量 mac安装配置mysql 1.mysql的安装 ​ 安装过程十分简单 ...

  8. 怎样获取最新版的javascript文件,解决被浏览器缓存的问题

    假设有一个js文件(以jquery为例),在服务器上的URL地址为:../js/jquery.js . 当某天jquery版本更新了,用最新版的jquery文件覆盖了原来旧版的jquery文件. 这时 ...

  9. VUE 跳转另一页面返回之前页面刷新,但数据依然存在

    在第一个页面填写数据后存入本地缓存: 再次跳转回来时判断是否填入数据,如果有数据,将缓存数据填写上.

  10. MongoDB DBA 实践3-----安装mongdb4.0发生错误

    在安装mongodb时,常常会出现一些错误,导致无法安装完全,下面则是各种错误与它们的解决方法: 1.在window机安装mongodb4.0, 其中的一种:由于缺失系统补丁,而导致无法完全安装,具体 ...