SDN學習筆記

SDN

什麼是SDN

SDN是一種框架和思想,核心訴求是經過軟件控制網絡,實現業務的自動化部署,爲方便軟件來控制網絡,但願控制面和轉發面是分離的。編程

例如,傳統的交換機內部,由交換機負責具體的網絡流量往哪裏轉發,在SDN中,有一個控制器進行流量轉發的計算,而後將結果發送給交換機,交換機只進行簡單的轉發,從分佈式的控制轉發過程稱爲集中式的控制,使得控制和轉發平面相分離。

SDN的特色

網絡開放可編程、數控分離(數據平面和控制平面相分離,爲開放可編程提供架構基礎)、邏輯上集中控制、網絡業務的自動化應用程序控制。segmentfault

SDN的架構

X20180324-100548@2

數據平面

能夠抽象爲數據平面或者轉發平面,能夠是交換機、虛擬交換機、路由器等。數據平面通用抽象模型將不一樣協議的匹配表整合起來,造成多字段匹配表,解決了網絡協議堆砌的問題安全

傳統網絡中, 現有的分層協議能夠看做一種數據平面的抽象模型,可是控制平面依然只是網絡功能和網絡協議的堆砌,缺乏合適的抽象模型

南向接口

控制面跟數據轉發面之間的接口,傳統網絡的南向接口存在於各個設備商的私有代碼中,對外不可見,如存在於交換機內部服務器

控制器(控制平面)

能夠有多個,能夠是主從關係,也能夠是對等關係,一個控制器控制多臺設備,一個設備也能夠被多臺控制器控制,向上提供應用程序的編程接口,向下控制硬件設備。網絡

北向接口

傳統網絡裏,指交換機控制面跟網管軟件之間的接口,在SDN中,指控制器跟應用程序之間的接口架構

SDN應用服務

爲用戶提供服務,包括負載均衡、安全、網絡運行狀況監測等,並以應用軟件的形式表現出來,代替傳統的網管軟件來對網絡進行控制和管理,能夠跟控制器位於同一臺服務器,也能夠運行在別的服務器上經過通訊協議來跟控制器通訊。併發

SDN南向協議

狹義的SDN南向協議具備對數據平面編程的能力,能夠指導數據平面設備的轉發操做等網絡行爲,關鍵在因而否具備確切的數據平面可編程能力(如openflow)。負載均衡

廣義的SDN南向協議主要分爲三種類型。第一種是僅具備對數據平面配置的南向協議(如OF-Config、OVSDB、NET-CONF);第二種是應用於廣義SDN,具備部分可編程能力的協議(如OpFlex);第三種是原本就存在,其應用範圍很廣,不限於應用在SDN控制平面和數據平面之間傳輸控制信令的協議(如PCEP、XMPP)。框架

狹義SDN南向協議 — Openflow

Openflow原理

X20180324-163257@2

Openflow交換機

Openflow交換機能夠分紅流表和安全通道兩部分。異步

  • 流表用於存放流表項,控制器能夠給交換機下發流表項來指導交換機處理匹配流表項的數據包
  • 安全通道用於和控制器通訊的安全鏈接
在Openflow協議中,交換機是策略的執行者,而網絡相關的策略須要控制器下發

Openflow表

流表

X20180324-163920@2

  • 匹配域用於區分不一樣的數據流
  • 計數器記錄了匹配數據流的數據包的數目和字節數等相關數據
組表

組表用於定義一組動做,且這組動做能夠被多個流表項共同使用,從而實現組播、負載均衡、容災備份和聚合等功能。

Meter表

Meter表用於計量和限速,能夠針對流制定對應的限速規則,從而實現豐富的Qos功能,注意不是針對端口的。

OpenFlow通道

控制器和交換機的通訊通道,支持如下三類報文:

  • Controller-to-Switch:主要由控制器初始化併發送給交換機
  • Asynchronous:交換機異步上傳給控制器的報文,告知控制器新數據包的到達和交換機狀態的改變
  • Symmetric:無需等待對方請求,雙發均可以任意發送的報文

OpenFlow的缺點

  • 沒法適應複雜的場景,當出現一種新的協議,須要擴充流表的匹配域,同時重寫交換機和控制器兩端的協議棧,交換機只能按照固定的協議邏輯去處理數據,不斷增多的匹配域,使得OpenFlow的交換機的設計與實現愈來愈複雜
  • 只能在現有支持的轉發邏輯上添加對應的流表項來指導數據包的轉發,而沒法對交換機的轉發進行編程和修改,使得數據平面仍然須要掌握協議的語義等控制信息才能完成數據的匹配
  • 無狀態協議,交換機只能受控制器的指導去執行操做,而沒法在知足條件時主動採起動做,過分依賴控制平面
POF協議和P4協議對此進行了改進

廣義SDN南向協議

OF-Config協議

OF-Config協議是一種交換機配置協議,主要功能包括進行交換機鏈接的控制信息,端口和隊列資源的配置及端口等資源的狀態修改等。

OF-Config協議能夠看做是Openflow協議的一種補充

X20180324-165057@2

X20180324-165133@2

OVSDB協議

OVSDB與OF-Config協議相似,都是交換機配置協議,二者區別在於:OVSDB僅用於OVS(Open vSwitch)的配置,而OF-Config能夠用於全部支持OpenFlow的軟件或者硬件的交換機

NETCONF協議

是一種產生於SDN以前的網絡配置協議,NETCONF是許多網絡協議的配置協議,能統一管理和配置SDN設備和傳統網絡設備,既保證了現有網絡設備的可用性,又支持SDN設備的設備

OpFlex協議

  • OpFlex是一種聲明式控制的協議,只通知對象要達到一種狀態的要求,但並無規定經過指定的方式去達到這個狀態
  • OpenFlow會精確的告訴交換機具體的動做,來完成數據的處理
  • OpFlex具備的可編程能力不強

XMMP協議

不是專門爲SDN設計,能夠統一管理傳統設備和SDN設備,能夠用於作OpenFlow的補充協議,或者用於SDN和傳統網絡混合組網的管理

PCEP

PCEP用於爲流量工程提供路徑計算服務,把路徑計算的控制邏輯從轉發設備中抽離到遠端,實現了部分數據平面和控制平面的分離,將OpenFlow和PCEP協議結合使用實現OpenFlow網絡和傳統網絡的統一管理和調度

徹底可編程南向協議

POF協議

  • 經過$\{offset,length\}$來肯定匹配數據,強調協議無關
  • 協議的操做無非是增長、修改和刪除對應的字段/標籤,這些操做能夠經過通用的指令集來實現,POF協議爲交換機設計了通用的指令集
  • 針對OpenFlow的無狀態缺點,POF設計了相關指令來在交換機內部維護一個簡單的狀態機,在條件知足時,能夠採起主動的動做,而後異步通知控制器發生的改變,從而實現數據的同步
POF協議的設計思想借助了計算機的設計思想,控制器至關於操做系統,而轉發元件(交換機)至關於CPU執行相關的指令

X20180324-171929@2

POF協議的缺點

控制流程複雜,丟失了部分性能,須要定義一套通用指令集,實現複雜的指令調度

P4

協議無關數據包處理編程語言,關注的是數據平面的可編程

  • P4編程語言具備對交換機的協議解析流程和數據處理流程進行編程的能力
  • 轉發設備協議無關轉發
  • 設備無關性

思想:是一門數據平面編程語言,當出現一種新的協議,經過P4語言編寫程序,利用P4編譯器將程序編譯並寫入交換機中,使得交換機可以擁有處理該協議的功能。

SDN控制器

X20180325-131012@2

SDN數據平面

通用可編程轉發模型

通用硬件模型

X20180325-160939@2

上圖爲OpenFlow Switch通用硬件模型架構,其中網絡數據處理流程爲:數據包從端口進入$\rightarrow$通用模型中的數據包解析模塊對數據包頭進行分析$\rightarrow$選擇對應的流表進行處理$\rightarrow$在流表內部,與每一個流表項進行比較,若匹配成功,則按照對應的動做處理

流水線處理

X20180325-161633@2

採用多級流表,數據包在進入流水線以前,被分配一個空的操做指令集,進入第0個流表開始處理,通用硬件模型將數據包協議內容與每一個流表項進行匹配,將匹配成功的流表項中的操做指令寫入操做指令集中,或者傳輸給下一個流表

  • 現有交換機內部一般有多個查找表,多級流表使得資源的利用率變得更高
  • 單流表會形成資源浪費,多級流表能夠組合支持實現不一樣處理之間的邏輯關係,有效的減小流表的數量,具備更好的適配能力

流表

X20180325-162256@2

  • 每一個流表由多個流表項組成,流表項的匹配域用來與每一個數據包的指定包頭標識集合進行比較;
  • 流表項的優先級用來表示該流表項匹配的優先級,當數據包與多條流表項匹配成功的時候,須要按照優先級來選擇一條流表項,並執行該表項的動做;
  • 失效時間包括硬超時和軟超時,若是流表項的生存時間超過硬生存時間或者在軟生存時間內沒有匹配到數據包,則流表項中的內容將被清空

單個流表的處理過程

X20180325-163139@2

  • 先從網絡數據包中提取待匹配的網絡數據包協議字段組合,再加上上一個流表的Metadata信息共同組成一個待匹配域(可能該數據包從上級流表流入)
  • 與每一個流表項進行匹配,若是隻有一個流表項匹配到,則更新對應流表項的計數器等狀態,而後執行流表項中的指令,這些指令會指明數據包跳轉到哪個流表【跳轉指令,不是操做指令】,從而實現流表的跳轉【只能向前跳轉】;當數據包與多條流表項匹配成功的時候,須要按照優先級來選擇一條流表項;
  • 當流表項中沒有指定跳轉指令時,流水線中止跳轉,而後對數據包執行具體的操做【最後一個流表不會包含跳轉指令】

組表

X20180325-164207@2

  • 組表用於定義一組動做,且這組動做能夠被多個流表項共同使用,從而實現組播、負載均衡、容災備份和聚合等功能
  • 每一個組表由多條組表項組成,在流表項中,經過使用Group操做能夠將數據包指向某個組操做
  • 組表項的桶操做(Action Buckets)能夠用來存儲多個Action Bucket,每一個Action Bucket包含一個數據包操做指令集

組表項操做類型(Group Type)

  • 全操做類型(ALL),執行Action Buckets中的全部Action Bucket中的操做指令集,能夠實現網絡中的組播和廣播功能
  • 選擇類型(Select),只執行一個Action Bucket中的操做指令集,可用於流量的網絡負載均衡
  • 間接類型(Indirect),只支持一個Action Bucket
  • 快速恢復類型(Fast Failover),只執行激活的第一個Action Bucket,多用於容災備份場景

Meter表

X20180325-172645@2

  • Meter表用於計量和限速,能夠針對流制定對應的限速規則,從而實現豐富的Qos功能,注意不是針對端口的
  • 一般當網絡數據流的當前流量超過rate閾值時,纔會執行band type中的指定操做

通用處理指令

網絡處理控制指令

  • 數據包的操做指令集進行寫入、應用或者刪除等修改指令,如數據包在流表中,控制指令完成對數據包操做指令集中指令的添加、更新和刪除等操做
  • 數據包在多個表中的處理順序的跳轉指令

操做指令

完成對數據包的丟棄、複製、轉發和修改等操做

專用指令

如Table-miss表項中的Table-miss指令定義了在流表中匹配不成功時處理網絡數據包的行爲,匹配全部的匹配域,優先級爲零,使得Table-miss表項能被全部的數據包匹配

Open Swtich的缺點

  • 數據包解析和包調度模塊還不具有編程能力
  • 新協議擴展方面抽象能力不夠
  • 不支持有狀態的網絡數據處理
  • 只支持有限數量的網絡數據處理操做,不支持新的處理操做擴展
  • 網絡流量監控和分析方面不足

白盒交換機

也稱爲開放交換機,網絡交換機硬件和操做系統解耦合的結果

本質上,解決網絡可編程的因素在於數據平面的可編程

參考資料
楊澤衛, 李呈. 重構網絡: SDN 架構與實現[J]. 2017.

做者: yearsj
轉載請註明出處: https://segmentfault.com/a/11...
相關文章
相關標籤/搜索