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

一、基础要求提交

1. /home/用户名/学号/lab2/目录下执行ovs-vsctl show命令、以及p0和p1连通性测试的执行结果截图;

1)/home/用户名/学号/lab2/目录下执行ovs-vsctl show命令截图

2)以及p0和p1连通性测试的执行结果截图

2./home/用户名/学号/lab2/目录下开启Mininet CLI并执行pingall命令的截图、上述目录下查看OVS流表的命令结果截图,wireshark抓包截图,

1)./home/用户名/学号/lab2/目录下开启Mininet CLI并执行pingall命令的截图

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

3)wireshark抓包截图

2、进阶任务



'''

    #!/usr/bin/env python

    from mininet.net import Mininet
    from mininet.node import Controller, RemoteController, OVSController
    from mininet.node import CPULimitedHost, Host, Node
    from mininet.node import OVSKernelSwitch, UserSwitch
    from mininet.node import IVSSwitch
    from mininet.cli import CLI
    from mininet.log import setLogLevel, info
    from mininet.link import TCLink, Intf
    from subprocess import call
    def myNetwork():
            #creat nodes
        net = Mininet( topo=None,
                       build=False,
                       ipBase='10.0.0.0/8')

        info( '*** Adding controller\n' )
        c0=net.addController(name='c0',
                          controller=Controller,
                          protocol='tcp',
                          port=6633)

        info( '*** Add switches\n')
        s1 = net.addSwitch('s1', cls=OVSKernelSwitch)
        s2 = net.addSwitch('s2', cls=OVSKernelSwitch)

        info( '*** Add hosts\n')
        h1 = net.addHost('h1', cls=Host, ip='10.0.0.1', defaultRoute=None)
        h2 = net.addHost('h2', cls=Host, ip='10.0.0.2', defaultRoute=None)
        h3 = net.addHost('h3', cls=Host, ip='10.0.0.3', defaultRoute=None)
        h4 = net.addHost('h4', cls=Host, ip='10.0.0.4', defaultRoute=None)

        info( '*** Add links\n')
        net.addLink(s1, s2,3,3)
        net.addLink(h1, s1,1,1)
        net.addLink(h2, s1,1,2)
        net.addLink(h3, s2,1,1)
        net.addLink(h4, s2,1,2)

        info( '*** Starting network\n')
        net.build()
        info( '*** Starting controllers\n')
        for controller in net.controllers:
            controller.start()

        info( '*** Starting switches\n')
        net.get('s1').start([c0])
        net.get('s2').start([c0])

        
        
        info( '*** Post configure switches and hosts\n')
        
      #/#add flow contral on switch
        s1.cmd('sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,in_port=1,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:3')
        
        s1.cmd('sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,in_port=2,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:3')
        
        s1.cmd('sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,dl_vlan=0,actions=pop_vlan,output:1')
        
        s1.cmd('sudo ovs-ofctl -O OpenFlow13 add-flow s1 priority=1,dl_vlan=1,actions=pop_vlan,output:2')
        
        s2.cmd('sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,in_port=1,actions=push_vlan:0x8100,set_field:4096-\>vlan_vid,output:3')
        
        s2.cmd('sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,in_port=2,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:3')
        
        s2.cmd('sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,dl_vlan=0,actions=pop_vlan,output:1')
        
        s2.cmd('sudo ovs-ofctl -O OpenFlow13 add-flow s2 priority=1,dl_vlan=1,actions=pop_vlan,output:2')
                   #run in CLI
        CLI(net)
        net.stop()

    if __name__ == '__main__':
        setLogLevel( 'info' )
        myNetwork()

'''

3.个人总结

在实验前没有特别认真准备,于是在实验时遇到了比较多的问题,于是去找一些博客查找解决问题的方法,在查找的同时也对SDN的相关知识,还有openvswitch 与mininet 有了更加深入的了解.在实验过程中,熟悉了ovs-vsctl 和ovs-ofctl的相关命令操作,学习到了网桥网口的一些相关概念和特别是实际用途。对于用python对mininet第三方库的使用,也相对更加熟悉,对建立一个拓扑的流程也随着试验次数更加熟悉。

posted @ 2022-09-20 17:17  GIPV  阅读(36)  评论(0编辑  收藏  举报