天天看點

Openflow協定規範

1 總述

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

Openflow協定規範
Openflow協定規範

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

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

Openflow協定規範

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

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

2 Openflow Port

Openflow支援三種類型的端口:實體端口(交換機端口),邏輯端口和預留端口。

3 Openflow Table

Openflow協定規範

這一節主要講述流表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)

Openflow協定規範

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。

繼續閱讀