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

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

时间:2022-09-21 12:34:23浏览次数:53  
标签:ovs mininet s2 s1 vlan 交换机 vSwitch net Open

一、实验目的

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

二、实验环境

Ubuntu 20.04 Desktop amd64

三、实验要求

(一)基本要求

ovs-vsctl基础操作实践:创建OVS交换机,以ovs-xxxxxxxxx命名,其中xxxxxxxxx为本人学号。在创建的交换机上增加端口p0和p1,设置p0的端口号为100,p1的端口号为101,类型均为internal;为了避免网络接口上的地址和本机已有网络地址冲突,需要创建虚拟网络空间(参考命令netns)ns0和ns1,分别将p0和p1移入,并分别配置p0和p1端口的ip地址为190.168.0.100、192.168.0.101,子网掩码为255.255.255.0;最后测试p0和p1的连通性。

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

  • 执行ovs-vsctl show命令截图

  • p0和p1连通性测试的截图

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

  • 开启Mininet CLI并执行pingall命令的截图

    符合h1与h3互通,h2与h4互通,其余主机不互通。

  • 上述目录下查看OVS流表的命令结果截图
    s1:

    s2:

  • wireshark抓包截图

(二)进阶要求

阅读SDNLAB实验,使用Mininet,编写Python代码,生成(一)中的SDN拓扑,并在代码中直接使用OVS命令,做到可以直接运行Python程序完成和(一)相同的VLAN划分。
代码如下:

#!/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(h2, s1,1,2)
    net.addLink(h3, s2,1,1)
    net.addLink(h4, s2,1,2)
    net.addLink(s1, s2,3,3)

    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()

运行验证结果截图:

  • mininet CLI中pingall

  • wireshark抓包

可见,与(一)中手动划分的VLAN的运行结果相同。

四、个人总结

遇到的问题及解决方案

  • 建立自定义拓扑,输入指令时,出现:

    经过检查,发现是输入指令时在逗号后习惯性多打了个空格,导致指令出错。
    解决方法:将指令中逗号后的空格删去,指令成功执行。
  • 按照实验要求下发流表后,依旧ping不通:

    经过我的不懈检查,终于发现问题出在,python代码中没连接s1和s2交换机...

    解决方法:在python代码中加入self.addLink(switch1,switch2,3,3),再进行pingall,发现能ping通了。

心得体会

  • 本次实验的难度与上次实验相仿,难度并不算大,跟随实验的操作指导一步步操作,实验的操作过程还算顺利。
  • 在本次实验中,我复习到了计算机网络课程中的VLAN相关知识,学习了如何使用ovs指令给交换机打上VLAN标签,并进行流表下发。
    还学习到了如何用wireshark进行抓包。在进阶要求中,学到了如何通过直接运行python程序建立完成对VLAN的划分与流表的下发。
  • 通过本次实验,我对VLAN的概念有了更深刻的理解,通过划分VLAN,可以分割广播域,避免广播风暴对其他主机带来不好的影响。同时我对mininet的操作也更加熟练,能够结合ovs命令对交换机进行管理。实验过程也锻炼了我解决问题的能力。

标签:ovs,mininet,s2,s1,vlan,交换机,vSwitch,net,Open
From: https://www.cnblogs.com/godotX/p/16714166.html

相关文章

  • 实验2:Open vSwitch虚拟交换机实践
    实验2:OpenvSwitch虚拟交换机实践一、实验目的1.能够对OpenvSwitch进行基本操作;2.能够通过命令行终端使用OVS命令操作OpenvSwitch交换机,管理流表;3.能够通过Mininet的......
  • 基于OpenHarmony的智能喝水提醒器
    一、硬件说明NeptuneOpenHarmony物联网IOT模组Wi-Fi&蓝牙双模开发板、超声波模块、蜂鸣器模块、杜邦线若干开发板相关资料:https://gitee.com/hihope_iot/docs/tree/mast......
  • OpenSergo & CloudWeGo 共同保障微服务运行时流量稳定性
    简介: 流控降级与容错是微服务流量治理中的重要的一环,同时MSE还提供更广范围、更多场景的微服务治理能力,包括全链路灰度、无损上下线、微服务数据库治理、日志治理等一系......
  • 实验2:Open vSwitch虚拟交换机实践
    实验2:OpenvSwitch虚拟交换机实践2.a)执行ovs-vsctlshow命令p0和p1连通性测试2.b)开启MininetCLI并执行pingall命令查看ovs流表s1的流表s2的流表wireshark......
  • 使用V2V功能将VMware平台虚拟机迁移至OpenStack平台
     1、进入虚拟机备份系统  2、选择【虚拟机保护】——【恢复】,新建恢复任务,选择需要进行跨平台恢复与迁移的源虚拟化平台【VMwarevSphere】,勾选需要恢复的备份点,点......
  • 实验2:Open vSwitch虚拟交换机实践
    基础要求a)创建OVS交换机,以ovs-032002441命名。在创建的交换机上增加端口p0和p1,设置p0的端口号为100,p1的端口号为101,类型均为internal;创建虚拟网络空间ns0和ns1,分别将p0......
  • 实验2:Open vSwitch虚拟交换机实践
    实验2:OpenvSwitch虚拟交换机实践一、实验目的1.能够对OpenvSwitch进行基本操作;2.能够通过命令行终端使用OVS命令操作OpenvSwitch交换机,管理流表;3.能够通过Mininet的......
  • 实验2:Open vSwitch虚拟交换机实践
    (一)基本要求a)/home/用户名/学号/lab2/目录下执行ovs-vsctlshow命令、以及p0和p1连通性测试的执行结果截图;b)/home/用户名/学号/lab2/目录下开启MininetCLI并执行pi......
  • 实验2 Open vSwitch虚拟交换机实践
    OpenvSwitch虚拟交换机实践目录OpenvSwitch虚拟交换机实践实验目的(一)基本实验实验1创建OVS交换机1、OVS交换机2、测试连通实验2Mininet下发流表1.自定义拓扑运行拓扑......
  • 实验2:Open vSwitch虚拟交换机实践
    实验2:OpenvSwitch虚拟交换机实践一、实验目的能够对OpenvSwitch进行基本操作;能够通过命令行终端使用OVS命令操作OpenvSwitch交换机,管理流表;能够通过Mininet的Python......