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

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

一、实验目的

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

二、实验环境

Ubuntu 20.04 Desktop amd64

实验要求

(一)基本要求

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

实验2:Open vSwitch虚拟交换机实践
p0和p1连通性测试的执行结果截图

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

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

实验2:Open vSwitch虚拟交换机实践
上述目录查看OVS流表

实验2:Open vSwitch虚拟交换机实践
wireshark抓包截图

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

(二)进阶要求

阅读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(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')

    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:Open vSwitch虚拟交换机实践

个人总结

1)学习了ovsctrl 和 mininet 的配合使用,并学习了如何使用控制行实现流表下发。
2)在实验前需要用sudo mn -c 来清除之前生成的topo结构,要不然就可能会遇到 invalid topo name错误。
3)通过这次实验,我进一步的了解到了python有很多神奇的库,可以极大的方便编程(✪ω✪)

Original: https://www.cnblogs.com/wojiuyishui/p/16709516.html
Author: 我就一水
Title: 实验2:Open vSwitch虚拟交换机实践

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578646/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Ubuntu14.04.5升级openssh8.0p1版本

    一、前言客户请广电公司扫描服务器漏洞,扫到阿里云服务器的OpenSSH_6.6.1p1版本存在如下高危漏洞,基于安全的考量,升级到8.0版本。1.OpenSSH安全绕过漏洞2.Op…

    Linux 2023年6月8日
    0104
  • linux ssh连接自动断开问题

    场景描述:云上的虚拟机使用public ip连接ssh时,一直提示已经连接,但是就会自动关闭 通过正常虚拟机作为跳板,能够连接到目标机子上,检查发现进程正常,但是就一直连接不上 发…

    Linux 2023年6月7日
    0104
  • java程序使用ssl证书连接mysql

    bash;gutter:false; 1. 在mysql服务器上生成证书 openssl genrsa 2048 > ca-key.pem openssl req -new …

    Linux 2023年6月7日
    0112
  • Linux 中 图片的产生与查看

    使用场景 当在 Linux 的控制台想要显示一张图片,使用matplotlib.plt.plot() 和matplotlib.plt.show() 会报错。此时可以曲线救国,不直接…

    Linux 2023年6月7日
    093
  • 5.9 Linux Vim批量注释和自定义注释

    使用 Vim 编辑 Shell 脚本,在进行调试时,需要进行多行的注释,每次都要先切换到输入模式,在行首输入注释符 #再退回命令模式,非常麻烦。 连续行的注释其实可以用替换命令来完…

    Linux 2023年6月7日
    0100
  • Mysql数据库服务端的安装

    一般提到Mysql数据库的安装在工作当中是说的安装数据库管理软件的服务端,服务端的安装可以安装在Windows环境,也可以安装在Linux环境。 Windows环境安装:目前安装比…

    Linux 2023年6月14日
    095
  • 网络安全中常用浏览器插件、拓展

    引言 现在的火狐、Edge( Chromium内核)、Chrome等浏览器带有插件、拓展(Plugin)的功能。这些插件中有的可以过滤广告,有的提供便捷的翻译,有的提供JavaSc…

    Linux 2023年6月6日
    0110
  • 建表参数PCTFREE、PCTUSED、INITRANS和MAXTRANS释疑

    PCTFREE与PCTUSED建表时可以指定以上两个参数的值(整数),PCTFREE表示一个块中保留的剩余空间大小百分比,该保留空间主要用于已有记录的更 新操作;PCTUSED表示…

    Linux 2023年6月14日
    0104
  • Docker基础用法

    Docker基础用法 1、Docker为什么会出现? 一款软件产品必须经过:开发 -> 上线 开发人员负责将应用程序开发制作出来。运维人员负责上线,配置应用程序。 在这里存在…

    Linux 2023年6月7日
    0108
  • Linux之NFS

    一、什么是NFS 共享存储,文件服务器 1.1 基本概述 NFS是Network File System的缩写及网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之间可以共…

    Linux 2023年5月27日
    098
  • ipv6 6r 原理介绍,IPv6 Rapid Deployment, IPv6 6rd, Linux IPv6 6rd初探

    IPv6 Rapid Deployment: Provide IPv6 Access to Customers over an IPv4-Only Network 原文地址:htt…

    Linux 2023年6月6日
    0139
  • Pandas中的常用函数

    1. map、apply、applymap 参考:Pandas教程 | 数据处理三板斧——map、apply、applymap详解 在日常的数据处理中,经常会对一个 DataFra…

    Linux 2023年6月13日
    0108
  • ASP.NET Core 2.2 : 二十二. 多样性的配置方式

    大多数应用都离不开配置,本章将介绍ASP.NET Core中常见的几种配置方式及系统内部实现的机制。(ASP.NET Core 系列目录) 说到配置,第一印象可能就是”…

    Linux 2023年6月7日
    0130
  • 搭建Redis三主三从集群

    Redis三主三从集群规划 10.0.128.19 使用端口 7000 700110.0.128.22 使用端口 7002 700310.0.128.23 使用端口 7004 70…

    Linux 2023年6月8日
    0132
  • Redis中bitmap的妙用

    bitmap的使用场景使用场景一:用户签到使用场景二:统计活跃用户使用场景三:用户在线状态 Original: https://www.cnblogs.com/linjiqin/p…

    Linux 2023年5月28日
    0117
  • Redis 用的很溜,了解过它用的什么协议吗?

    我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农!文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白…

    Linux 2023年5月28日
    0122
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球