Open vSwitch 数据包处理流程

2024-06-08 01:36

本文主要是介绍Open vSwitch 数据包处理流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、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

这篇关于Open vSwitch 数据包处理流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1040879

相关文章

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶

使用Go实现文件复制的完整流程

《使用Go实现文件复制的完整流程》本案例将实现一个实用的文件操作工具:将一个文件的内容完整复制到另一个文件中,这是文件处理中的常见任务,比如配置文件备份、日志迁移、用户上传文件转存等,文中通过代码示例... 目录案例说明涉及China编程知识点示例代码代码解析示例运行练习扩展小结案例说明我们将通过标准库 os

Java堆转储文件之1.6G大文件处理完整指南

《Java堆转储文件之1.6G大文件处理完整指南》堆转储文件是优化、分析内存消耗的重要工具,:本文主要介绍Java堆转储文件之1.6G大文件处理的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言文件为什么这么大?如何处理这个文件?分析文件内容(推荐)删除文件(如果不需要)查看错误来源如何避

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与