OpenFlow交換機 之 流表

2021-06-21 21:07:52 字數 2979 閱讀 7065

所謂流表,其實可被視作是openflow對網路裝置的資料**功能的一種抽象。在傳統網路裝置中,交換機和路由器的資料**需要依賴裝置中儲存的二層mac位址**表或者三層ip位址路由表,而openflow交換機中使用的流表也是如此,不過在它的表項中整合了網路中各個層次的網路配置資訊,從而在進行資料**時可以使用更豐富的規則。流表中每個表項的結構如圖2-3所示。

圖2-3  openflow流表項結構

如圖2-3所示,openflow流表的每個流表項都由3部分組成:用於資料報匹配的包頭域(header fields),用於統計匹配資料報個數的計數器(counters),用於展示匹配的資料報如何處理的動作(actions)。

如圖2-4所示,包頭域中用於和交換機接收到的資料報進行匹配的元組涵蓋了iso網路模型中第二至第四層的網路配置資訊。每乙個元組中的數值可以是乙個確定的值或者是「any」以支援對任意值的匹配。另外,如果交換機能夠在ip位址相關元組上支援子網掩碼的話,將有助於實現更精確的匹配。

計數器:openflow流表的計數器可以針對交換機中的每張流表、每個資料流、每個裝置埠、每個**佇列進行維護,用於統計資料流量的相關資訊。例如:針對每張流表,統計當前活動的表項數、資料報查詢次數、資料報匹配次數等;針對每個資料流,統計接收到的資料報數、位元組數、資料流持續時間等;針對每個裝置埠,除統計接收到的資料報數、傳送資料報數、接收位元組數、傳送位元組數等指標之外,還可以對各種錯誤發生的次數進行統計;針對每個佇列,統計傳送的資料報數和位元組數,還有傳送時的溢位(overrun)錯誤次數等。

動作:openflow流表的動作用於指示交換機在收到匹配的資料報後應該如何對其進行處理。與傳統交換機**表只需要指明資料報的**出埠不同,openflow交換機因為缺少控制平面的能力,所以對匹配資料報的處理不僅僅是簡單的**操作,而需要用動作來詳細說明交換機將要對資料報所做的處理。

openflow交換機的每個流表項可以對應有零至多個動作,如果沒有定義**動作,那麼與流表項包頭域匹配的資料報將被預設丟棄。統一流表項中的多個動作的執行可以具有優先順序,但是在資料報的傳送上並不保證其順序。另外,如果流表項中出現有openflow交換機不支援的引數值,交換機將向控制器返回相應的出錯資訊。

動作分為必備動作(required actions)和可選動作(optional actions)兩種型別。其中,必備動作是需要由所有的openflow交換機預設支援的,而可選動作則需要由交換機告知控制器它所能支援的動作種類。openflow流表動作的列表如表2-1所示。

表2-1  openflow流表動作列表

型別名    稱

說    明

必備動作

**(forward)

交換機必須支援將資料報**給裝置的物理埠及如下的乙個或多個虛擬埠

all:**給所有出埠,但不包括入埠

controller:封裝資料報並**給控制器

local:**給本地的網路棧

table:對packet_out訊息執行流表的動作

in_port:從入埠發出

丟棄(drop)

對沒有明確指明處理動作的流表項,交換機將會對與其所匹配的所有資料報進行預設的丟棄處理

可選動作

**(forward)

交換機可選支援將資料報**給如下的虛擬埠

normal:利用交換機所能支援的傳統**機制(例如二層的mac、vlan資訊或者三層的ip資訊)處理資料報

flood:遵照最小生成樹從裝置出埠洪氾發出,但不包括入埠

排隊(enqueue)

交換機將資料報**到某個出埠對應的**佇列中,便於提供qos支援

修改域(modify-field)

交換機修改資料報的包頭內容,具體可以包括:

— 設定vlan id、vlan優先順序,剝離vlan頭

— 修改源mac位址、目的mac位址

— 修改源ipv4位址、目的ipv4位址、tos位

— 修改源tcp/ip埠、目的tcp/ip埠

根據交換機的應用場景及其所能夠支援的流表動作型別,openflow交換機可以被分為「openflow專用交換機(openflow-only)」和「openflow使能交換機(openflow-enabled,在openflow v1.1之後被稱作openflow-hybrid)」。其中,前者只支援openflow協議,而後者則是考慮到了openflow交換機與傳統交換機混合

組網時可能遇到的協議棧不相容問題,能同時執行openflow協議和傳統的二層/三層協議棧。因此,後者可以支援openflow可選**動作中的normal動作。

openflow交換機在接收到網路資料報後,對其開展的處理流程如圖2-5所示。

圖2-5  openflow交換機中的資料報處理流程

如圖2-5所示,流程中對802.1d協議的處理是流程中的可選步驟(在openflow v1.1之後已刪除)。當openflow交換機接收到乙個資料報時,將按照優先順序依次匹配其本地儲存的流表中的表項,並以發生具有最高優先順序的匹配表項作為匹配結果,並根據相應的動作對資料報進行操作。同時,一旦匹配成功,對應的計數器將更新;而如果沒能找到匹配的表項,則將資料報**給控制器。

openflow交換機對資料報頭的解析和匹配過程的細節操作如圖2-6所示。

如圖2-6所示,交換機中每乙個表項的匹配首先按照接收到資料報的物理埠對入埠進行匹配,然後按照二層資料報頭進行比較。如果乙太網型別為0x8100,即資料報是vlan包,則繼續查詢vlan id和pcp域。如果乙太網型別為0x0806,則為arp包,繼續查詢源ip位址和目的ip位址。如果乙太網型別為0x0800,即為ip包,則繼續查詢ip包頭的相關域。如果ip包是tcp/udp包,則還需繼續查詢傳輸層埠。如果ip包是icmp包,則繼續查詢icmp包中的type和code。對於分段資料報的後續包,則將傳輸層埠設為0後繼續查詢。

圖2-6  openflow交換機中的資料報頭解析和匹配流程

OpenFlow交換機的實現總結

先粗略介紹,後續會逐漸完善。openflow交換機通過使用openflow協議的安全通道與控制器進行通訊。其具體實現如下示意圖所示 對於乙個新到達的資料流,交換機通常的做法是,把該資料報傳送給控制器,由控制器來決定資料報的下一步操作。至於已存在的,則會直接根據原有的傳送路徑,發往目的點。根據上圖,在...

交換機交換機

交換機。常常聽人說交換機 路由器。什麼是交換機?為什麼叫交換機?交換什麼?交換機是不是就是路由器?這二者有什麼區別?這是我的疑問。沒辦法,基礎沒打好。一 什麼是交換機 交換機是這麼一種裝置 將網路分成若干小段,以解決網路擁堵,降低出錯,提高傳輸效率。為什麼分成若干小段可以提高傳輸效率呢?這涉及到網路...

傳統交換機或路由器與OpenFlow交換機區別

openflow交換機分為 純of交換機 of only 和支援of交換機 of enable 前者僅需要支援必備行動,後者還可以支援normal normal 指按照傳統交換機的2 層或3 層進行 處理 行動,同時,雙方都可已支援泛洪行動 flood action openflow交換機由flow...