OpenFlow 軟體定義網路 虛擬網路 VLAN SDN 交換器

深入OpenFlow協定 詳解Flow Table比對機制

2016-10-25
這篇文章將說明當收到網路封包時,OpenFlow協定是怎樣在多個Flow Table中進行比對的動作,以及詳細說明當中會如何處理的整個過程。
過去這幾個月,筆者介紹了許多「軟體定義網路(Software Defined Network)」的技術,其中著重在OpenFlow協定的介紹。

之前已經講解了在OpenFlow協定中的埠和整體Pipeline的處理過程,以及整個協定中各個元件的介紹、扮演的角色等等,同時也結合了虛擬網路VLAN技術的整合。(請參考網管人第127期「深入OpenFlow協定精髓.看懂Pipeline處理流程」一文)

到目前為止,想必大家已經能夠了解為何OpenFlow在軟體定義網路中扮演了重要的角色,以及內部大致上是如何運作的,接下來將進入比較技術的細節。

每個OpenFlow協定的網路交換機的OpenFlow Pipeline至少會包含一個或是以上的Flow Table,如果OpenFlow交換機只有一個Flow Table,那這互動就變成相當簡單,因此這裡只著重在多個Flow Table的情況。

而每一個Flow Table裡面會有多個Flow Entry,用來比對網路封包,看要處理怎樣的網路封包。這些Flow Table有從零開始的序號,每個Flow Table都有標號碼,而每個網路封包的Pipeline處理都會從Flow Table 0開始做處理。

一個Flow Table會包含多個Flow Entry,而一個Flow Entry事實上包含比對欄位、優先序、計數器、執行動作、逾時時間、Cookie等資料。其中最重要的是前面兩個資料,也就是比對欄位以及優先序。

優先序數值從0開始,數字越小代表優先序越高,所以如果設定某個Flow Entry是優先序為零,而且比對欄位是什麼都通過的話,等於就是把這筆Flow Entry設定為Table-Miss Flow Entry。

Flow Table的比對過程

基本上,整個Flow Table的比對過程可以用圖1來解釋。當收到一個網路封包的時候,會先從第一個Flow Table開始執行比對動作,這是剛才提到Pipeline處理過程的一部分。而第一個Flow Table編號是從零開始,比對之前會先從網路封包中擷取出需要比對的資訊,而會擷取出來的資訊,根據不同的網路封包而有所不同。

封包所需比對的資訊反映出當前這個封包的狀態,因為有可能在找到符合的Flow Entry時,會需要執行Apply的動作,而這樣的動作有可能改變封包中被比對的部分。

從圖1的流程圖中可以看得出來,如果從某個Flow Table之中找到符合的Flow Entry,將會先更新計數器,接著可能更新Action Set,更新封包中的比對資料和Metadata。然後,如果沒有定義Goto指令的話,就會執行原本已經定義好的動作,否則就會跑到想要跳過去的Flow Table,並且繼續比對。


▲圖1 Flow Table的比對過程。

另外要注意的是,如果把OFPC_FRAG_REASM這個標籤設定起來的話,在進行比對之前必須先把可能出現的IP Fragments先組合起來,否則無法進行這些Pipeline動作。目前OpenFlow協定還沒有針對格式錯誤或是損毀的網路封包進行例外的處理,也許未來的版本會加以改進。

Goto指令

如果在某個Flow Table中找到符合規則的Flow Entry,其包含的指令可能會包含Goto這樣的動作指令。其代表的意義是要直接跳往指定的Flow Table,這裡必須指明下一個要跳往的Flow Table編號。但必須注意的是,這裡只能「往後跳」,不能「往前跳」,否則就會沒完沒了,變成無限迴圈。以此來看,最後一個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 Entry其實就跟一般的Flow Entry沒有什麼兩樣。Table Miss Entry可以看成「使用Wildcard來讓符合條件設定為全部符合」,並且「為最低的優先序,也就是零」的Flow Entry。


追蹤我們Featrue us

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

我知道了!