Software Defined Network OpenFlow Pipeline

深入OpenFlow協定精髓 看懂Pipeline處理流程

2016-08-26
前期文章已經介紹了OpenFlow協定中「埠」這個元件,這裡所指的埠不一定是實體的埠,也可能是指軟體的埠,而這篇文章要介紹的則是OpenFlow協定的Pipeline處理方式。
在軟體定義網路(Software Defined Network)中,OpenFlow協定是一個非常重要的協定,該協定允許網路管理人員從遠端去控制網路交換機或路由器的轉發平面,進而改變網路封包的轉送方式與路徑。OpenFlow將硬體的網路控制部分擷取出來,並且透過軟體的方式來控制,而在OpenFlow協定中,包含許多不同的元件。

本文將從OpenFlow協定的背景知識開始介紹,接著提及VLAN,最後是主題Pipeline處理流程,包含比對的過程處理、Goto指定、Table Miss等觀念,最後介紹Flow Entry的內容。

OpenFlow協定簡介

在開始為讀者介紹OpenFlow協定的表格之前,必須先瞭解一下何謂OpenFlow協定。

OpenFlow是一種網路協定,運作於網路七層的第二層,也就是資料連結層(Data Link Layer)。

這個網路協定主要允許遠端地去控制交換機(Switch)或路由器(Router)的轉發平面(Forwarding Plane),改變網路封包轉送表格,進而遠端地改變網路封包的網路路徑。

目前各家廠商製作的交換機以及路由器包含很多廠商特有(Proprietary)的技術,OpenFlow協定一個很重要的目的就是想從這些各種不同廠商的硬體中擷取出網路控制的部分,並且讓這些部分變成Open Source,而不被各個廠商所佔據。目前,已經有很多廠商支援OpenFlow協定。

OpenFlow包含那些元件

如圖1所示,一個支援OpenFlow協定的交換機會包含幾個元件,包括一個Group Table以及多個Flow Table。交換機會與圖1上方的Controller溝通,這個Controller再透過OpenFlow協定與OpenFlow Channel溝通。


▲圖1 支援OpenFlow協定的交換機內部元件。

在Flow Table中包含多筆所謂的Flow Entry資料,每一筆Flow Entry包含著符合條件的內容、計數器以及針對符合的網路封包所要下達的指令(Instruction)等等,而透過OpenFlow協定,Controller可以新增、修改及刪除這些Flow Entry的內容。

Flow Table

當網路封包抵達網路交換機時,就會開始根據Flow Table中的內容嘗試去比對符合的條件,Flow Table中的所有筆資料是有前後優先順序的,而Flow Table各個表格之間也會有優先順序。一旦找到相符的Flow Entry,就會執行Flow Entry中所設定好的動作指令。

如果在某一個Flow Table內都沒有找到符合的Flow Entry,則會根據預先設定好的預設值執行動作指令,這預先設定好的動作可能是尋找下一個Flow Table的內容,或是直接丟棄,或者轉給OpenFlow Channel來處理。

動作指令

剛才有提到,每一筆Flow Entry都會有相對應的動作指令,一旦找到符合的Flow Entry,就會執行相對應的動作指令,而動作指令內容可以是一般的動作(Action)或是所謂的Pipeline Processing。

一般的動作指令可能是轉發網路封包,或是修改網路封包內容,而Pipeline Processing代表的是讓下一個Flow Table來處理,當然網路封包相關的資訊也都會被傳到下一個Flow Table。

如果Pipeline Processing沒有指定下一個要處理的Flow Table,就不會丟到下一個Flow Table,通常這種時候都是直接對這個網路封包做處理。

這裡的動作甚至可以把網路封包轉給Group來處理。一個Group可以包含多個複雜的處理過程,這些處理過程可能是Flooding、Multi-path Forwarding、Fast Reroute或是Link Aggregation等等。Group甚至可以將多個不同的Flow Entry透過同樣的處理過程來對網路封包做相同的處理動作。

這種設計方式能夠讓Flow Entry與所要處理的過程再次地分開來,這樣一來,如果希望針對多個不同的Flow Entry一次性地更改相對應的處理動作,就會方便許多。


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!