Skip to content

SDN 學習筆記(二): OpenFlow 1.0 介紹

davidlei

前言

想深入了解一個協定,直接看規格書是最快的。目前正在讀 OpenFlow 1.0 的相關內容,這篇文章會先介紹 OpenFlow 1.0 的架構,並整理一些 spec 的重點。

之後也會補上 OpenFlow 1.3 的內容,並簡單說明與 1.0 的差異。

為什麼著重在 1.0 與 1.3 兩個版本?

1.0 版本與之後的版本不相容,所以最先介紹。1.0 與 1.3 都是長期支持的穩定版本,1.3 是目前的主流版本,多數支援 OpenFlow 的硬體設備都支援 OpenFlow 1.3

參考資料:OpenFlow 協定演進

OpenFlow 1.0 架構

OpenFlow 1.0 spec 架構圖


Flow Table

OpenFlow Switch 中存放轉發規則的表稱為 Flow Table

OpenFlow 1.0 中,每個 switch 只能存放一個 Flow Table。

Flow Table 中每個項目稱為 Flow Entry。在 OpenFlow 1.0 中,每個 Flow Entry 包含三個部分:

Header Fields

OpenFlow 1.0 協定共有 12 種可供匹配的條件,IP 部分只支援 IPv4。

以下僅列出條目,細節請參考 OpenFlow 1.0 spec

Counters

Counter 會針對每張 Flow Table、每條 Flow entry、每個 switch port 以及每個佇列分別記錄相關統計資訊。

Actions

每個 Flow entry 都伴隨著 0 或多個 actions,代表封包成功匹配 Header Fields 條件後要執行的動作。

如果匹配成功但沒有設置 actions,switch 就會丟棄(drop)該封包。Actions list 的執行順序嚴格按照原本的順序依序執行

  • 如果 Controller 寫入的 Flow entry 包含 switch 不支援的 action,會被拒絕並返回錯誤。
  • Controller 與 Switch 建立連線時,Switch 會告知 Controller 它支援哪些 Optional Action。

Switch 不需要支援 spec 中列出的所有 action,只有標注 Required Action 的才是必須支援的,Optional Action 則是選用。

Required Action: Forward(轉發封包)

轉發除了要支援基本的 switch port,還需要支援以下 virtual port

另外有兩個 Optional Action 的 virtual port,Switch 可以自行選擇是否支援:

Required Action: Drop(丟棄封包)

除了可以明確設定 Drop action 之外,Flow entry 若沒有設定任何 action,switch 也會預設丟棄該封包。

Optional Action: Enqueue

Enqueue 可以將封包轉發至某個特定 port 的 queue 中,方便支援 QoS。

Optional Action: Modify-Field(修改封包)

Modify-Field 是彈性最高的 action 之一,雖然標注為 Optional Action,但 spec 中提到它能大幅提升 OpenFlow 的實用性,基本上所有支援 OpenFlow 的 switch 都會實作這個功能。


Matching

Packet flow in an OpenFlow switch:封包處理流程

Parse header fields 的步驟會按照下方圖表進行。

封包會按照 flow entry 的優先度依序進行匹配:

解析封包以取得 Header field

解析步驟大致可分為四步

Secure Channel

作為連結 Switch 與 Controller 的橋樑。

OpenFlow Protocol Message

提醒:OpenFlow 是定義 Controller 與 Switch 之間溝通的通訊協定。

OpenFlow 協定訊息分成三大類:

Controller-to-Switch

Asynchronous

Symmetric

結語

OpenFlow 規格書通常前半部是規範(概念說明),後半部是協議實作(規範的具體細節)。本文只介紹了規範部分,讓讀者快速了解 OpenFlow 的概要。

目前主流的 OpenFlow 版本是 1.3,相較於 1.0 新增了許多實用功能。大概看過 1.0 之後,建議把閱讀重心放在 1.3 版本上。

網路上有找到 OpenFlow 1.3 的中文全文翻譯,非常推薦搭配原文規格書一起看:OpenFlow 1.3 中文解析

後續的實作都會以 1.3 版本為主,建議先看過上述文件再繼續接下來的練習。

Reference

Edit this post
Previous
SDN 學習筆記(一): SDN 的發展歷史以及基本名詞介紹
Next
docker volume 用法整理