一、实验目的

Mininet 安装之后,会连带安装 Open vSwitch,可以直接通过 Python 脚本调用

Open vSwitch 命令,从而直接控制 Open vSwitch,通过实验了解调用控制的方法。

二、实验任务``

在本实验中,使用 Mininet 基于 Python 的脚本,调用“ovs-vsctl”命令直接控制

Open vSwitch。使用默认的交换机泛洪规则,设置更高的优先级规则进行预先定

义 IP 报文的转发。在多个交换机中通过设置不同 TOS 值的数据包将通过不同的

方式到达目的地址,验证主机间的连通性及到达目的地址的时间。

三、实验步骤

  1. 实验环境

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

    SDNLAB 实验参考资料:https://www.sdnlab.com/15083.html

    创建ovsMyVlanBr.py 脚本并运行

    ovsMyVlanBr.py对应的拓扑图如下:



    ovsMyVlanBr.py代码如下:
  1. #!/usr/bin/python
  2. from mininet.net import Mininet
  3. from mininet.node import Node
  4. from mininet.link import TCLink
  5. from mininet.log import setLogLevel, info
  6. def myNet():
  7. "Create network from scratch using Open vSwitch."
  8. info( "*** Creating nodes\n" )
  9. switch0 = Node( 's0', inNamespace=False )
  10. switch1 = Node( 's1', inNamespace=False )
  11. h0 = Node( 'h0' )
  12. h1 = Node( 'h1' )
  13. h2 = Node( 'h2' )
  14. h3 = Node( 'h3' )
  15. info( "*** Creating links\n" )
  16. linkopts0=dict(bw=100, delay='1ms', loss=0)
  17. linkopts1=dict(bw=1, delay='100ms', loss=0)
  18. TCLink( h0, switch0, **linkopts0)
  19. TCLink( h1, switch0, **linkopts0)
  20. TCLink( h2, switch1, **linkopts0)
  21. TCLink( h3, switch1, **linkopts0)
  22. TCLink( switch0, switch1, **linkopts1)
  23. info( "*** Configuring hosts\n" )
  24. h0.setIP( '192.168.123.1/24' )
  25. h1.setIP( '192.168.123.2/24' )
  26. h2.setIP( '192.168.123.3/24' )
  27. h3.setIP( '192.168.123.4/24' )
  28. info( str( h0 ) + '\n' )
  29. info( str( h1 ) + '\n' )
  30. info( str( h2 ) + '\n' )
  31. info( str( h3 ) + '\n' )
  32. info( "*** Starting network using Open vSwitch\n" )
  33. switch0.cmd( 'ovs-vsctl del-br dp0' )
  34. switch0.cmd( 'ovs-vsctl add-br dp0' )
  35. switch1.cmd( 'ovs-vsctl del-br dp1' )
  36. switch1.cmd( 'ovs-vsctl add-br dp1' )
  37. for intf in switch0.intfs.values():
  38. print intf
  39. print switch0.cmd( 'ovs-vsctl add-port dp0 %s' % intf )
  40. for intf in switch1.intfs.values():
  41. print intf
  42. print switch1.cmd( 'ovs-vsctl add-port dp1 %s' % intf )
  43. print switch0.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')
  44. print switch0.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')
  45. print switch0.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp0 priority=1,dl_vlan=0,actions=pop_vlan,output:1')
  46. print switch0.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp0 priority=1,dl_vlan=1,actions=pop_vlan,output:2')
  47. 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')
  48. 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')
  49. print switch1.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp1 priority=1,dl_vlan=0,actions=pop_vlan,output:1')
  50. print switch1.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp1 priority=1,dl_vlan=1,actions=pop_vlan,output:2')
  51. #print switch0.cmd(r'ovs-ofctl add-flow dp0 idle_timeout=0,priority=10,ip,nw_dst=192.168.123.2,actions=output:4')
  52. #print switch0.cmd(r'ovs-ofctl add-flow dp0 idle_timeout=0,priority=10,ip,nw_dst=192.168.123.1,actions=output:1')
  53. #switch0.cmd('tcpdump -i s0-eth0 -U -w aaa &')
  54. #h0.cmd('tcpdump -i h0-eth0 -U -w aaa &')
  55. info( "*** Running test\n" )
  56. h0.cmdPrint( 'ping -Q 0x10 -c 3 ' + h1.IP() )
  57. h0.cmdPrint( 'ping -Q 0x20 -c 3 ' + h2.IP() )
  58. h0.cmdPrint( 'ping -Q 0x30 -c 3 ' + h3.IP() )
  59. h1.cmdPrint( 'ping -Q 0x40 -c 3 ' + h2.IP() )
  60. h1.cmdPrint( 'ping -Q 0x50 -c 3 ' + h3.IP() )
  61. h2.cmdPrint( 'ping -Q 0x60 -c 3 ' + h3.IP() )
  62. #h1.cmdPrint('iperf -s -p 12345 -u &')
  63. #h0.cmdPrint('iperf -c ' + h1.IP() +' -u -b 10m -p 12345 -t 10 -i 1')
  64. #print switch0.cmd( 'ovs-ofctl show dp0' )
  65. #print switch1.cmd( 'ovs-ofctl show dp1' )
  66. #print switch2.cmd( 'ovs-ofctl show dp2' )
  67. #print switch3.cmd( 'ovs-ofctl show dp3' )
  68. #print switch4.cmd( 'ovs-ofctl show dp4' )
  69. #print switch0.cmd( 'ovs-ofctl dump-tables dp0' )
  70. #print switch0.cmd( 'ovs-ofctl dump-ports dp0' )
  71. #print switch0.cmd( 'ovs-ofctl dump-flows dp0' )
  72. #print switch0.cmd( 'ovs-ofctl dump-aggregate dp0' )
  73. #print switch0.cmd( 'ovs-ofctl queue-stats dp0' )
  74. #print "Testing video transmission between h1 and h2"
  75. #h1.cmd('./myrtg_svc -u > myrd &')
  76. #h0.cmd('./mystg_svc -trace st 192.168.123.2')
  77. info( "*** Stopping network\n" )
  78. switch0.cmd( 'ovs-vsctl del-br dp0' )
  79. switch0.deleteIntfs()
  80. switch1.cmd( 'ovs-vsctl del-br dp1' )
  81. switch1.deleteIntfs()
  82. info( '\n' )
  83. if __name__ == '__main__':
  84. setLogLevel( 'info' )
  85. info( '*** Scratch network demo (kernel datapath)\n' )
  86. Mininet.init()
  87. myNet()

上述代码将 h0 和 h2 划分在 VLAN 0 中,h1 和 h3 划分在 VLAN 1 中,由于拓扑没

有控制器,并且初始化时删除了交换机中的所有流表,因此除非下发流表,否则

主机之间网络无法连通。通过尝试修改代码,利用 ovs 命令直接下发 VLAN 设置的

流表项,最终测试 h0 和 h2 互通,h1 和 h3 互通,其余主机均不通,结果如下图。





软件定义网络实验记录④--Open vSwitch 实验——Mininet 中使用 OVS 命令的更多相关文章

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

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

  2. 实验 4: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. 软件定义网络实验记录②--Mininet 实验——拓扑的命令脚本生成

    一.实验目的 掌握 Mininet 的自定义拓扑生成方法:命令行创建.Python 脚本编写 二.实验任务 通过使用命令行创建.Python 脚本编写生成拓扑,熟悉 Mininet 的基本功能. 三. ...

  5. 软件定义网络实验记录⑤--OpenFlow 协议分析和 OpenDaylight 安装

    一.实验目的 回顾 JDK 安装配置,了解 OpenDaylight 控制的安装,以及 Mininet 如何连接: 通过抓包获取 OpenFlow 协议,验证 OpenFlow 协议和版本,了解协议内 ...

  6. 软件定义网络(SDN)第二次实验报告

    目录 实验 2 :Mininet 实验--拓扑的命令脚本生成 一.实验目的 二.实验任务 三.实验要求 四.具体实验步骤 引导实验 Part 1 引导实验 Part 2 本周实验任务完成流程 五.注意 ...

  7. 使用Scapy向Mininet交换机注入流量 实验记录

    使用Scapy向Mininet交换机注入流量 实验记录 用Python脚本及Scapy库写了一个简单的流量生成脚本,并打算使用该脚本往Mininet中的OpenvSwitch交换机注入流量.拓扑图如下 ...

  8. Mininet系列实验(五):Mininet设置带宽之简单性能测试

    1.实验目的 该实验通过Mininet学习python自定义拓扑实现,可在python脚本文件中设计任意想要的拓扑,简单方便,并通过设置交换机和主机之间链路的带宽.延迟及丢包率,测试主机之间的性能.在 ...

  9. Mininet系列实验(三):Mininet命令延伸实验扩展

    1 实验目的 熟悉Mininet自定义拓扑三种实现方式:命令行创建.Python脚本编写.交互式界面创建. 2 实验原理 Mininet 是一个轻量级软件定义网络和测试平台:它采用轻量级的虚拟化技术使 ...

随机推荐

  1. idea创建web项目,不能自动导入tomcat包,导致调用request的方法时,无法正常调用

    问题现象 分析原因 reques不能正常调用它的各种方法是因为没有导入tomcat包,所以不能正常调用request对象中的各种方法. 解决办法 ================== ======== ...

  2. python爬虫-爬取百度图片

    python爬虫-爬取百度图片(转) #!/usr/bin/python# coding=utf-8# 作者 :Y0010026# 创建时间 :2018/12/16 16:16# 文件 :spider ...

  3. PHP - 附件下载

    <?php $file_name = "textuse.zip";//下载文件名 $file_dir = "E:/www/xiazaiwenjian/"; ...

  4. 让这个Java语言的开源商城系统火起来

    Java是一门非常优秀的面向对象编程语言,功能强大且简单易用,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,凭借其简单性.面向对象.分布式.健壮性.安全性.平台独立与可 ...

  5. MySQL 增删查改 必知必会

    MySQL 数据库中的基础操作 3.表的修改 对表的表名.字段.字段类型.字段长度.约束等进行修改. 3.1 表的名称修改 -- 语法: ALTER TABLE 库名.表名 RENAME TO 新表名 ...

  6. 深入了解Netty【八】TCP拆包、粘包和解决方案

    1.TCP协议传输过程 TCP协议是面向流的协议,是流式的,没有业务上的分段,只会根据当前套接字缓冲区的情况进行拆包或者粘包: 发送端的字节流都会先传入缓冲区,再通过网络传入到接收端的缓冲区中,最终由 ...

  7. My Github Repository

    最近在Github上整了个Repository来保存打过的比赛的代码,包括Codeforces,Google Code Jam和Google Kick Start等,之后应该也会搞一点刷题的代码. 之 ...

  8. RGB打水印在YUV图片上

    一. 概述 将RGB图片打在YUV上需要注意的是, 字体之外应该透明, 否则背景也会被覆盖不好看,  所以RGB必须有透明度,  本测试格式为BMP ARGB8888(也即B是最低字节, A是最高字节 ...

  9. Mybatis源码学习第七天(插件源码分析)

    为了不把开发和源码分析混淆,决定分开写; 接下来分析一下插件的源码,说道这里老套路先说一个设计模式,他就是责任链模式 责任链模式:就是把一件工作分别经过链上的各个节点,让这些节点依次处理这个工作,和装 ...

  10. redis基础数据结构及编码方式

    redis基础数据结构和编码方式 一.基础数据结构 1)简单动态字符串 2)双端链表 3)字典 4)跳跃表 5)整数集合 6)压缩列表 二.对象类型与编码 在redis的数据库中创建一个新的键值对时, ...