zoukankan      html  css  js  c++  java
  • 实验 4:Open vSwitch 实验——Mininet 中使用 OVS 命令

    一、实验目的

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

    二、实验任务

    • (1)在本实验中,使用 Mininet 基于 Python 的脚本,调用“ovs-vsctl”命令直接控制
      Open vSwitch。使用默认的交换机泛洪规则,设置更高的优先级规则进行预先定
      义 IP 报文的转发。在多个交换机中通过设置不同 TOS 值的数据包将通过不同的
      方式到达目的地址,验证主机间的连通性及到达目的地址的时间。
    • (2)将 h0 和 h2 划分在 VLAN 0 中,h1 和 h3 划分在 VLAN 1 中,由于拓扑没
      有控制器,并且初始化时删除了交换机中的所有流表,因此除非下发流表,否则
      主机之间网络无法连通。请尝试修改代码,利用 ovs 命令直接下发 VLAN 设置的
      流表项,最终测试 h0 和 h2 互通,h1 和 h3 互通,其余主机均不通,结果如下图。
      OVS 实现 VLAN 可参考博客:https://www.cnblogs.com/fjlinww/p/11791846.html

    三、实验步骤

    1. 实验环境

    安装了 Ubuntu 18.04.5 Desktop amd64 的虚拟机

    2. 实验过程

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

    · 在下图拓扑中实现一个 VLAN

    (1)编写ovsVLAN.py文件

    cd sdn
    nano ovsVLAN.py

    (2) 具体代码


    (3)流表分析

    S0

    #将主机h0、h1发送给交换机s0的数据包打上不同的vlan tag,并从s0的端口3向交换机s1转发
    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' )
    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' )
    #将发送给交换机s0端口3的数据包去除vlan tag,并根据不同的标签发送给相对应的主机
    print switch0(r'ovs-ofctl -O OpenFlow13 add-flow dp0 priority=1,dl_vlan=0,actions=pop_vlan,output:1' )
    print switch0(r'ovs-ofctl -O OpenFlow13 add-flow dp0 priority=1,dl_vlan=1,actions=pop_vlan,output:2' )
    

    S1

    #将主机h2、h3发送给交换机s1的数据包打上不同的vlan tag,并从s1的端口3向交换机s0转发
    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' )
    #将发送给交换机s1端口3的数据包去除vlan tag,并根据不同的标签发送给相对应的主机
    print switch1(r'ovs-ofctl -O OpenFlow13 add-flow dp0 priority=1,dl_vlan=0,actions=pop_vlan,output:1' )
    print switch1(r'ovs-ofctl -O OpenFlow13 add-flow dp0 priority=1,dl_vlan=1,actions=pop_vlan,output:2' )
    
    (4)实验结果

    h0和h2能ping通
    h1和h3能ping通

    四、实验心得

    (1)遇到的问题: h0、h2都和h3ping通

    (2)原因:端口号赋值的顺序与流表的顺序对不上

    (3)解决:将s0和s1的链路连接放在所有连接的后面

    TCLink的连接顺序决定了端口的顺序,要与流表对应起来

  • 相关阅读:
    HDU 3951 (博弈) Coin Game
    HDU 3863 (博弈) No Gambling
    HDU 3544 (不平等博弈) Alice's Game
    POJ 3225 (线段树 区间更新) Help with Intervals
    POJ 2528 (线段树 离散化) Mayor's posters
    POJ 3468 (线段树 区间增减) A Simple Problem with Integers
    HDU 1698 (线段树 区间更新) Just a Hook
    POJ (线段树) Who Gets the Most Candies?
    POJ 2828 (线段树 单点更新) Buy Tickets
    HDU 2795 (线段树 单点更新) Billboard
  • 原文地址:https://www.cnblogs.com/lyxlyx/p/13715613.html
Copyright © 2011-2022 走看看