Openflow協議規範

1 總述

一個Openflow交換機包括一個或者多個流表flow table和一個組表group table。每個流表中每個流條目包括三個部分:(1) 匹配match—使用ingress port,packet header以及前一個flow table傳遞過來的metadata;(2) 計數counter---對匹配成功的包進行計數;(3) 操作instruction—修改action set或者流水線處理. 



數據包從第一個流表開始匹配,可能會經歷多個流表,這叫做流水線處理pipeline processing。流水線處理的好處就是允許數據包被髮送到接下來的流表中做進一步處理或者元數據信息在表中流動。首先,找到流表中優先級最高的流條目完成匹配,這將根據ingress port,包頭packet header,以及有上一個流表指定的metadata三類匹配域進行。如果某個數據包成功匹配了流表中某個流條目,則更新這個流條目的conter計數,同時這個流條目中的instruction操作將被應用生效。

Pipeline processing終結於instruction中沒有指定下一個流表,這時數據包通常會被所帶有的動作集合action set處理後轉發。


如果數據包發生table miss現象,通常會通過控制通道和packet-in消息發送給控制器。

組表裏往往代表一組額外的處理,如flooding、multipath、fast reroute、link aggregation。

2 Openflow Port

Openflow支持三種類型的端口:物理端口(交換機端口),邏輯端口和預留端口。

3 Openflow Table

這一節主要講述流表flow table和組表grouptable的組成,以及數據包的匹配和處理動作。

首先(a)圖可以看出,每個數據包是經過流水線pipeline進行處理的,經歷多個flow table的匹配,然後最後在執行action動作後被轉發出去;

(事實上,現在的交換機貌似也是這種pipeline processing的,並且openflow交換機可以通過預留的NORMAL端口轉向現有交換機的normal pipeline處理。)

那麼在每個flow table中是如何處理的呢?主要分爲三步:(1) 匹配match。找到流表中優先級最高的流條目完成匹配,這將根據ingress port,包頭packet header,以及有上一個流表指定的metadata三類匹配域進行。(2) 指令instruction。根據匹配到的流條目增刪改指令集,包括修改包、更新包的匹配域、更新動作集合action set、更新傳遞給下一個流表的metadata;(3) 發送。將匹配的數據和動作集發送給下一個流表。

4 Openflow counter

Counter不僅存在於flow entry中,openflow規範中指出,每個流表、流條目、端口、隊列、組以及bucket都可以有counter。如下表所示。(個人感覺,如果統計網絡總體流量則可以利用Port中的received bytes這個Counter,而統計特定業務或者應用的流量則可以利用Flow Entry中的received bytes這個Counter)


5 OpenFlow Instruction

當一個數據包匹配了某個流表條目時,需要執行這個flow entry中的instruction指令,這些instruction指令將改變數據包、action set動作集合或者流水線處理順序。

典型的instruction指令包括以下五類:應用動作apply-action,清空動作clear-action,寫動作write-action,寫源數據write metadata以及轉向動作goto。

6 OpenFlow Action

6.1 Action Set

         首先每個數據包都有一個ActionSet.這個ActionSet初始爲空,中間可能被每個匹配的flow entry中的Write-Action或Clear-Action指令instruction進行修改,最後在pipleline processing結束的時候被執行。

       ActionSet中包含以下九類的action:copy TTL inwards, pop, push, copy TTL outwards, decrement TTL, set, qos,group, output。每個Action Set中只能一類只能有一個action,並且嚴格按照上述順序執行。

6.2 Action List

         其次,在Apply-Action指令以及Packet-out消息中都有ActionList,用於對數據包立即執行action,並且按照Action List裏面指定的順序執行,與action的類別無關。

6.3 Action

         Action包含以下幾類:output,set-queue,drop,group,push/pop,set-field,change-TTL

7 OpenFlow Message

Openflow支持三類消息:

1 Controller-to-Switch

控制器所發起的消息,又分爲以下五類:

1)      Feature:查詢交換機能力;

2)      Configuration:設置或者查詢配置參數;

3)      Modify-State:增刪改流表或者組表條目,設置交換機端口屬性

4)      Read-State

5)      Packet-Out: 比較複雜一些。這個消息用於控制器指定從交換機的特定端口發送數據包,或者用於轉發通過Packet-in消息接收到的數據包。

Packet-out消息中包含一個完整的數據包或者指針,以及action.

6)      Barrier:用於控制器保證消息的依賴關係或者接收notification

 

2 Asynchronous

交換機發起的消息,分爲以下四類:

1)      Packet-In:對於出現flowentry mismatch的數據包,交換機向控制器發送packet-in事件。

數據包本身要麼被完全包含在packet-in消息中,要麼被buffer在交換機中,反正都是等着控制器的Packet-out事件來處理就對了。

2)      Flow-Removed: 交換機通知控制器已經沒有了某個流表條目

3)      Port-Status:當端口配置或者狀態變化時通知控制器

4)      Error

 

3 Sysmetic

兩方都可以發起的消息,不用協商,分爲以下三類:

1)      Hello:交換機和控制器建立起連接後的維護消息

2)      Echo:是Echorequest和reply的配對,常用語檢查liveness,測量延遲和帶寬

3) Experimenter:

8 Multiple Controller

一個交換機可以連接多個Equal狀態的控制器,多個Slave狀態的控制器以及最多一個Master狀態的控制器。

爲了確保在Master/Slave轉換過程中出現消息亂序,引入了generation-id。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章