一:SDN控制平面
一個或多個SDN控制器組成,是網絡的大腦。
對底層網絡交換設備進行集中管理,狀態監測、轉發決策以及處理和調
度數據平面的流量;
通過北向接口向上層應用開放多個層次的可編程能力。
(一)典型的SDN控制器體系架構
SDN控制平面分為6層
南向接口層主要對各種南向接口協議的支持,如Open Flow,Netconf,OVSDB等,控制器通過接口層的通道實現對底層網絡的管理
抽象邏輯層主要是將服務抽象出來,實現各種通信協議的適配,為各模塊和應用提供一致的服務
基礎網絡層在任何控制器中都是必不可少的,這里的模塊包括了控制器內部的實現邏輯,比如:拓撲管理、鏈路計算等,也包括一些底層的網絡實現邏輯,比如BGP Vxlan的實現等
內置應用層提供了基礎的功能包,如L2、L3網絡,Overlay APP,服務鏈APP等
北向接口層中,控制器實現了Restful API的接口或者嵌入式的API提供給上層應用調用
配置管理層提供了控制器服務管理,集群管理和圖形化界面,如ODL控制器提供了模塊的啟用、刪除等功能,Floodlight等控制器提供了一個簡單易用的UI界面,可以在web界面中調用控制器的北向API對控制器進行配置
二:控制器關鍵技術
主要是包括南向網絡控制和北向業務支撐
(一)南向網絡技術
通過南向接口協議進行鏈路發現、拓撲管理、策略制定、表項下發等:
-鏈路發現和拓撲管理:利用上行通道對底層交換設備上報信息進行統一監控和統計;
–策略制定和表項下發:利用下行通道對網絡設備實施統一控制。
鏈路發現
是獲得SDN全網信息的關鍵,是實現網絡地址學習、VLAN、路由轉發等網絡功能的基礎
傳統網絡中:由各個網元自主進行
SDN網絡:網絡鏈路的發現工作由控制器統一完成
對於Open Flow交換機直連鏈路的發現,SDN控制器通過鏈路層發現協議LLDP實現
首先控制器通過packet-out消息(紅)向所有的相連的交換機發送LLDP數據包,該消息命令交換機將LLDP數據包發送給所有端口, 當交換機接收到packet-out消息,他就會把LLDP數據包,通過其所有的端口發送給與之相連的設備, 由於鄰接交換機是一台Open Flow交換機,在該交換機中沒有專門的流表項,用於處理LLDP數據包, 所以他將通過一個packet-in消息(藍)將數據包發送給控制器, 控制器在接收到packet-in消息后會對數據包進行分析,並創建兩台交換機之間的鏈接記錄。 網絡中的其他交換機也都采用同樣的方式向控制器發送packet-in消息,因此控制器能夠創建完整的網絡拓撲視圖
對於OF交換機非直連鏈路的發現,即兩台open flow交換機通過其他多台非open flow交換機連接。通過廣播實現
控制器在發送packet-out消息給open flow交換機的同時,會要求交換機發出廣播包,通過廣播的機制實現鏈路的發現
拓撲管理
是為了實時監控和采集SDN交換機的信息,反饋工作狀態和鏈路連接狀態:
–定 時 發 送 帶 LLDP 數 據 包 的 Packet_out 消 息,根據Packet_in消息獲知交換機信息,監測交換機工作狀態,完成網絡拓撲視圖更新;
–當網絡規模較大時,導致較慢的收斂過程,影響實時反饋;
策略制定(南向網絡控制中的核心技術之一)
流表生成算法是影響控制器智能化水平的關鍵因素
控制器針對不同網絡層次的傳輸需求,制定相應的轉發策略並生成對應的流表項
表項下發(策略計算結果需要通過表項下發來實現)
通過流表下發機制控制交換機的數據包轉發
–主動(proactive)下發:數據包到達交換機之前進行流表設置--是控制器在交換機還沒有收到數據包前,先給交換機下發流表,告訴交換機如何處理第一個數據包
主動下發可以避免交換機啟動時,數據流對交換機的沖擊,並且可以消除數據傳輸過程中,流表項設置延遲的問題
–被動(reactive)下發:交換機接收到一個數據包並且沒有發現匹配的流表項,將其送給控制器處理。
在復雜網絡中會產生流表項設置延遲的問題
(二)北向業務支撐
通過北向接口為上層業務應用以及資源管理系統提供靈活的網絡資源抽象;
北向接口定義是SDN領域關注和爭論的焦點---北向接口直接為業務應用服務,其設計密切聯系業務應用需求,所以具有多樣化特征,很難統一;
REST API是用戶比較容易接受的方式;
三:SDN開源控制器
(一)POX( https://github.com/noxrepo/ )
-采用Python語言開發的基於OpenFlow的控制器;
-是NOX的兄弟版本,實現了簡單的控制平面的功能。
-簡單、易上手
組成:POX由內核和組件組成
1、內核( core ):openflow和of_01 ; --內核負責組件的注冊 2、組件( component ) --組件之間通過內核進行交互
控制器可以通過內核中open flow模塊控制所有交換機,
of_01模塊主要是運行一個線程,該線程不斷與交換機進行TCP連接,
當某交換機送來一個協議消息,of_01會觸發該消息所對應的事件,並由相關的組件處理函數進行事件的處理
代碼結構簡單,無需安裝即可使用,不需要理解所有代碼
缺點:由於代碼簡單--功能不夠全面
(二)Ryu( http://osrg.github.io/ryu/ )
NTT主導開發,RYU是一個基於組件的SDN框架
控制層主要包括協議解析,事件系統,基本網絡報文庫等
應用層包含內建應用,和基於控制層提供的API編寫的網絡應用
Ryu通過南向接口與數據平面的設備進行通信,在南向協議方面支持1.0到1.5版本open flow協議,還支持如OF-Config OVSDB,VRRP和NETCONF等其他南向協議
通過北向接口完成應用層和控制層的通信,Ryu提供REST API和RPC等接口,允許外界的進程和Ryu進行通信,用戶可以在Open Stack或者其他程序上與Ryu進行通信,從而控制SDN網絡
Ryu包含大量的組件和庫函數供SDN的應用開發使用
庫函數可以在組件中直接調用,而組件之間的關系是相互獨立的
(三)Floodlight( http://www.projectfloodlight.org/ )(JAVA開發)