SDN-OpenFlow通道建立

SDN-OpenFlow通道建立

1)OpenFlow安全通道的建立

OpenFlow控制器開啓TCP的6633端口等待交換機的連接,當交換機啓動時,嘗試連接到指定控制器的6633端口。爲了保證安全性,雙方需要通過交換證書進行認證。因此,每個交換機至少需配置兩個證書,一個用來認證控制器,另一個用來向控制器發出認證。當認證通過後,兩邊發送握手消息給對方,該消息攜帶支持的最高協議版本號,接收方將採用雙方都支持的最低協議版本進行通信。一旦發現兩者擁有共同支持的協議版本,則建立安全通道;

否則發送錯誤消息,描述失敗原因,並終止連接。

)OpenFlow安全通道的維護

安全通道建立以後,交換機與控制器通過消息協商一些參數,並定時交換一些“保活”(Keepalive)的消息來維持連接。當連接發生異常時,交換機嘗試連接備份的控制器(至於備份控制器如何指定,不在OF協議規定範圍內),當多次嘗試均失敗後,交換機將進入緊急模式,並重置所有的TCP連接。

OpenFlowv1.0支持3種消息類型:Controller-to-Switch(控制器—交換機)、Asynchronous(異步)和Symmetric(對稱),每一類消息又有多個子消息類型。

1》 Controller-Switch(控制器—交換機)消息這類消息由控制器發起,包括Features、Configuration、Modify-State、Read-State、Send-Packet、Barrier等幾類消息,用於對OF交換機的管理。控制器通過其中各種請求(Request消息來查詢OF交換機的狀態,OF交換機收到後需回覆相應的響應(Reply)消息


Features

安全通道建立以後,控制器立即發送Features-

equest消息給交換機以獲得它支持的特性。


Configuration

控制器可以通過Set-config消息設置或通過Get-

config消息查詢交換機上的配置信息,交換機需要通過Config-

reply消息做出應答。


Modify-State

控制器通過Port-mod消息用來管理端口狀態,通過Flow-

mod消息增刪交換機的流表項,考慮到流表在

OpenFlow的核心地位,在此針對這個消息進行詳盡分析。

前4個字段是OpenFlow消息的通用報頭。wildcards 表示匹配時

12元組的掩碼位,被掩掉的元組不參加匹配。中間的部分從in_port到tp_dst字段說明了流表項12元組的信息,其中的pad負責對齊佔位,不代表任何意義cookie字段在處理數據分組時不會用到,控制器通過cookie來過濾流的統計信息。command字段表示對流表的操作,包括增加(Add)、刪除(Delete)、修改(Modify)等。

e_time和hard_time給出了該流表項的生存時間,其中idletime表示當這條流表項在這段時間內沒有匹配到數據分組,則該流表項失效,hard_time表示自流表項下發後只要過了這段時間即刻失效;兩者同時設置時,以先到的生存時間爲準;兩者同時爲0時,流表項不會自動失效。priority(優先級)字段的設置參考流表匹配那一小節,原則上優先級越高,所屬table號就越小。buffer_id 表示對應 Packet-in消息的buffer_id。out_port 僅在 command

爲Delete或者DeleteStrict時有效,表明當某表項不僅匹配了Flow-mod中給出的12元組,且轉發動作中指定端口等於該out_port的動作時才予以刪除,即對刪除操作的一種額外限制。

flags 字段爲標誌位,OpenFlow
v1.0 中包括 3項:OFPFF_SEND_FLOW_REM(流表失效時是否向控制器發送Flow-removed消息),OFPFF_CHECK_OVERLAP(交換機是否檢測流表衝突),OFPFF_EMERG(該流表項將被存於Emergency FlowCache中,僅在交換機處於緊急模式時生效,參考OpenFlow安全通道一節)。消息中最後的actions數組是對動作表的描述,actions[0]即代表其中第一個動作。

在這裏插入圖片描述

·
前4個字段,表示OpenFlow消息的通用報頭。

·
wildcard字段,表示匹配時12元組的掩碼位,被掩蓋掉的元組不參加匹配。

·
從in_port到tp_dst字段,表示流表項12元組的信息。

·
cookie字段,在處理數據分組時不會用到,控制器通過該字段來過濾流的統計信息。

·
command字段,表示對流表的操作,包括增加(Add)、刪除(Delete)、修改(Modify)等。

·
idle_time字段,表示當這條流表項在這段時間內沒有匹配到數據分組,則該流表項失效。

·
hard_time字段,表示自流表項下發後只要過了這段時間即刻失效。

·
priority字段,表示該流表項被處理的優先級,原則上優先級越高,所屬的Table號就越小。

·
buffer_id字段,表示對應Packet-in消息的buffer_id。

·
out_port字段,僅在command爲Delete或者Delete Strict時有效,表明當某表項不僅匹配了Flow-mod中給出的12元組,且轉發動作中指定端口等於該out_port的動作時才予以刪除,即對刪除操作的一種額外限制。

·
flags字段,該字段爲標誌位,OpenFlow v1.0中包括3項:OFPFF_SEND_FLOW_REM(流表失效時是否向控制器發送Flow-removed消息),OFPFF_CHECK_OVERLAP(交換機是否檢測流表衝突),OFPFF_EMERG(該流表項將被存於Emergency Flow
Cache中,僅在交換機處於緊急模式時生效)。

·
actions字段,該字段是個數組,表示要對滿足過濾條件的流做的動作列表,actions[0]即代表其中第一個動作。

在這裏插入圖片描述

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