Open vSwitch 数据包处理流程

news2025/5/18 22:10:37

一、Open vSwitch 数据包转发模式

        Open vSwitch 根据不同的模块使用,主要分为两种数据包的转发模式:Datapath 模式和 DPDK 模式,这两种模式的主要区别在于:

  •  Datapath 模式:
    •  使用内核空间的网络栈进行数据包的转发
    • 性能相对较低,但配置和管理相对简单
    • 适用于一般的虚拟化部署场景
  • DPDK 模式:
    •  使用 DPDK 库在用户空间进行数据包的转发
    • 性能更高,但配置和管理相对复杂
    • 适用于对性能要求更高的场景,如高吞吐量的网络功能虚拟化(NFV)部署

        这里需要注意的是,Datapath 模式工作在内核空间,而 DPDK 模块工作在用户空间。在实际应用中,具体使用哪种模式需要取决于具体的部署需求和环境。一般来说,如果对性能要求不太高,可以选择 Datapath 模式;而对于需要更高性能的场景,比如NFV部署,则应该选择 DPDK 模式。

二、Datapath 模式下的数据包转发流程

(1)数据包处理流程

        Open vSwitch 在 Datapath 模式下的数据包流程如下图所示:

        图中红色数字序号表示数据包转发的步骤顺序,以下步骤序号和图中红色序号一一对应:

1、数据包接收

        Open vSwitch 从设备接口中获取数据包并交给 Datapath 内核模块。在收到数据包后,Datapath 模块负责检查数据包的头部信息以进行流表匹配,如果匹配成功,则根据转发规则进行转发;如果匹配不到相应的流表,那么就需要通过 upcall 调用让 vswitchd 守护进程生成新的流表。

2、upcall 调用

        数据包在 Datapath 模块无法匹配到流表的情况下,通过 upcall 调用,并将该数据包通过 Netlink 传输到 vswitchd 守护进程。

3、流表获取

        vswitchd 守护进程与控制器(一般是 SDN 控制器)通信,控制器将相应的流表通过 OpenFlow 协议发回 vswitchd 守护进程。

4、流表下发

        vswitchd 守护进程将获取到的流表缓存到内核态的 Flow Table 中。

5、reinject 发回数据包

        vswitchd 守护进程将数据包送回 Datapath 模块中,即将数据包重新注入到 OVS 的数据包处理流程中。

6、流表同步

        Flow Table 将缓存的流表内容同步至 Datapath 模块,以备查询。

7、数据包发送

        Datapath 模块检查数据包的头部信息以进行流表匹配,将匹配成功的数据包根据相应规则进行数据包的处理,然后将处理后的数据包送至设备接口发出。

(2)数据包路径

        根据数据包能否在 Datapath 模块立刻匹配到相应流表,Open vSwitch 在进行数据包转发时会用到两种不同的流程,分别称为快速路径慢速路径,如下图所示:

(1)快速路径

        如果在 Datapath 模块中已经存在可以匹配的流表,则数据包会直接转发,对应处理流程中的(1→7)步骤。很容易发现,在这种情况下数据包完全由内核空间处理,是不需要经过用户态的,所以效率相对会比较高,所以我们称为快速路径,对应上图中的直线。快速路径一般为数据包的非首次处理流程(因为之前有过类似的包已经生成好了流表)。

(2)慢速路径

        如果在 Datapath 模块中无法匹配相应的流表,则需要 OVS 先生成流表,再将数据包根据流表进行转发,此时对应处理流程中的(1→2→3→4→5→6→7)步骤。在这过程中需要将数据包发送至用户态,并通过 vswitchd 守护进程进行一系列的操作,再将数据包发回,效率相对较低,所以我们称为慢速路径,对应上图中的曲线。慢速路径一般为数据包的首次处理流程(因为之前没有过类似的包,需要生成新的流表)。

三、DPDK 模式下的数据包转发流程

        Open vSwitch 在 DPDK 模式下的数据包流程如下图所示:

        相对于 Open vSwitch 在 Datapath 模式下的数据包流程,DPDK 使用用户态的网络栈,绕过了内核网络协议栈(Datapath 模块)的开销,从而实现了更高的数据包转发性能。然而从本质上将,数据包处理的步骤区别不大,主要的不同在于将原本在内核态进行的数据包的匹配和操作逻辑转移到了用户态。

        对于快速路径而言,DPDK 可以避免内核网络协议栈带来的性能开销,如系统调用、上下文切换等。对于慢速路径而言,DPDK 采用了零拷贝的数据传输机制,数据包可以直接在内存中传输,而不需要在用户态和内核态之间进行拷贝,大幅降低了数据传输的开销。

结语:

        通常情况下,我们所说的 Open vSwitch 数据包转发流程指的是在 Datapath 模式下的数据包流程,因为这个是最经典也是最常见的。不过 DPDK 模式提供了一种全新的思路,令 OVS 的整体性能有了较大的提升,将会是未来的发展趋势。出于学习和一般场景的使用 Datapath 模式足以花费珍贵而有限的事件,并且二者在流程和结构上大同小异,所以本系列文章主要以 Datapath 模式为主进行撰写,之后也会更新 DPDK 模式的相关内容。

        由于本人水平有限,以上内容如有不足之处欢迎大家指正(评论区/私信均可)。

参考资料:

Open vSwitch 官网

Open vSwitch 源代码 GitHub

2015 FOSDEM - OVS Stateful Services

Open vSwitch v3.3.0 源代码阅读

OVS - 数据包处理流程_ovs的工作流程-CSDN博客

Open vSwitch 2.3.90 源码阅读笔记(上) | SDNLAB

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1800053.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

M1Pro 使用跳板机

Mac (M1 Pro) 通过Iterm2 使用跳板机 1、由于堡垒机(跳板机)不能支持mac系统终端工具,只支持xshell等win生态。所以我们需要先安装iterm2 装iterms教程 这里头对rz、sz的配置不详细。我们可以这样配置: where iterm2-send-zmod…

WebGL技术的应用场景

WebGL(Web Graphics Library)是一种用于在网页上渲染交互式3D和2D图形的技术,而无需使用插件。它基于OpenGL ES 2.0 API,可以被JavaScript调用来绘制图形。WebGL的应用场景相当广泛,涵盖从游戏到教育,再到专…

Windows取证分析 | 如何最大程度提升分析效率

本文由安全研究人员Amr Ashraf发表于Cyber5w的官方博客,研究人员在本文中讨论了如何对可疑设备中的内存映像进行安全调查,并利用了Volatility 3和MemProcFS来最大程度提升Windows取证分析的工作效率。 介绍 内存取证是任何计算机取证分析人员的必备技能…

R语言探索与分析14-美国房价及其影响因素分析

一、选题背景 以多元线性回归统计模型为基础,用R语言对美国部分地区房价数据进行建模预测,进而探究提高多元回 归线性模型精度的方法。先对数据进行探索性预处理,随后设置虚拟变量并建模得出预测结果,再使用方差膨胀因子对 多重共…

磁盘怎么分区?3 款最佳免费磁盘分区软件

您可能已经注意到,大多数计算机至少有 2 个分区:一个安装 Windows 操作系统和程序(C:),另一个安装其他文件(D:)。 默认情况下,计算机只有一个硬盘和一个分区。建议创建 2 个或更多分…

kafka-生产者监听器(SpringBoot整合Kafka)

文章目录 1、生产者监听器1.1、创建生产者监听器1.2、创建生产者拦截器1.3、发送消息测试1.4、使用Java代码创建主题分区副本1.5、application.yml配置----v1版1.6、屏蔽 kafka debug 日志 logback.xml1.7、引入spring-kafka依赖1.8、控制台日志 1、生产者监听器 1.1、创建生产…

计算机组成结构—IO方式

目录 一、程序查询方式 1. 程序查询基本流程 2. 接口电路 3. 接口工作过程 二、程序中断方式 1. 程序中断基本流程 2. 接口电路 3. I/O 中断处理过程 三、DMA 方式 1. DMA 的概念和特点 2. DMA 与 CPU 的访存冲突 3. DMA 接口的功能 4. DMA 接口的组成 5. DMA 的…

阿里 Qwen2 模型开源,教你如何将 Qwen2 扩展到百万级上下文

本次开源的 Qwen2 模型包括 5 个尺寸,分别是 0.5B、1.5B、7B、72B、57B,其中 57B 的属于 MoE 模型(激活参数 14B),其余为 Dense 模型,本篇文章会快速介绍下各个尺寸模型的情况,然后重点介绍下如…

数据结构初阶 堆(一)

一. 堆的概念和性质 我们在上一篇博客介绍存储二叉树的两种方式 分别是顺序结构和链式结构 数据结构初阶 初识二叉树-CSDN博客 1. 堆的概念 这里注意!!! 这里说的堆和操作系统里面的堆没有半点关系!!! …

环 境 变 量

如果希望某一个文件在 CMD 窗口的任意路径下都可以打开,则需要将该文件的路径存放在环境变量中。 在 CMD 中运行该文件时,优先查看当前路径下的文件,如果没有找到,则进入环境变量中记录的路径下寻找该文件,如果能找到…

kafka的副本机制

目录 Producer的ACKs参数 配置 acks配置为0 acks配置为1 acks配置为-1或者all 副本的目的就是冗余备份,当某个Broker上的分区数据丢失时,依然可以保障数据可用。因为在其他的Broker上的副本是可用的。 Producer的ACKs参数 对副本关系较大的是&…

Go源码--sync库(2)

简介 这边文章主要讲解 Sync.Cond和Sync.Rwmutex Sync.Cond 简介 sync.Cond 经常用来处理 多个协程等待 一个协程通知 这种场景, 主要 是阻塞在某一协程中 等待被另一个协程唤醒 继续执行 这个协程后续的功能。cond经常被用来协调协程对某一资源的访问 ants协程池…

Android存储空间不足?试试这8个快速解决方案!

在当今的科技时代,Android智能手机已成为我们日常生活的重要组成部分,因为它们保存着我们大量的关键数据。然而,随着我们的使用模式不断扩大,手机内部存储的可用性经常变得有限。手机存储空间不足不仅会损害设备的功能和响应能力&…

数据库系统概论(超详解!!!)第十节 过程化SQL

1.Transact-SQL概述 SQL(Structure Query Language的简称,即结构化查询语言) 是被国际标准化组织(ISO)采纳的标准数据库语言,目前所有关系数据库管理系统都以SQL作为核心,在JAVA、VC、VB、Delphi等程序设计语言中也可使用SQL,它是…

Angular 由一个bug说起之六:字体预加载

浏览器在加载一个页面时,会解析网页中的html和css,并开始加载字体文件。字体文件可以通过css中的font-face规则指定,并使用url()函数指定字体文件的路径。 比如下面这样: css font-face {font-family: MyFont;src: url(path/to/font.woff2…

Docker的安装、启动和配置镜像加速

前言: Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。 而企业部署一般都是采用Linux操作系统,而…

电脑找不到mfc140udll怎么修复,总结几种靠谱的修复方法

在日常使用电脑娱乐工作的过程中,我们可能会遇到一些错误提示或程序无法正常运行的情况。其中,一个常见的问题是计算机缺失mfc140u.dll文件。这个问题可能会导致某些应用程序无法启动或运行,给工作和学习带来不便。本文将介绍5种解决计算机缺…

RPC框架原理(一)

RPC框架原理 网络和IO的关系,IO(input和output)面向的是谁?OSI 7层参考模型,TCP/IP协议为什么会出现一个会话层三次握手socket心跳keep alive四次挥手 网络IO(IO模型) IO框架底层 学习顺序&…

SpringCloud整合Seata简易使用(注册中心Nacos)

SpringCloud整合Seata解决分布式事务(注册中心Nacos) Seata下载与配置在Nacos中配置seata相关配置持久化为db时,需要提前在数据库中创建seata数据库,SpringCloud整合Seata服务GlobalTransactional注解使用 本案例是在windows中运行…

抢人!抢人!抢人! IT行业某岗位已经开始抢人了!

所谓抢滩鸿蒙,人才先行。鸿蒙系统火力全开后,抢人已成鸿蒙市场的主题词! 智联招聘数据显示,春节后首周,鸿蒙相关职位数同比增长163%,是去年同期的2.6倍,2023年9-12月鸿蒙相关职位数同比增速为3…