1. 程式人生 > >OpenFlow網路基本介紹

OpenFlow網路基本介紹

近期對SDN進行了初步的認識和學習,現將自己做的筆記進行簡要整理。


目 錄


SDN是一種資料控制分離、軟體可程式設計的新型網路體系架構。SDN基於OpenFlow的可程式設計特性,分別由Controller和OpenFlow交換機組成,形成控制層和資料轉發層。
SDN採用了集中式的控制平面和分散式的轉發平面,兩個平面相互分離,控制平面利用控制、轉發通訊介面,對轉發平面上的網路裝置進行集中式管理。
其基本架構如下圖所示。
SDN架構圖

可以看到有業務層、控制層、轉發層。其中業務層和控制層之間的API叫做“北向介面”,使用者可以通過北向介面對控制層進行定義或控制,並觸發事件;控制層和轉發層之間的API叫做“南向介面

”,“南向介面”是控制層與轉發層之間的通訊通道,以OpenFlow協議為標準,實現了控制器與交換機之間的資訊互動。

下面介紹一下OpenFlow。OpenFlow網路從底到高由以下三部分組成:

  • OpenFlow交換機 ——實現資料層的轉發
  • Flow Visor ——對網路進行虛擬化
  • Controller ——對網路集中控制

圖片來自51CTO

OpenFlow交換機

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:網路虛擬層(中)