OpenFlow 協議詳解

OpenFlow是一種新型的網絡協議,它是控制器和交換機之間的標準協議。自2009年底發佈1.0版本後,OpenFlow協議又經歷了1.1、1.2、1.3及1.4版本的演進過程,目前使用和支持最多的是1.0和1.3版本。OpenFlow1.3在1.0版的基礎上進一步優化及升級,其中添加了很多新的特性及消息,如支持多個流表(flow table)、組表(group table),支持多控制器等。一個流表中包含多個流表項,OpenFlow v1.3中流表項主要由7部分組成,分別是匹配域(用來識別該條表項對應的flow)、優先級(定義流表項的優先順序)、計數器(用於保存與條目相關統計信息),指令(匹配表項後需要對數據分組執行的動作)、TimeoutsCookieFlags,如下圖所示。

與OpenFlow v1.0不同的是,OpenFlow v1.3協議中一臺OF交換機會有多張流表。具體匹配流程如下圖所示。

當 一 個 數據包到達交換機 , 從數據包中提取匹配字段從第 一 個流表 開始 查找 匹配 , 匹配字段 取 決於數據 包 的類 型 , 通常 包括各種 數 據包 的 頭字段 , 例如 以 太 網 源地 址或 IPv4 目 的地 地址 等 , 此 外 , 還可 以 對 數據 包 關 聯的 字段 ( 如 交換 機 1 4 的入端 口 等 ) 進行 匹配 。 如果 數據包和流表項匹配成功 , 則 更 新計數器並執 行流 表項 中 的 指令。 如果該流表 項使用 GOTO 指令指 向 了 某一 其他流表 , 則執行完本次指令的數據包以及動作集、元數據等信息轉到GOTO 指令指 向 的 流表進行 下 一 步 的 匹 配(也就是圖中的 跳轉到Table n?); 若 未指 向 另 一 流表則執行動作集 , 此時流水線處理成功。 如果在 某 個流表 中 並 未 匹配成 功 , 則 查找該 流表中 是否存在 tabl e - mi s s 流表項 ( 流 表 中 的 t abl e- mi ss 流表項 指定如 何 處理未 匹 配成功 的 數據包 ) , 如 果存在 t ab l e - mi s s 流 表 項 , 則 按該流表項中 的 指令執行 , 如丟棄 數據包 、 將數據包 轉到 另 外 一 個 流表 或者發送給控制器(即通過Packet_In消息傳遞給控制器,由控制器制定數據包的轉發策略而後通過Packet_Out消息下發流表給交換機) 等; 如果在 流表 中 並未 匹配成 功並且該流表項 中 不存在 tabl e- mi ss 流 表項, 那麼 交換機將會丟棄該 數據 包。

Ope nFlo w 協議在工作 中 使用 GOTO 指令從一 張流錶轉 到另 一 張流表 , 該技 術被稱 爲 多級 流表技術 。

 

SDN控制器的路由原理:OpenFlow協議定義了交換機在報文匹配失敗時向控制器申請流表的方法,當交換機收到一個不能被當前流表各條流匹配的數據包時,通過將失配報文的相關信息封裝在Packet-In消息中發送給控制器,讓控制器知曉報文失配情況,由控制器通過Flow-Mod等消息向交換機安裝新流表。

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