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

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

2.a)

执行ovs-vsctl show命令

执行ovs-vsctl show命令

p0和p1连通性测试

p0与p1连通性测试

2.b)

开启Mininet CLI并执行pingall命令

开启Mininet CLI并执行pingall命令

查看ovs流表

s1的流表

s1的流表

s2的流表

s2的流表

wireshark抓包截图

wireshark抓包截图1
wireshark抓包截图2

3.进阶

代码

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.123.2/24' )
    h3.setIP( '192.168.123.3/24' )
    h4.setIP( '192.168.123.4/24' )
    
    switch1.cmd( 'ovs-vsctl del-br dp1' )
    switch1.cmd( 'ovs-vsctl add-br dp1' )
    switch2.cmd( 'ovs-vsctl del-br dp2' )
    switch2.cmd( 'ovs-vsctl add-br dp2' )
    
    for intf in switch1.intfs.values():
        print (intf)
        print (switch1.cmd( 'ovs-vsctl add-port dp1 %s' % intf ))
 
    for intf in switch2.intfs.values():
        print (intf)
        print (switch2.cmd( 'ovs-vsctl add-port dp2 %s' % intf ))
    print (switch1.cmd(r'ovs-vsctl show'))
    print (switch2.cmd(r'ovs-vsctl show'))
        
    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'))

    print (switch2.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp2 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 dp2 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 dp2 priority=1,dl_vlan=0,actions=pop_vlan,output:1'))
    print (switch2.cmd(r'ovs-ofctl -O OpenFlow13 add-flow dp2 priority=1,dl_vlan=1,actions=pop_vlan,output:2'))

    
    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() )
    
    info( "*** Stopping network\n" )
    switch1.cmd( 'ovs-vsctl del-br dp1' )
    switch1.deleteIntfs()
    switch2.cmd( 'ovs-vsctl del-br dp2' )
    switch2.deleteIntfs()
    
    info( '\n' )
 
if __name__ == '__main__':
    setLogLevel( 'info' )
    info( '*** Scratch network demo (kernel datapath)\n' )
    Mininet.init()
    myNet()

执行结果

结果1
结果2
结果3

4.个人总结

实验难度

本次实验难度相对来说较小,个人完成得还是比较顺利。因为已经用过mininet的功能,所以不像刚开始那么生疏。

问题和解决办法

问题1与解决:刚开始给p0和p1的端口配置IP地址的时候因为博客上作业的要求和ppt中所说略有差别,配的时候配了博客园上说的两个IP,但是这两IP是ping不通的,本题意思应该是要ping通的,所以重新配了一对可以ping通的ip。
问题2与解决:然后就是在做进阶的时候,网站中的示例代码多少有一点不好理解,我多看了好几遍确定将之理解后才开始做。
问题3与解决:在运行下发流表的命令时,没有把py文件先运行起来,使得流表下发失败。最后一个终端利用Mininet CLI的custom参数加载py文件,另一个终端运行下发流表命令

个人感想

本次实验我学会了ovs基础操作、下发流表、抓包等功能,对sdn的理解又多了一点,同时也对网络的流通与结构多了一些理解。当然,还有很多东西需要学习。

posted @ 2022-09-21 11:25  I_believe_in_myself  阅读(46)  评论(0编辑  收藏  举报