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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/24179.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/24179.shtml
英文地址,請注明出處:http://en.pswp.cn/web/24179.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

理解和實現 LRU 緩存置換算法

引言 在計算機科學中,緩存是一種用于提高數據訪問速度的技術。然而,緩存空間是有限的,當緩存被填滿時,就需要一種策略來決定哪些數據應該保留,哪些應該被淘汰。LRU(最近最少使用)算法是一種廣泛…

UML實現圖-部署圖

概述 部署圖(Deployent Diagram)描述了運行軟件的系統中硬件和軟件的物理結構。部署圖中通常包含兩種元素:節點和關聯關系,部署圖中每個配置必須存在于某些節點上。部署圖也可以包含包或子系統。 節點是在運行時代表計算機資源的物理元素。節點名稱有兩種:簡單名和…

android studio開發時提示 TLS 握手錯誤解決辦法

我用的是windows,遇到了這錯誤, The server may not support the clients requested TLS protocol versions: (TLSv1.2, TLSv1.3). You may need to configure the client to allow other protocols to be used. For more on this, please refer to http…

蒼穹外賣筆記-08-套餐管理-增加,刪除,修改,查詢和起售停售套餐

套餐管理 1 任務2 新增套餐2.1 需求分析和設計接口設計setmeal和setmeal_dish表設計 2.2 代碼開發2.2.1 根據分類id查詢菜品DishControllerDishServiceDishServiceImplDishMapperDishMapper.xml 2.2.2 新增套餐接口SetmealControllerSetmealServiceSetmealServiceImplSetmealMa…

c++替換字符或字符串函數

在C中,有多種方法可以替換字符串或字符。下面是一些常用的方法: 使用replace函數: replace函數可以替換字符串中的指定字符或子字符串。它的用法如下: string str "Hello World"; str.replace(str.find("World&qu…

Nginx03-動態資源和LNMP介紹與實驗、自動索引模塊、基礎認證模塊、狀態模塊

目錄 寫在前面Nginx03案例1 模擬視頻下載網站自動索引autoindex基礎認證auth_basic模塊狀態stub_status模塊模塊小結 案例2 動態網站(部署php代碼)概述常見的動態網站的架構LNMP架構流程數據庫Mariadb安裝安全配置基本操作 PHP安裝php修改配置文件 Nginx…

AI做的2024年高考數學試卷,答案對嗎?

2024年高考數學考試已經結束,現在呈上數學真題及AI給出的解答。供各位看官欣賞。 總的來說,人工做題兩小時,AI解答兩分鐘。 但是,AI做的答案是否正確,那就要各位看官來評判了! 注:試卷來源于…

【Linux】另一種基于rpm安裝yum的方式

之前的163的鏡像源504網關異常了,網上找到的方法基本都是基于apt,或是基于apt-get。找到了大佬幫忙裝了一下,記錄如下: wget https://vault.centos.org/7.9.2009/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm…

2024年5大制作AI電子手冊工具推薦

AI電子手冊作為一種結合了人工智能技術和傳統電子手冊功能的新型工具,逐漸成為了企業進行知識管理和信息傳遞的重要工具,為企業提高效率、優化用戶體驗。在本文中,LookLook同學將簡單介紹一下什么是AI電子手冊、對企業有什么好處,…

JAVA面試中,面試官最愛問的問題。

Optional類是什么?它在Java中的用途是什么? Java中的Optional類是一個容器類,它用于封裝可能為空的對象。在Java 8之前,空值檢查是Java編程中一個常見的問題,尤其是在處理返回單個值的方法時。Optional類提供了一種更…

電源變壓器的作用和性能

電源變壓器的主要作用是改變輸入電壓的大小,通常用于降低電壓或升高電壓,以便適應不同設備的需求。它們還可以提供隔離,使得輸出電路與輸入電路之間電氣隔離,從而提高安全性。性能方面,電源變壓器需要具有高效率、低溫…

Unity3D測量距離實現方法(一)

系列文章目錄 unity工具 文章目錄 系列文章目錄👉前言👉一、Unity距離測量1-1 制作預制體1-2 編寫測量的腳本 👉二、鼠標點擊模型進行測量👉二、字體面向攝像機的方法👉二、最短距離測量方法👉三、壁紙分享…

Python中的裝飾器鏈(decorator chain)是什么

在Python中,裝飾器是一種高級功能,它允許你在不修改函數或類代碼的情況下,為它們添加額外的功能。裝飾器通常用于日志記錄、性能測量、權限檢查等場景。當多個裝飾器應用于同一個函數或類時,它們會形成一個裝飾器鏈(de…

Go語言中,公司gitlab私有倉庫依賴拉取配置

為什么要考慮私有倉庫 Go語言目前都已經采用了官方統一的 go modules 來管理依賴,后續也不太可能出現比較亂的生態, 因此了解下如何讓這個依賴管理正常工作是非常必要的。 對于Github或者其他公有倉庫,依賴管理是非常直接和方便的,設置好GO…

C++ 依賴的C庫查看和下載

依賴庫查詢:ldd 指令 # ldd libcyber.solinux-vdso.so.1 (0x0000ffff86b52000)libopt_proto.so > /home/caros/cyberrt/lib/libopt_proto.so (0x0000ffff84c4a000)libboost_filesystem.so.1.73.0 > /opt/orin/usr/local/lib/libboost_filesystem.so.1.73.0 (…

Java版工程項目管理平臺:以源碼驅動,引領工程企業數字化轉型

在當今數字化時代,隨著企業的擴張和業務的增長,傳統的工程項目管理方法已顯不足。為了提升管理效率、減輕工作負擔、增強信息處理的快速性和精確度,工程企業亟需借助數字化技術進行轉型升級。本文將向您展示一款基于Spring Cloud、Spring Boo…

SS2D反向傳播問題記錄【未解決】

使用SS2D寫了一個簡單的神經網絡進行訓練,但是訓練報錯: NotImplementedError: You must implement either the backward or vjp method for your custom autograd.Function to use it with backward mode AD. 環境: CUDA11.8 torch2.0.0 mam…

AI大模型日報#0607:10家國產大模型、GPT-4o挑戰高考作文 | OpenAI公開破解GPT-4新方法

導讀:AI大模型日報,爬蟲LLM自動生成,一文覽盡每日AI大模型要點資訊!目前采用“文心一言”(ERNIE 4.0)、“零一萬物”(Yi-Large)生成了今日要點以及每條資訊的摘要。歡迎閱讀&#xf…

TS 系列:使用元祖生成聯合類型

需求:有這么個需求,我們有兩個數組,一個記錄撲克牌花色,一個記錄撲克牌點數,需要有一個函數,傳遞兩個值,根據傳遞的值生成撲克牌,需要我們定義參數的類型檢查。 思路:肯…

2024速通python之python高階技巧

文章目錄 一、閉包1.什么是閉包2.優缺點3.nonlocal關鍵字 二、裝飾器1.什么是裝飾器2.舉例3.傳統方式4.裝飾器方式5.語法糖寫法 三、多線程1.線程參數2.多線程編程 四、網絡編程1.Socket服務端編程2.Socket客戶端編程 「章節總覽」 ??????【2024速通python之python基礎…