OpenFlow網路基本介紹
近期對SDN進行了初步的認識和學習,現將自己做的筆記進行簡要整理。
目 錄
SDN是一種資料控制分離、軟體可程式設計的新型網路體系架構。SDN基於OpenFlow的可程式設計特性,分別由Controller和OpenFlow交換機組成,形成控制層和資料轉發層。
SDN採用了集中式的控制平面和分散式的轉發平面,兩個平面相互分離,控制平面利用控制、轉發通訊介面,對轉發平面上的網路裝置進行集中式管理。
其基本架構如下圖所示。
可以看到有業務層、控制層、轉發層。其中業務層和控制層之間的API叫做“北向介面”,使用者可以通過北向介面對控制層進行定義或控制,並觸發事件;控制層和轉發層之間的API叫做“南向介面
下面介紹一下OpenFlow。OpenFlow網路從底到高由以下三部分組成:
- OpenFlow交換機 ——實現資料層的轉發
- Flow Visor ——對網路進行虛擬化
- Controller ——對網路集中控制
OpenFlow交換機
OpenFlow交換機由 安全通道、流表、OpenFlow協議 三部分組成。
安全通道
安全通道是連線OpenFlow交換機和控制器通訊的介面。控制器通過這個介面來控制和管理OF交換機,同時OF交換機通過這個介面將事件傳給控制器,傳送資料包,並接收來自控制器下發資料包。
控制器和交換機必須通過安全通道進行通訊,而且進行通訊的資料包必須按照OpenFlow協議規定的格式執行。
流表
流表是資料轉發的依據,與交換機的mac地址轉發表和IP地址路由表類似,流表中儲存了網路中各個層次的網路配置資訊,因此可以進行更加豐富的轉發規則。交換機收到來自主機的資料包後,會在本機查詢對應的動作,和對應的輸出埠。
流表有很多流表項,每一條流表項都是一個轉發規則。流表項的結構如下圖:
- 包頭域用於資料包匹配;
- 計數器用於統計匹配資料包個數;
- 動作用於指示匹配資料包如何處理;
流表由控制器下發給交換機。下發模式有兩種:主動模式、被動模式。
主動模式——控制器將自己收集的流表資訊主動下發給交換機等網路裝置,隨後網路裝置可直接查詢流錶轉發。
被動模式——網路裝置收到一個沒有匹配的FlowTable記錄時,將其封裝成Packet_in資料包,轉發給控制器,由控制器決定如何處理,並下發流表。
關於流表包頭域、計數器和具體動作模式的介紹,可以參考:流表結構的介紹
OpenFlow協議
OpenFlow協議是交換機與控制器之間通訊時所遵循的標準,包括互動資訊的標準和控制器與交換機的介面標準。協議的核心部分是用於OpenFlow協議資訊結構的集合。2014年OpenFlow協議已到了Edition 1.5。
具體的版本內容可以參考:OpenFlow協議規範概況介紹
也可下載各版本的英文文件:openflow協議各版本下載(1.0—1.5)(中英)
OpenFlow協議有三種訊息型別:
1. Controller-to-Switch(控制器主動發出)
- Features 用來獲取交換機特性
- Configuration 用來配置OpenFlow交換機
- Modify-State 用來修改交換機狀態(修改流表)
- Read-Stats 用來讀取交換機狀態
- Send-Packet 用來發送資料包
- Barrier 阻塞訊息
2. Asynchronous(非同步訊息,交換機主動發出)
- Packet-in 用來告知控制器,交換機接收到了資料包(該資料包要麼被完全包含在packet-in訊息中,要麼被buffer在交換機中,等待控制器的Packet-out事件來處理)
- Flow-Removed 用來告知控制器交換機流表被刪除
- Port-Status 用來告知控制器交換機埠狀態更新
- Error 用來告知控制器交換機發生錯誤
3. Symmetric(對稱訊息,由控制器或交換機主動發出)
- Hello 用來建立OpenFlow連線
- Echo 用來確認交換機與控制器之間的連線狀態
- Vendor 廠商自定義訊息
OpenFlow協議的資料包包括 Header 和 Message ,其中Header主要是協議版本,資料包長度等,Message是具體的資料包內容。
OpenFlow交換機分類
OpenFlow交換機分為兩類:專用OpenFlow交換機、支援OpenFlow的交換機
專用OpenFlow交換機:專門為OpenFlow設計的交換機。與傳統交換機不同,它不再具有控制邏輯,而僅僅是在埠間轉發資料包的一個簡單部件。
支援OpenFlow的交換機:是在傳統商業交換機的基礎上,添加了安全通道、流表、OpenFlow協議,獲得了OpenFlow特性的交換機。它既具有傳統交換機的控制轉發功能,又具有OpenFlow的轉發邏輯。因此該交換機對資料包支援兩種不同的接收處理方式。
按照發展程度,OpenFlow交換機還可分為:“Type0”交換機、“Type1”交換機。
“Type0”交換機:僅支援十元組。對資料包的操作只有以下4條:
- 轉發給指定的一個或幾個埠
- 壓縮並轉發給控制器
- 丟棄
- 通過交換機的正常處理流程來轉發資料包
“Type1”交換機:相比於“Type0”交換機,功能更多,從而支援更復雜的網路試驗,具有一個新的功能集合。
FlowVisor
FlowVisor是建立在OpenFlow協議上的網路虛擬化工具。它將物理網路劃分為不同的邏輯網路,從而實現虛網劃分。它讓管理員通過定義流規則來管理網路,而不是修改路由器和交換機的配置。
FlowVisor部署在標準OpenFlow控制器與OpenFlow交換機之間,並對兩者是透明的。它將物理網路劃分為多個虛網,使每個控制器控制一個虛網,並保證各虛網相互隔離。
FlowVisor的設計原則是:
- FlowVisor對控制器和交換機是透明的,它們都感知不到FlowVisor的存在
- 各虛網之間相互隔離,即使是廣播包,各虛網的流量也相互隔離
- 劃分虛網的策略是靈活、模組化、可擴充套件的
OpenFlow訊息在進行傳輸時,FlowVisor會根據配置策略對OpenFlow訊息進行攔截、修改、轉發等操作。這樣,控制器就只能控制其被允許控制的流,但是控制器並不知道它所管理的網路被FlowVisor進行過分片操作。 同樣,交換機發出的訊息經過FlowVisor過濾後,也會被髮送到相應的控制器。
Controller
OpenFlow將控制層與資料轉發層分離,其中OpenFlow交換機實現了資料轉發功能,而OpenFlow控制器則實現了控制層功能。Controller通過OpenFlow協議提供的標準資料介面,對OpenFlow交換機中的流表進行控制、管理,實現了對整個網路的集中控制。
在Controller中,可以用python等程式對其功能進行定義,比如下發流表,對Packet_in包進行處理等。
參考文章如下:
1. OpenFlow協議的理解
2. 流表的結構的介紹
3. OpenFlow網路的基本組成
4. FlowVisor入門教程
5. 網路虛擬化之FlowVisor:網路虛擬層(中)