Software Defined Network OpenFlow Pipeline

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

2016-08-26
前期文章已經介紹了OpenFlow協定中「埠」這個元件,這裡所指的埠不一定是實體的埠,也可能是指軟體的埠,而這篇文章要介紹的則是OpenFlow協定的Pipeline處理方式。
這些Flow Table有從零開始的序號,每個Flow Table都有標號碼,而每個網路封包的Pipeline處理都會從Flow Table 0開始做處理,而整個Pipeline處理流程大略如圖2所示。


▲圖2 Pipeline處理流程。

Goto指令

如果找到符合規則的Flow Entry,其包含的指令可能會是Goto這樣的動作指令。其代表的意義是要直接跳往指定的Flow Table,這裡必須指明下一個要跳往的Flow Table的編號,但必須要注意的是,這裡只能「往後跳」,不能「往前跳」。

以例子來做說明,如果包含Goto這個Flow Entry是位於Flow Table 0,然後Goto指令希望跳到Flow Table 4,則代表接下來會直接跳過編號為1、2以及3這些Flow Table,直接跳往Flow Table 4繼續尋找符合規則的Flow Entry。

以此來看,應該也很容易想像到,最後一個Flow Table的Flow Entry是不能包含Goto指令的,因為後面已經沒有多餘的Flow Table可以繼續跳了。如果Flow Entry中的指令沒有Goto,大部分的情況就是會包含需要直接的動作,大多都是進行轉發(Forwarding),而此時也代表這個封包的Pipeline過程到此為止。

Table Miss情況

如果在某個Flow Table尋找符合規則的Flow Entry時,都找不到相對應的Flow Entry,這種情況就稱為Table Miss。當發生Table Miss時,會執行原本設定好的Table Miss指定動作,這個設定是每個Flow Table分開的。這樣的動作有可能是要直接丟棄網路封包,或是到另外一個指定的Flow Table繼續Pipeline處理過程,也有可能是送往Controller。關於Table Miss的細節,筆者會在後續的文章中慢慢為各位介紹。

了解Flow Entry內容

接下來,看看Flow Entry的長相。一個Flow Table會包含多個Flow Entry,而一個Flow Entry事實上包含以下這些資料:

1. 比對欄位:這會包含Ingress Port、網路封包的Header,以及可能從上一個Flow Table傳過來的Metadata,最後這個部分可有可無。
2. 優先序:Flow Entry的優先序。
3. 計數器:一旦有相符合的網路封包,這個計數器就會被更新。
4. 執行動作:也就是針對符合比對的網路封包的動作。
5. 逾時時間:這是代表這筆Flow Entry存在的最大逾時時間。
6. Cookie:Controller所使用的資料。

其中最重要的是前面兩個資料,也就是比對欄位和優先序。優先序數值從0開始,數字越小代表優先序越高,所以如果設定某個Flow Entry的優先序為零,而且比對欄位是什麼都通過的話,等於就是把這筆Flow Entry設定為Table-miss Flow Entry。

結語

讀完這篇文章後,相信大家都能夠了解到支援OpenFlow的網路交換機也可以支援非OpenFlow協定的封包,當然這其中有一些切換的設定需要多加注意。而在Pipeline的處理過程中,比對欄位與優先序占了最重要的角色,筆者在這篇文章中闡述了由Goto與Table Miss所產生的多樣化比對方式,有助於了解整個OpenFlow協定運作的精髓。

預計下一篇文章介紹尋求符合條件的Flow Entry詳細過程,這也是Pipeline過程的一部分。前後這幾篇文章,會從比較廣泛的角度開始逐漸往比較深奧的角度前進,筆者會不時地回到比較寬廣的視野,希望讀者在深入了解的過程中不會迷失。

<本文作者:胡凱智,目前在Solera Holdings Inc.擔任亞太區首席技術長,曾於美商Mozilla擔任全球技術專案總監,並在趨勢科技任職七年多,有兩年美國矽谷工作經驗,在美國專利局擁有軟體專利。讀者交流建議:https://www.facebook.com/khu.page>


追蹤我們Featrue us

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

我知道了!