首页 > 其他分享 >实验2 Open vSwitch虚拟交换机实践

实验2 Open vSwitch虚拟交换机实践

时间:2022-09-21 00:55:57浏览次数:56  
标签:ovs vlan dp0 switch1 cmd 交换机 print vSwitch Open

Open vSwitch虚拟交换机实践

目录

实验目的

  1. 能够对Open vSwitch进行基本操作
  2. 能够通过命令行终端使用OVS命令操作Open vSwitch交换机,管理流表
  3. 能够通过Mininet的Python代码运行OVS命令,控制网络拓扑中的Open vSwitch交换机

(一)基本实验

实验1 创建OVS交换机

1、OVS交换机

完成截图

2、测试连通

成功ping通

实验2 Mininet下发流表

1. 自定义拓扑

image

image

运行拓扑

pingall截图

2. 划分VLAN

查看OVS流表的命令结果截图:

wireshark验证:

h1,h3在同一局域网

h2,h4在同一局域网

(二)进阶实验

要求:利用Python代码实现VlAN划分

1、code

编写topo.py文件并运行

#!/usr/bin/python
 
from mininet.net import Mininet
from mininet.node import Node
from mininet.link import Link
from mininet.log import  setLogLevel, info
 
def myNet():
    "Create network from scratch using Open vSwitch."
 
    info( "*** Creating nodes\n" )
    switch1 = Node( 's1', inNamespace=False )
    switch2 = Node( 's2', inNamespace=False )
 
    h1 = Node( 'h1' )
    h2 = Node( 'h2' )
    h3 = Node( 'h3' )
    h4 = Node( 'h4' )

 
    info( "*** Creating links\n" )
    Link( h1, switch1)
    Link( h2, switch1)
    Link( h3, switch2)
    Link( h4, switch2)
    Link( switch1, switch2)
 
    info( "*** Configuring hosts\n" )
    h1.setIP( '192.168.123.1/24' )
    h2.setIP( '192.168.124.1/24' )
    h3.setIP( '192.168.123.2/24' )
    h4.setIP( '192.168.124.2/24' )
       
    info( "*** Starting network using Open vSwitch\n" )
    switch1.cmd( 'ovs-vsctl del-br dp0' )
    switch1.cmd( 'ovs-vsctl add-br dp0' )

    switch2.cmd( 'ovs-vsctl del-br dp1' )
    switch2.cmd( 'ovs-vsctl add-br dp1' )


    for intf in switch1.intfs.values():
        print (intf)
        print (switch1.cmd( 'ovs-vsctl add-port dp0 %s' % intf ))


    for intf in switch2.intfs.values():
        print (intf)
        print (switch2.cmd( 'ovs-vsctl add-port dp1 %s' % intf ))
  
    print (switch1.cmd(r'ovs-vsctl show'))
 
    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 (switch2.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 (switch2.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 (switch2.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp1 priority=1,dl_vlan=0,actions=pop_vlan,output:1'))
    print (switch2.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp1 priority=1,dl_vlan=1,actions=pop_vlan,output:2'))



 
    #switch0.cmd('tcpdump -i s0-eth0 -U -w aaa &')
    #h0.cmd('tcpdump -i h0-eth0 -U -w aaa &')
    info( "*** Running test\n" )
    h1.cmdPrint( 'ping -c 3 ' + h3.IP() )
    h2.cmdPrint( 'ping -c 3 ' + h4.IP() )
    h1.cmdPrint( 'ping -c 3 ' + h4.IP() )
    h2.cmdPrint( 'ping -c 3 ' + h3.IP() )

 
    #print switch0.cmd( 'ovs-ofctl show dp0' )    
    #print switch0.cmd( 'ovs-ofctl dump-tables  dp0' )
    #print switch0.cmd( 'ovs-ofctl dump-ports   dp0' )
    #print switch0.cmd( 'ovs-ofctl dump-flows  dp0' )
    #print switch0.cmd( 'ovs-ofctl dump-aggregate  dp0' )
    #print switch0.cmd( 'ovs-ofctl queue-stats dp0' )
 
    info( "*** Stopping network\n" )
    switch1.cmd( 'ovs-vsctl del-br dp0' )
    switch1.deleteIntfs()
    switch2.cmd( 'ovs-vsctl del-br dp1' )
    switch2.deleteIntfs()
    info( '\n' )
 
if __name__ == '__main__':
    setLogLevel( 'info' )
    info( '*** Scratch network demo (kernel datapath)\n' )
    Mininet.init()
    myNet()

2、运行

3、验证结果

1、代码验证:

结果符合要求

2、wireshark验证

h1,h3在同一局域网

h2,h4在同一局域网

总结

实验总结

1)此次实验重新学习了有关网络层面转发相关的知识比如

由此重新了解VLAN的格式,以及实验过程各种参数设置的意义,(其实这里的set_field的值是设置TCI的值,并不是VLAN ID的值,4096其实它的VLAN ID就为0,其中CFI位要置位1,这是由于OVS规定该位一定要为1,而OpenFlow标准并没有指示,其为一个保留字段,但是也有很多OpenFlow交换机指定了该位一定要为1才能生效。还有配置流表取值为0x8100时表示IEEE 802.1Q的VLAN数据帧。如果不支持802.1Q的设备收到这样的帧,会将其丢弃,等等内容)

2)通过进阶实验,我学习了如何使用python文件实现流表下发,并能在python文件中进行测试。编写python文件的过程中遇到不少bug,但通过不断尝试最终进行了解决,提升了我的问题解决能力及创新能力。也了解不同编写网络的方法,并能很好地运用到事件当中。

3)实验过程中一些关于虚拟局域网的定义有了更深的理解,通过一些标记的设计来达到虚拟局域网的作用

4)一些严重问题导致做作业时间极大延长,不自信查看教学文档,反而更多的是通过互联网解决问题,搜索效率极慢,例如在使用wireshark的过程中,没有使用命令行去实现抓包,而是通过wireshark自带过滤器实现,这就需要找到交换器端口,然后去看,而不是在跑代码的过程中就可以直接调用wireshark,在操作上极为不流畅。

反思

应该提早做完实验,不能拖延。

标签:ovs,vlan,dp0,switch1,cmd,交换机,print,vSwitch,Open
From: https://www.cnblogs.com/soya-hzy/p/16714227.html

相关文章

  • 实验2:Open vSwitch虚拟交换机实践
    实验2:OpenvSwitch虚拟交换机实践一、实验目的能够对OpenvSwitch进行基本操作;能够通过命令行终端使用OVS命令操作OpenvSwitch交换机,管理流表;能够通过Mininet的Python......
  • Open vSwitch虚拟交换机实践
    实验报告1.1/home/用户名/学号/lab2/目录下执行ovs-vsctlshow命令1.2p0和p1连通性测试的执行结果截图2.1/home/用户名/学号/lab2/目录下开启MininetCLI并执行pi......
  • 实验2:Open vSwitch虚拟交换机实践
    a)/home/用户名/学号/lab2/目录下执行ovs-vsctlshow命令、以及p0和p1连通性测试的执行结果截图;执行ovs-vsctlshow命令p0和p1连通性测试b)/home/用户名/学号/lab2......
  • OpenStack云计算实战手册 pdf
    高清扫描版下载链接:https://pan.baidu.com/s/10N2ghZPMeYO0pQUt_Ub7Tw点击这里获取提取码 ......
  • 实验2:Open vSwitch虚拟交换机实践
    一、基本要求(一)/home/用户名/学号/lab2/目录下执行ovs-vsctlshow命令p0和p1连通性测试的执行结果截图(二)/home/用户名/学号/lab2/目录下开启MininetCLI并执行pin......
  • 实验2:Open vSwitch虚拟交换机实践
    实验目的能够对OpenvSwitch进行基本操作;能够通过命令行终端使用OVS命令操作OpenvSwitch交换机,管理流表;能够通过Mininet的Python代码运行OVS命令,控制网络拓扑中的Open......
  • 实验2:Open vSwitch虚拟交换机实践
    实验2:OpenvSwitch虚拟交换机实践一、实验目的能够对OpenvSwitch进行基本操作;能够通过命令行终端使用OVS命令操作OpenvSwitch交换机,管理流表;能够通过Mininet的Pytho......
  • 实验2:Open vSwitch虚拟交换机实践
    一、实验目的能够对OpenvSwitch进行基本操作;能够通过命令行终端使用OVS命令操作OpenvSwitch交换机,管理流表;能够通过Mininet的Python代码运行OVS命令,控制网络拓扑中的......
  • 实验2_Open vSwitch虚拟交换机实践
    一、基础要求a)/home/用户名/学号/lab2/目录下执行ovs-vsctlshow命令截图:p0和p1连通性测试的执行结果截图:b)/home/用户名/学号/lab2/目录下开启MininetCLI并执行......
  • 实验2:Open vSwitch虚拟交换机实践
    实验目的1.能够对OpenvSwitch进行基本操作;2.能够通过命令行终端使用OVS命令操作OpenvSwitch交换机,管理流表;3.能够通过Mininet的Python代码运行OVS命令,控制网络拓扑中......