一、安装目的

Mininet 安装之后,会连带安装 Open vSwitch,可以直接通过 Python 脚本调用Open vSwitch 命令,从而直接控制 Open vSwitch,通过实验了解调用控制的方法。

二、实验任务

在本实验中,使用 Mininet 基于 Python 的脚本,调用“ovs-vsctl”命令直接控制Open vSwitch。使用默认的交换机泛洪规则,设置更高的优先级规则进行预先定义 IP 报文的转发。在多个交换机中通过设置不同 TOS 值的数据包将通过不同的方式到达目的地址,验证主机间的连通性及到达目的地址的时间。

三、实验步骤

  1. 实验环境

    安装了 Ubuntu 18.04.5 Desktop amd64 的虚拟机
  2. 实验过程

    (1) 创建 ovsSingleBr.py 脚本并添加内容

    脚本对应的拓扑如上图所示,执行 ovsSingleBr.py,在没有控制器的情况下,在Mininet 脚本中通过调用 ovs 命令直接向 switch0 交换机下发流表,将入端口号为1/2/3 的数据包泛洪广播,并对目的地址为 192.168.123.1/2/3 的数据包分别从1/2/3 端口转发出去。之后测试 h0 ping h1,h0 ping h2,网络连通。



    (2)创建 ovsMultiBr.py 脚本并添加内容

    脚本对应的拓扑如上图所示,执行 ovsMultiBr.py,在没有控制器的情况下,在Mininet 脚本中通过调用 ovs 命令给多个交换机下发流表,通过 h0 ping h1 操作测试验证主机间的连通性,并通过-Q 参数设置不通的 tos 值查看主机间的连通性。通过验证发现,tos 值设置越大,时间使用越少。



(3)创建 ovsVLAN.py 脚本并添加内容

学习 ovsSingleBr.py 和 ovsMultiBr.py,在下图拓扑中实现一个 VLAN。



通过代码将 h0 和 h2 划分在 VLAN 0 中,h1 和 h3 划分在 VLAN 1 中,由于拓扑没有控制器,并且初始化时删除了交换机中的所有流表,因此除非下发流表,否则主机之间网络无法连通。请尝试修改代码,利用 ovs 命令直接下发 VLAN 设置的流表项,最终测试 h0 和 h2 互通, h1 和 h3 互通,其余主机均不通。

 #!/usr/bin/python

from mininet.net import Mininet
from mininet.node import Node
from mininet.link import TCLink
from mininet.log import setLogLevel, info def myNet():
"Create network from scratch using Open vSwitch." info( "*** Creating nodes\n" )
switch0 = Node( 's0', inNamespace=False )
switch1 = Node( 's1', inNamespace=False )
h0 = Node( 'h0' )
h1 = Node( 'h1' )
h2 = Node( 'h2' )
h3 = Node( 'h3' ) info( "*** Creating links\n" )
linkopts0=dict(bw=100, delay='1ms', loss=0)
linkopts1=dict(bw=1, delay='100ms', loss=0)
linkopts2=dict(bw=10, delay='50ms', loss=0)
linkopts3=dict(bw=100, delay='1ms', loss=0)
TCLink( h0, switch0, **linkopts0)
TCLink( h1, switch0, **linkopts0)
TCLink( h2, switch1, **linkopts0)
TCLink( h3, switch1, **linkopts0)
TCLink( switch0, switch1, **linkopts0) info( "*** Configuring hosts\n" )
h0.setIP( '192.168.123.1/24' )
h1.setIP( '192.168.123.2/24' )
h2.setIP( '192.168.123.3/24' )
h3.setIP( '192.168.123.4/24' )
info( str( h0 ) + '\n' )
info( str( h1 ) + '\n' )
info( str( h2 ) + '\n' )
info( str( h3 ) + '\n' ) info( "*** Starting network using Open vSwitch\n" )
switch0.cmd( 'ovs-vsctl del-br dp0' )
switch0.cmd( 'ovs-vsctl add-br dp0' )
switch1.cmd( 'ovs-vsctl del-br dp1' )
switch1.cmd( 'ovs-vsctl add-br dp1' ) for intf in switch0.intfs.values():
print intf
print switch0.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 ) print switch1.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp0 priority=1,in_port=1,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:3' )
print switch1.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp0 priority=1,in_port=2,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:3' )
print switch1.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp0 priority=1,dl_vlan=0,actions=pop_vlan,output:1' )
print switch1.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp0 priority=1,dl_vlan=1,actions=pop_vlan,output:2' ) print switch1.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp1 priority=1,in_port=1,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:3' )
print switch1.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp1 priority=1,in_port=2,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:3' )
print switch1.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp1 priority=1,dl_vlan=0,actions=pop_vlan,output:1' )
print switch1.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp1 priority=1,dl_vlan=1,actions=pop_vlan,output:2' ) info( "*** Running test\n" )
h0.cmdPrint( 'ping -Q 0x10 -c 3 ' + h1.IP() )
h0.cmdPrint( 'ping -Q 0x10 -c 3 ' + h2.IP() )
h0.cmdPrint( 'ping -Q 0x10 -c 3 ' + h3.IP() )
h1.cmdPrint( 'ping -Q 0x10 -c 3 ' + h2.IP() )
h1.cmdPrint( 'ping -Q 0x10 -c 3 ' + h3.IP() )
h2.cmdPrint( 'ping -Q 0x10 -c 3 ' + h3.IP() ) info( "*** Stopping network\n" )
switch0.cmd( 'ovs-vsctl del-br dp0' )
switch0.deleteIntfs()
switch1.cmd( 'ovs-vsctl del-br dp1' )
switch1.deleteIntfs()
info( '\n' ) if __name__ == '__main__':
setLogLevel( 'info' )
info( '*** Scratch network demo (kernel datapath)\n' )
Mininet.init()
myNet()

运行结果

实验 4:Open vSwitch 实验——Mininet 中使用 OVS 命令的更多相关文章

  1. 实验 4 :Open vSwitch 实验 —— Mininet 中使用 OVS 命令

    实验 4 :Open vSwitch 实验 -- Mininet 中使用 OVS 命令 一.实验目的 Mininet 安装之后,会连带安装 Open vSwitch,可以直接通过 Python 脚本调 ...

  2. 软件定义网络实验记录④--Open vSwitch 实验——Mininet 中使用 OVS 命令

    一.实验目的 Mininet 安装之后,会连带安装 Open vSwitch,可以直接通过 Python 脚本调用 Open vSwitch 命令,从而直接控制 Open vSwitch,通过实验了解 ...

  3. 实验 4:Open vSwitch 实验——Mininet 中使用 OVS 命令

    一.实验目的 Mininet 安装之后,会连带安装 Open vSwitch,可以直接通过 Python 脚本调用Open vSwitch 命令,从而直接控制 Open vSwitch,通过实验了解调 ...

  4. Android实验一(在Android Studio中创建项目和模拟器)

    北京电子科技学院(BESTI) 实     验    报     告 课程:移动平台开发         班级:1592 姓名:苏泽楠 学号:20159207 成绩:             指导教师 ...

  5. SDUT OJ 数据结构实验之二叉树八:(中序后序)求二叉树的深度

    数据结构实验之二叉树八:(中序后序)求二叉树的深度 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Probl ...

  6. SDUT-2804_数据结构实验之二叉树八:(中序后序)求二叉树的深度

    数据结构实验之二叉树八:(中序后序)求二叉树的深度 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 已知一颗二叉树的中序 ...

  7. 实验 6 :OpenDaylight 实验——OpenDaylight 及 Postman实现流表下发

    实验 6 :OpenDaylight 实验--OpenDaylight 及 Postman实现流表下发 一.实验目的 熟悉 Postman 的使用:熟悉如何使用 OpenDaylight 通过 Pos ...

  8. [nRF51822] 10、基础实验代码解析大全 · 实验15 - RTC

    一.实验内容: 配置NRF51822 的RTC0 的TICK 频率为8Hz,COMPARE0 匹配事件触发周期为3 秒,并使能了TICK 和COMPARE0 中断. TICK 中断中驱动指示灯D1 翻 ...

  9. [nRF51822] 9、基础实验代码解析大全 · 实验12 - ADC

    一.本实验ADC 配置 分辨率:10 位. 输入通道:5,即使用输入通道AIN5 检测电位器的电压. ADC 基准电压:1.2V. 二.NRF51822 ADC 管脚分布 NRF51822 的ADC ...

随机推荐

  1. 正则表达式断言精讲 Java语法实现

    目录 断言 1.2.3.1 情景导入 什么是断言 断言的语法规则 零宽断言为什么叫零宽断言 零宽 前行 负向 断言DEMO 断言的基础应用和实际用处 验证不包含 验证开头包含 验证开头包含且匹配到的数 ...

  2. Unimrcp通过Vendor传递随路数据

    摘要 项目中需要在MRCPV2的识别消息中,传递一些随路数据.

  3. vue前端获取env中的常量

    process.env.常量名   如:process.env.MIX_APP_URL

  4. Labview学习之路(五)按钮的机械动作

    布尔类型中有一个按钮是非常重要的控件,他不是只是表示一个确定,输出0或1,下边我们共同探讨一下他的机械动作 单击时转换 释放时转换 保持转换直到释放 单击时触发 释放时触发 保持触发直到释放 单击时转 ...

  5. WebStorm 运行Rect Native 项目

    今天教大家如何直接使用WebStorm这个IDE直接完成编码+运行项目工作.这样就可以不用打开Xcode了. 1.首先点击WebStorm右上方的下拉箭头弹出的Edit Configurations. ...

  6. Weights and Measures (贪心+dp)

    I know, up on top you are seeing great sights, But down at the bottom, we, too, should have rights. ...

  7. Kubernetes中资源清单与Pod的生命周期(二)

    一.资源清单 1,定义: 在k8s中一般使用yaml格式的文件来创建符合我们预期的资源,这样的yaml被称为资源清单. 使用资源清单创建Pod: kubectl apply -f nginx.yaml ...

  8. python应用 处理excel数据

    实现功能 excel表格中有4列数,分别为RMF计算得到的 β,γ,势能面及组态,需要挑选出相同 β 值下势能面最低时的组态.为了减小数据量,先将 β 值保留两位小数. 代码 import xlrd ...

  9. Vue 下拉刷新及无限加载组件

    原文  https://github.com/wangdahoo/vue-scroller 主题 Vue.js Vue Scroller Vue Scroller is a foundational ...

  10. 数据库连接池设计和实现(Java版本)

    1 前言 数据库连接池是目前系统开发必须面对和考虑的问题,原理并不复杂,主要是减少重复连接数据库的代价:在系统中创建预期数量的数据库连接,并将这些连接以一个集合或类似生活中的池一样管理起来,用到的时候 ...