OpenStack 之 OVS介绍

2023-05-16

一、概述

Open vSwitch的官方定义:Open vSwitch是一个具有工业级质量的多层虚拟交换机。通过可编程扩展,可以实现大规模网络的自动化(配置、管理、维护)。它支持现有标准管理接口和协议(比如netFlow,sFlow,SPAN,RSPAN,CLI,LACP,802.1ag等,熟悉物理网络维护的管理员可以毫不费力地通过Open vSwitch转向虚拟网络管理)。

 

二、最新版本 Open vSwitch 2.6.1支持的全部特性(截止2017.1)

http://openvswitch.org/features/

  • Visibility into inter-VM communication via NetFlow, sFlow(R), IPFIX, SPAN, RSPAN, and GRE-tunneled mirrors
  • LACP (IEEE 802.1AX-2008)
  • Standard 802.1Q VLAN model with trunking
  • Multicast snooping
  • IETF Auto-Attach SPBM and rudimentary required LLDP support
  • BFD and 802.1ag link monitoring
  • STP (IEEE 802.1D-1998) and RSTP (IEEE 802.1D-2004)
  • Fine-grained QoS control
  • Support for HFSC qdisc
  • Per VM interface traffic policing
  • NIC bonding with source-MAC load balancing, active backup, and L4 hashing
  • OpenFlow protocol support (including many extensions for virtualization)
  • IPv6 support
  • Multiple tunneling protocols (GRE, VXLAN, STT, and Geneve, with IPsec support)
  • Remote configuration protocol with C and Python bindings
  • Kernel and user-space forwarding engine options
  • Multi-table forwarding pipeline with flow-caching engine
  • Forwarding layer abstraction to ease porting to new software and hardware platforms

     

三、模块介绍

 

最新代码包主要包括以下模块和特性:
ovs-vswitchd :核心模块,实现交换功能的守护程序(daemon),和Linux内核模块一起,实现基于流的交换;
ovsdb-server :提供轻量级数据库查询服务。其保存了整个OVS的配置信息,包括接口,流表,VLAN等。ovs-vswitchd从其查询配置信息;
ovsdb-tool: 不通过ovs-server就能直接操控数据库
ovsdb-client: 直接通过ovs-server数据库操作
ovs-brcompatd :让 ovs-vswitch 替换 Linux bridge,包括获取 bridge ioctls 的 Linux 内核模块;
ovs-dpctl :dapapath control.  用来配置 switch 内核模块,可以控制转发规则;
ovs-vsctl :获取或者更改ovs-vswitchd的配置信息,此工具操作的时候会更新ovsdb-server数据库;
ovs-appctl :openvswitch apply control, 发送命令来运行相关 daemon(很少使用);
ovsdbmonitor GUI 工具,用于显示 OVS 数据库中的相关数据。


此外, OVS 也提供了支持 OpenFlow 的特性实现,包括
ovs-openflowd: 一个简单的 OpenFlow 交换机;
ovs-controller: 一个简单的 OpenFlow 控制器;
ovs-ofctl :openvswitch openflow control,用来控制OVS作为OpenFlow交换机工作时的流表内容;
ovs-pki : OpenFlow 交换机创建和管理公钥框架;
ovs-tcpundump: 实现类似tcpdump 的抓包分析功能

 

既然ovs-vswitchd是Open vSwitch的核心模块,咱们就来深入研究下它
vswitchd 模块主要包括 bridge、ofproto 等模块。作为主模块,负责解析和执行其他各个 ovs 命令。vswitchd 的主要功能就是不断检测并调用所有 bridge 上的ofproto,执行其上的处理函数。
ovs-vswitchd.c中有main函数,分析vswitchd可以从这里开始,这里包含以下头文件,其中大部分都是与业务无关的代码,其中与业务有关的也就bridge.h、dpif.h、netdev.h、openflow/openflow.h、ovsdb-idl.h、vconn.h、lib/vswitch-idl.h。

 

#include "bridge.h" //the bridge module,需要访问ovsdb-server获取配置信息,与ofprotos和ofproto-dpif也有些关系。
#include "command-line.h"
#include "compiler.h"
#include "daemon.h" //守护进程管理模块
#include "dirs.h" //目录管理模块
#include "dpif.h" //dpif, the DataPath InterFace.ovs-vswitchd使用这个接口与内核模块通信,ovs-dpctl也会使用
#include "dummy.h"
#include "memory.h"
#include "netdev.h" //Generic interface to network devices ("netdev"s).用来管理网络设备的模块
#include "openflow/openflow.h" //openflow协议规格定义
#include "ovsdb-idl.h" //Open vSwitch Database Interface Definition Language (OVSDB IDL).应该是访问ovsdb-server进程的接口
#include "poll-loop.h" //High-level wrapper around the "poll" system call.poll系统调用的封装模块
#include "process.h" //Starting and monitoring subprocesses.进程监控模块
#include "signals.h" //signals系统调用的封装模块
#include "simap.h" //数据结构定义和hash map的封装操作接口模块
#include "stream-ssl.h" //SSL安全网络通信封装模块接口
#include "stream.h" //网络通信封装模块接口
#include "svec.h" //SVEC数据结构操作模块,SVEC是什么?
#include "timeval.h" //计时相关系统接口封装模块
#include "unixctl.h" //Unix domain socket control connection.UNIX相关网络通信模块
#include "util.h"
#include "vconn.h" //virtual connections to OpenFlow devices.
#include "vlog.h"
#include "lib/vswitch-idl.h" //自动生成的文件,应该是Open vSwitch Interface Definition Language,可能是openflow协议的具体内容实现
 

四、Open vSwitch相关术语

Open vSwitch中许多网络上的概念与平时接触到的不同,这里介绍一下Open vSwitch中用到的一些名词及概念。

 

 

 

Packet (数据包)

网络转发的最小数据单元,每个包都来自某个端口,最终会被发往一个或多个目标端口,转发数据包的过程就是网络的唯一功能。

Bridge (网桥)

Open vSwitch中的一个网桥就是一台以太网交换机交换机,可以创建一个或者多个 Bridge 设备。

其功能是根据一定流规则,把从端口收到的数据包转发到另一个或多个端口。

Port (端口)

端口是收发数据包的单元,和物理以太网交换机的端口概念类似。Open vSwitch中,每个端口都属于一个特定的网桥。端口收到的数据包会经过流规则的处理,发往其他端口;也会把其他端口来的数据包发送出去。Open vSwitch支持的端口有以下几种:

  • Normal Port: 用户可以把操作系统中的网卡绑定到Open vSwitch上,Open vSwitch会生成一个普通端口处理这块网卡进出的数据包。
  • Internal Port: 当设置端口类型为internal,Open vSwitch会创建一快虚拟网卡,此端口收到的所有数据包都会交给这块网卡,网卡发出的包会通过这个端口交给Open vSwitch。

    当Open vSwitch创建一个新网桥时,默认会创建一个与网桥同名的Internal Port

  • Patch Port: 当机器中有多个Open vSwitch网桥时,可以使用Patch Port把两个网桥连起来。Patch Port总是成对出现,分别连接在两个网桥上,在两个网桥之间交换数据。
  • Tunnel Port: 隧道端口是一种虚拟端口,支持使用gre或vxlan等隧道技术与位于网络上其他位置的远程端口通讯。

          Interface (iface/接口)

它是连接到 Port 的网络接口设备。Open vSwitch通过Interface与外部交换数据包。在通常情况下,Port 和 Interface 是一对一的关系, 只有在配置 Port 为 bond 模式后,Port 和 Interface 才是一对多的关系。一个接口就是操作系统的一块网卡,这块网卡可能是Open vSwitch生成的虚拟网卡,也可能是物理网卡挂载在Open vSwitch上,也可能是操作系统的虚拟网卡(TUN/TAP)挂载在Open vSwitch上。

Flow (流)

流定义了端口之间数据包的交换规则。每条流分为匹配和动作两部分,匹配部分选择哪些数据包需要可以通过这条流处理,动作决定这些匹配到的数据包如何转发。流描述了一个网桥上,端口到端口的转发规则。比如我可以定义这样一条流:

当数据包来自端口A,则发往端口B

来自端口A 就是匹配部分,发往端口B 就是动作部分。

流的定义可能非常复杂,比如:

当数据包来自端口A,并且其源MAC是aa:aa:aa:aa:aa:aa,并且其拥有vlan tag为a,并且其源IP是a.a.a.a,并且其协议是TCP,其TCP源端口号为a,则修改其源IP为b.b.b.b,发往端口B

Datapath

由于流可能非常复杂,对每个进来的数据包都去尝试匹配所有流,效率会非常低,所以有了datapath。Datapath对流进行缓存,把流的执行结果保存起来,当下次遇到匹配到同一条流的数据包,直接通过datapath处理。考虑到转发效率,datapath完全是在内核态实现的,并且默认的超时时间非常短,好像是3秒。

再重新看一下上面的模块图,datapath是不是可以视作一个交换机,或者说一个桥的实体模块? 因为传统交换机缓存MAC地址并根据MAC地址进行数据包的转发,而Datapath缓存Flow(流)并根据流进行数据包的转发。

Controller

OpenFlow 控制器。OVS 可以同时接受一个或者多个基于 OpenFlow 的控制器的管理。

Flow table

 每个 datapath 都和一个"flow table"关联,当 datapath 接收到数据之后, OVS 会在 flow table 中查找可以匹配的 flow,执行对应的操作, 例如转发数据到另外的端口。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenStack 之 OVS介绍 的相关文章

  • Openstack常用命令

    目录 一 创建用户 二 创建删除模板和模板其他操作 三 创建更新删除镜像 四 创建网络 五 VPN的使用 六 创建容器swift模块 前言 在linux中使用openstakc命令前 需要source etc keystone admin
  • Ceph性能优化总结(v0.94)

    如需转载请标明作者 原文地址 http xiaoquqi github io blog 2015 06 28 ceph performance optimization summary 最近一直在忙着搞Ceph存储的优化和测试 看了各种资料
  • Openstack云平台脚本部署之Aodh告警服务配置(十三)

    目录 一 简介 二 部署脚本 三 参考文档 四 源码 五 系列文章 一 简介 Openstack告警服务Aodh负责当收集的数据度量或事件超过所设定的阈值时 会出发报警 从Liberty 版本后从Ceilometer 中拆分出来 独立为单独
  • kolla-ansible部署openstack+opendaylight

    1 环境准备 准备三台机器 分别作为OpenStack的controller和compute节点 OpenDayLight节点 另外把controller作为本次的部署节点 其中controller和compute节点各两张网卡 odl节点
  • ceph安装记录总结

    1 环境准备 准备三台虚机 每个虚机配合三块数据盘 2块网卡 一个网卡设置外网 一个网卡设置成内网 配置文件设置 根据实际情况配置每一个节点 编辑 letc sysconfig network scripts ifcfg ethO 文件 外
  • 关注 OpenStack 的筒子们,福利来啦!

    2017 OpenStack Days China 将于 2017 年 7 月 24 日 25 日 周一至周二 在北京国家会议中心隆重召开 我们非常荣幸能和大家一起见证并打造这样一个强有力的 大规模的云计算标准软件平台 这一次 OpenSt
  • OpenStack官方认证(COA)正式回归!

    Certified OpenStack Administrator 简称 COA 是OpenStack基金会在2016年推出的唯一一个OpenStack官方管理员技术认证 对OpenStack的日常使用和管理 应该学习和掌握哪些技术 提出了
  • libvirt介绍和使用

    libvirt介绍和使用 导读 why what libvirt具体介绍 API 剖析 driver 剖析 如何使用libvirt why what 实现一朵可运行 可运维的云 需要完整的实现三层 VIM层 VNFM层 NFVO层 其中实现
  • OpenStack--实现内外网结构

    类似于阿里云 ECS 主机的内外网 双网卡不通网段 的结构 最终实现内外网区分隔离 https www aliyun com product ecs utm medium text utm source baidu utm campaign
  • OpenStack nova-compute 报TooOldComputeService版本过低问题

    项目场景 安装openstack的nova compute部分 问题描述 启动nova conductor时报错 查看nova conductor log 发现如下错误 Current Nova version does not suppo
  • Openstack CLI命令管理私有云主机实战(附OpenStack实验环境)

    1 Openstack CLI 命令行管理入门 查看nova云主机 nova list ERROR CommandError You must provide a username or user ID via os username os
  • OpenStack主要功能和作用

    OpenStack主要组件和作用 openstack是一个开源的云计算管理平台 由几个重要的组件结合起来完成工作 openstack支持所有类型的云环境 实施简单可以大规模扩展丰富标准统一的云计算管理平台 openstack通过各种互补的服
  • OpenStack实例控制台报错

    OpenStack实例控制台报错1006 环境说明 操作系统信息 CentOS Linux release 7 9 2009 Core Linux node2 yun com 5 4 226 1 el7 elrepo x86 64 Open
  • cehp 维护(二)常见告警维护

    零 修订记录 序号 修订时间 修订内容 1 2021 11 18 新增 一 摘要 笨猪主要介绍ceph常见告警及维护方法或过程中遇到的问题 二 环境信息 2 1 ceph版本 cephadmin proceph01 ceph v ceph
  • 用python画星空源代码

    from turtle import from random import random randint screen Screen width height 800 600 screen setup width height screen
  • ubuntu 下实现 docker+ovs+quagga搭建网络---bgp

    注 本机上现有quagga镜像 ovs虚拟交换机 2 9 1 docker 18 09 7 实现bgp网络搭建 1 sudo ovs vsctl add br br1 增加一个ovs网桥br1 2 sudo docker images 查看
  • 如何从外网访问MicroStack VM实例

    我已经安装了 MicroStack 并启动了一个 Cirros 实例 如中所述MicroStack 文档 一切都按预期进行 Cirros 实例位于10 20 20 202 22可以从安装了 MicroStack 的主机上获取 主机IP LA
  • 如何在 devstack 中管理用户/密码?

    我已经安装了devstack到一个干净的 Ubuntu 机器 我可以访问 OpenStack 仪表板 http localhost auth login 但是 我不知道如何管理用户或我的初始凭据是什么 此信息保存在哪里 该信息保存在 Key
  • 云平台- sudo:无法解析主机[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在 Amazon EC2 和 openstack 上使用 Linux 作为基于云的服务器 当尝试运行时 sudo chhown ubun
  • 服务无法启动虚拟机“DockerDesktopVM”,因为 Hyper-V 组件之一未运行

    我有 Window Server 2016 2019 虚拟机 Openstack 至此Hyper V安装成功 但无法启动 MobyLinuxVM ExposeVirtualizationExtensions 已通过 PowerShell 在

随机推荐

  • bvh-converter将bvh文件输出为csv文件失败,原因竟是numpy版本不匹配

    最近做的东西需要将bvh数据处理成xyz坐标 xff0c 在下面这篇文章找到了方法 xff1a 57条消息 人体动作捕捉格式BVH及其与三维坐标的转换 三维视频转bvh 零度蛋花粥的博客 CSDN博客 通过pip导入bvh converte
  • C++实验:多态性与虚函数

    C 43 43 实验 xff1a 多态性与虚函数 1 实验目的 xff08 1 xff09 了解多态性的概念 xff08 2 xff09 了解虚函数的作用及使用方法 xff08 3 xff09 了解静态关联和动态关联的概念和用法 xff08
  • 2014流水账

    欢迎转载 xff0c 转载请注明出处 本文地址 xff1a http blog csdn net zhenggaoxing article details 42386821 三天元旦小长假结束了 xff0c 先来回顾下三天的假期 xff1a
  • IOS中文排序学习

    前言 xff1a 最近有中文排序的需要 xff0c 发现系统没有提供中文排序的方法 xff0c 于是参考学习了网上前辈的代码实现了中文排序功能 xff0c 本文记录的就是学习实现中文排序的过程 实现英文排序 系统提供了英文排序的方法 写了一
  • IOS 定制中间突出UItabBar

    前言 xff1a 公司的项目需要定制一个中间突出的TabBar xff0c 在github 上找到一份可以参考的代码 xff08 虽然是四年前的 xff0c 但是还是很有参考价值 xff09 网址 xff1a https github co
  • Xcode删除所有断点

    问题是这样的 xff1a 接手新的项目 xff0c 顿时吓尿了 xff1a 整个程序有无数个断点 xff0c 那么如何一次性删除呢 xff1f 如下图 xff1a 点击Belete Breakpoints 就可以了
  • VSCode重新启用“错误波形提示”

    2020 06 09 更新常见问题 昨天晚上写伪码的时候 xff0c 看着VSCode的错误提示实在是心烦 xff0c 就手贱点了一下 禁用错误波形提示 xff0c 也就是disable error squiggles xff0c 但写完之
  • TortoiseSVN使用教程[多图超详细]

    安装及下载client 端 下载Windows 端程序 xff1a http tortoisesvn net downloads 一般而言 xff0c 如果是32 bit的Windows XP 应该使用TortoiseSVN 1 4 x x
  • 将UIColor转换为RGB值

    objc view plain copy 将UIColor转换为RGB值 NSMutableArray changeUIColorToRGB UIColor color NSMutableArray RGBStrValueArr 61 NS
  • 业余时间你在做什么,你就会变成什么样的人?

    改变 xff0c 从业余时间开始 博客定位 xff1a 技术 43 思考 其余统统不要 2017 xff0c 我来了 xff01
  • Xcode9 无证书真机调试

    写在前面 公司分配了新的测试机 证书99台名额已满 所以上网找教程 学习了一下如何使用Xcode无证书进行真机调试 一 创建证书 1 运行Xcode xff0c Xcode Preference 添加账号 xff08 能在appstore下
  • CSP考试复习:第一单元 C++语言基础 1.1 程序结构

    第一单元 C 43 43 语言基础 1 1 程序结构 1 程序框架 注释 xff1a 注释有两种 xff0c 一种是 xff0c 另一种是 必须单独放置一行 xff0c 或代码所在行 的后面 xff1b 而 成对存在 xff0c 可以插入到
  • Intel Realsense T265开箱测试

    前言 xff1a 最近因为要做VIO xff0c 在实验室蹭到一个Realsense T265来用 xff0c 仅此记录下简单测试过程 xff08 官方文档写非常清楚 xff0c 建议详细阅读 xff0c 链接 xff1a https gi
  • posix thread介绍

    xfeff xfeff posix thread是 操作系统级 xff08 OS level xff09 的API规范 xff0c 主要用来定义线程及线程间同步的相关操作 xff0c 采用C语言定义 posix规范主要在unix like类
  • PX4飞控之自主起飞Takeoff控制逻辑

    本文主要以PX4飞控1 5 5版本为例 xff0c 介绍Navigator中自主起飞 xff08 Takeoff xff09 算法控制逻辑 注 xff1a mission任务中的自主起飞与此模块不同 Takeoff与导航中的其他模块类似 x
  • PX4飞控之导航及任务架构

    本文重点介绍PX4飞控的Navigator和mission控制框架和逻辑 Navigator导航部分是无人机自主飞行控制的核心所在 xff0c 其中包括自主起飞 自主降落 自主返航 自主任务以及GPS失效保护等各个部分 搞懂这个部分有助于理
  • PX4飞控之位置控制(1)整体架构

    位置控制是无人机飞控的核心算法之一 xff0c 一方面根据commander中的flag标志位和Navigator中提供的航点信息进行控制 xff08 自主模式下 xff09 xff0c 另一方面得到期望姿态角 xff08 setpoint
  • spring整合ehcache找不到org.springframework.cache.ehcache.EhCacheCacheManager的解决方案

    一般org springframework cache ehcache EhCacheCacheManager和org springframework cache ehcache EhCacheManagerFactoryBean会同时找不
  • CC3200之GPIO引脚分析

    预备知识 xff1a xff08 1 xff09 volatile关键字 xff1a volatile定义的变量一般为无需开发者自己赋值 xff0c 会自动改变的变量 在普通的程序中 xff0c 编译器都具有优化功能 xff0c 为了避免浪
  • OpenStack 之 OVS介绍

    一 概述 Open vSwitch的官方定义 xff1a Open vSwitch是一个具有工业级质量的多层虚拟交换机 通过可编程扩展 xff0c 可以实现大规模网络的自动化 xff08 配置 管理 维护 xff09 它支持现有标准管理接口