Mininet学习教程——测量路径的损耗率

简介:

基于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()
目录
相关文章
|
4月前
|
传感器 C++ 计算机视觉
【opencv3】详述PnP测距完整流程(附C++代码)
【opencv3】详述PnP测距完整流程(附C++代码)
|
7月前
|
定位技术
gazebo小车模拟环境运行
gazebo小车模拟环境运行
|
8月前
|
弹性计算 数据安全/隐私保护 计算机视觉
|
9月前
|
算法
算法训练Day39|62.不同路径 ● 63. 不同路径 II
算法训练Day39|62.不同路径 ● 63. 不同路径 II
|
9月前
|
机器学习/深度学习 机器人 中间件
ubuntu16.04下ROS操作系统学习笔记(五)gazebo物理仿真环境搭建、加载服务端模型数据减少报错
ubuntu16.04下ROS操作系统学习笔记(五)gazebo物理仿真环境搭建、加载服务端模型数据减少报错
130 0
|
10月前
|
前端开发
DSP开发软件css(10)使用基础(汉化、工程导入、设置目标配置文件、选择仿真器和芯片型号、添加文件|库路径、编译下载等操作)
DSP开发软件css(10)使用基础(汉化、工程导入、设置目标配置文件、选择仿真器和芯片型号、添加文件|库路径、编译下载等操作)
113 0
|
12月前
|
传感器 监控 网络协议
【毕设参考】ESP32 + HaaS Python 打造的噪音检测系统,远离喧嚣,安享静谧
【毕设参考】ESP32 + HaaS Python 打造的噪音检测系统,远离喧嚣,安享静谧
170 0
|
算法 前端开发 芯片
[静态时序分析简明教程(二)] 基础知识:建立时间、保持时间、违例修复及时序分析路径
[静态时序分析简明教程(二)] 基础知识:建立时间、保持时间、违例修复及时序分析路径
[静态时序分析简明教程(二)] 基础知识:建立时间、保持时间、违例修复及时序分析路径
|
机器人 开发工具 C++
探究--gazebo里 关节是如何动起来的____撸源码探究ros gazebo里的 硬件抽象构建
探究--gazebo里 关节是如何动起来的____撸源码探究ros gazebo里的 硬件抽象构建
探究--gazebo里 关节是如何动起来的____撸源码探究ros  gazebo里的 硬件抽象构建