• 软件定义网络——实验 4:Open vSwitch 实验——Mininet 中使用 OVS 命令


    一、实验目的
      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

       (1)实验目的:学习 ovsSingleBr.py 和 ovsMultiBr.py,在下图拓扑中实现一个 VLAN。 

       (2)代码:

     1 #!/usr/bin/python
     2  
     3 from mininet.net import Mininet
     4 from mininet.node import Node
     5 from mininet.link import TCLink
     6 from mininet.log import  setLogLevel, info
     7  
     8 def myNet():
     9     "Create network from scratch using Open vSwitch."
    10  
    11     info( "*** Creating nodes
    " )
    12     switch0 = Node( 's0', inNamespace=False )
    13     switch1 = Node( 's1', inNamespace=False )
    14 
    15     h0 = Node( 'h0' )
    16     h1 = Node( 'h1' )
    17     h2 = Node( 'h2' )
    18     h3 = Node( 'h3' )
    19  
    20     info( "*** Creating links
    " )
    21     linkopts0=dict(bw=100, delay='1ms', loss=0)
    22     linkopts1=dict(bw=1, delay='10ms', loss=0)
    23     TCLink( h0, switch0, **linkopts0)
    24     TCLink( h1, switch0, **linkopts0)
    25     TCLink( h2, switch1, **linkopts0)
    26     TCLink( h3, switch1, **linkopts0)
    27     TCLink( switch0, switch1, **linkopts1)
    28 
    29  
    30     info( "*** Configuring hosts
    " )
    31     h0.setIP( '192.168.123.1/24' )
    32     h1.setIP( '192.168.123.2/24' )
    33     h2.setIP( '192.168.123.3/24' )
    34     h3.setIP( '192.168.123.4/24' )
    35        
    36     info( "*** Starting network using Open vSwitch
    " )
    37     switch0.cmd( 'ovs-vsctl del-br dp0' )
    38     switch0.cmd( 'ovs-vsctl add-br dp0' )
    39     switch1.cmd( 'ovs-vsctl del-br dp1' )
    40     switch1.cmd( 'ovs-vsctl add-br dp1' )
    41  
    42     for intf in switch0.intfs.values():
    43         print intf
    44         print switch0.cmd( 'ovs-vsctl add-port dp0 %s' % intf )
    45  
    46     for intf in switch1.intfs.values():
    47         print intf
    48         print switch1.cmd( 'ovs-vsctl add-port dp1 %s' % intf )
    49 
    50     # Note: controller and switch are in root namespace, and we
    51     # can connect via loopback interface
    52     #switch0.cmd( 'ovs-vsctl set-controller dp0 tcp:127.0.0.1:6633' )
    53  #   switch0.cmd(r'ovs-ofctl del-flows dp0')
    54 #    switch1.cmd(r'ovs-ofctl del-flows dp1')
    55    
    56     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')
    57     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')
    58     print switch0.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp0 priority=1,dl_vlan=0,actions=pop_vlan,output:1')
    59     print switch0.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp0 priority=1,dl_vlan=1,actions=pop_vlan,output:2')
    60   
    61     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')
    62     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')
    63     print switch1.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp0 priority=1,dl_vlan=0,actions=pop_vlan,output:1')
    64     print switch1.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp0 priority=1,dl_vlan=1,actions=pop_vlan,output:2')
    65  
    66     #switch0.cmd('tcpdump -i s0-eth0 -U -w aaa &')
    67     #h0.cmd('tcpdump -i h0-eth0 -U -w aaa &')
    68     info( "*** Running test
    " )
    69     h0.cmdPrint( 'ping -Q 0x10 -c 3 ' + h1.IP() )
    70     h0.cmdPrint( 'ping -Q 0x10 -c 3 ' + h2.IP() )
    71     h0.cmdPrint( 'ping -Q 0x10 -c 3 ' + h3.IP() )
    72     h1.cmdPrint( 'ping -Q 0x10 -c 3 ' + h2.IP() )
    73     h1.cmdPrint( 'ping -Q 0x10 -c 3 ' + h3.IP() )
    74     h2.cmdPrint( 'ping -Q 0x10 -c 3 ' + h3.IP() )
    75  
    76     #print switch0.cmd( 'ovs-ofctl show dp0' )    
    77     #print switch0.cmd( 'ovs-ofctl dump-tables  dp0' )
    78     #print switch0.cmd( 'ovs-ofctl dump-ports   dp0' )
    79     #print switch0.cmd( 'ovs-ofctl dump-flows  dp0' )
    80     #print switch0.cmd( 'ovs-ofctl dump-aggregate  dp0' )
    81     #print switch0.cmd( 'ovs-ofctl queue-stats dp0' )
    82  
    83     info( "*** Stopping network
    " )
    84     switch0.cmd( 'ovs-vsctl del-br dp0' )
    85     switch0.deleteIntfs()
    86     switch1.cmd( 'ovs-vsctl del-br dp1' )
    87     switch1.deleteIntfs()
    88     info( '
    ' )
    89  
    90 if __name__ == '__main__':
    91     setLogLevel( 'info' )
    92     info( '*** Scratch network demo (kernel datapath)
    ' )
    93     Mininet.init()
    94     myNet()

      上述代码将 h0 和 h2 划分在 VLAN 0 中,h1 和 h3 划分在 VLAN 1 中,由于拓扑没
    有控制器,并且初始化时删除了交换机中的所有流表,因此除非下发流表,否则
    主机之间网络无法连通。请尝试修改代码,利用 ovs 命令直接下发 VLAN 设置的
    流表项,最终测试 h0 和 h2 互通,h1 和 h3 互通,其余主机均不通,结果如下图。
    OVS 实现 VLAN 可参考博客:https://www.cnblogs.com/fjlinww/p/11791846.html

    (3)ovs流表

    1 sudo ovs-ofctl -O OpenFlow13 add-flow s0 priority=1,in_port=1,actions=push_vlan:0x8100,set_field:4096->vlan_vid,output:3
    2 sudo ovs-ofctl -O OpenFlow13 add-flow s0 priority=1,in_port=2,actions=push_vlan:0x8100,set_field:4097->vlan_vid,output:3
    3 sudo ovs-ofctl -O OpenFlow13 add-flow s0 priority=1,dl_vlan=0,actions=pop_vlan,output:1
    4 sudo ovs-ofctl -O OpenFlow13 add-flow s0 priority=1,dl_vlan=1,actions=pop_vlan,output:2
    5 
    6 sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,in_port=1,actions=push_vlan:0x8100,set_field:4096->vlan_vid,output:3
    7 sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,in_port=2,actions=push_vlan:0x8100,set_field:4097->vlan_vid,output:3
    8 sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,dl_vlan=0,actions=pop_vlan,output:1
    9 sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,dl_vlan=1,actions=pop_vlan,output:2

      (4)实验结果

  • 相关阅读:
    修改Nginx的header伪装服务器
    解除与设置计算机锁定
    Adobe flash cs5 的Java运行时环境初始化错误 完美解决方法
    js正则表达式教程
    Eclipse窗口显示:独立、嵌入式
    [置顶] wzplayer for android NEON版本(添加插图)
    买了一块s5pv210 的开发板
    [置顶] android player ,wzplayer for android NEON版本(添加插图)
    make 输出 log 文件
    android player ,wzplayer for android NEON版本(添加插图)
  • 原文地址:https://www.cnblogs.com/Demian0116/p/13716920.html
Copyright © 2020-2023  润新知