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

相关推荐

  1. 数据处理流程包括哪些环节

    2024-06-08 01:04:02       55 阅读
  2. 数据采集、数据存储和数据处理流程

    2024-06-08 01:04:02       23 阅读
  3. 炫技亮点 优雅处理数据流程 过滤器模式

    2024-06-08 01:04:02       55 阅读
  4. 机器学习流程数据分布不均处理

    2024-06-08 01:04:02       42 阅读
  5. Android Binder——Parcel数据处理流程(二十二)

    2024-06-08 01:04:02       29 阅读
  6. 08-MVC处理流程

    2024-06-08 01:04:02       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-08 01:04:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-08 01:04:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-08 01:04:02       82 阅读
  4. Python语言-面向对象

    2024-06-08 01:04:02       91 阅读

热门阅读

  1. C# Parallel 未完

    2024-06-08 01:04:02       29 阅读
  2. html及css

    2024-06-08 01:04:02       31 阅读
  3. BGP有条件打破IBGP水平分割1

    2024-06-08 01:04:02       26 阅读
  4. 第二十六章HTML与CSS书写规范

    2024-06-08 01:04:02       24 阅读
  5. 探索HTML5 Geolocation:精准定位网页的新纪元

    2024-06-08 01:04:02       31 阅读
  6. 【封装】Unity切换场景不销毁物体

    2024-06-08 01:04:02       24 阅读
  7. C语言中typedef的四种用法(附带详细解析!!)

    2024-06-08 01:04:02       29 阅读
  8. Ubuntu上安装Chrome浏览器

    2024-06-08 01:04:02       32 阅读
  9. Ubuntu22.04配置脚本开机自启动

    2024-06-08 01:04:02       26 阅读