实验2:Open vSwitch虚拟交换机实践
实验要求
(一)基本要求
任务一
1.1创建OVS交换机

1.2创建端口p0,查询端口信息

1.3创建一个虚拟网络空间ns0,把p0接口移入网络空间ns0,并配置IP地址

1.4创建端口p1,查询端口信息

1.5创建一个虚拟网络空间ns1,把p0接口移入网络空间ns1,并配置IP地址

1.6ovs-vsctl show命令运行结果

1.7连通性测试结果

任务二
2.1编写python文件

2.2下发流表和查看


2.3连通性测试

2.4抓包截图
h2-->h4

h1-->h3

(二)进阶要求
1.python代码
#!/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():
    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(h1, s1,1,1)
    net.addLink(s1, h2,2,1)
    net.addLink(s1, s2,3,3)
    net.addLink(s2, h3,1,1)
    net.addLink(s2, h4,2,1)
    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')
    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')
    
    CLI(net)
    net.stop()
if __name__ == '__main__':
    setLogLevel( 'info' )
    myNetwork()
2.运行结果与连通性测试

(三)实验总结
1.遇到的困难
(1)没有在/home/用户名/学号/lab2/目录下进行实验,创建lab2发现不能创建同名交换机
查询资料,找到了删除交换机的命令:sudo ovs-vsctl del-br 交换机名
还有删除端口的命令:sudo ovs-vsctl del-port 交换机名 端口名
(2)在下发流表失败
要运行编写的python脚本才能下发流表
(3)修改使用Mininet可视化界面搭建拓扑后形成的python代码后,运行失败
换一种方法:先编写python代码,再形成拓扑
2.心得
根据步骤进行实验,觉得难度没有特别大。就是配置ip地址,端口接入相应虚拟网络空间时等一些小细节会出错,做实验时还得更加细心!通过本次实验,我学会了ovs的一些基础操作、管理流表、wireshark的使用和python的一些基础语法。
 
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号