SDN控制器必須能很好的進行網絡資源調度和控制,因此,SDN的南向網絡控制技術需要對整個網絡中的設備層進行管控與調度,包括鏈路發現、拓撲管理、策略制定、表項下發等。其中鏈路發現和拓撲管理主要是控制其利用南向接口的上行通道對底層交換設備上報信息進行統一監控和統計;而策略制定和表項下發則是控制器利用南向接口的下行通道對網絡設備進行統一控制。
鏈路發現及拓撲管理
鏈路發現技術是獲得SDN全網信息的關鍵,是實現網絡地址學習、VLAN、路由轉發等網絡功能的基礎,與傳統網絡中鏈路發現由各網元自主進行不同,SDN網絡中的鏈路發現工作由控制器統一完成。
SDN控制器主要使用了LLDP(Link Layer Discovery Protocol,鏈路層發現協議)作為鏈路發現協議,該協議提供了一種標準的鏈路發現方式,可以將本端設備的主要能力、管理地址、設備標識、接口標識等信息組織成不同的TLV(Type/Length/Value,類型/長度/值),并封裝在LLDPDU(Link Layer Discovery Protocol Date Unit,鏈路層發現協議數據單元)中發布于自己直連的鄰居,鄰居收到這些信息后,將其以標準MIB(Management Information Base,管理信息庫)的形式保存起來,以供網絡管理系統查詢機判斷鏈路的通信狀況。
封裝有LLDPDU的報文稱為LLDP報文,報文中包含了特定的組播、目的MAC地址,以及特定的以太網類型,已將LLDP數據包與其他MAC數據幀區分。對于OpenFlow交換機而言,其上的基于流表項匹配進行轉發的機制并不能直接處理常規的LLDP操作,因此相關的工作必須由控制器完成。控制器對SDN網絡進行鏈路發現的過程如圖所示:
控制器在執行鏈路發現過程時,會首先通過一個packet-out消息向所有與之連接的交換機發送LLDP數據包,該消息命令交換機將LLDP數據包發送給所有端口,一旦交換機接收到packet-out消息,他就會把LLDP數據包通過其所有的端口發送給與之連接的設備,如果其鄰居交換機是一臺OpenFLow交換機,那么該交換機將自行相應的流表查找操作。因為交換機中并沒有專門的流表項用于處理LLDP消息,所有它將通過一個packet-in消息將數據包發送給控制器。而控制器在收到packet-in消息后,會對數據包進行分析并在其保存的鏈路發現表中創建2臺交換機之間的鏈接記錄。網絡中其他交換機也都采用相同的方式向控制器發送packet-in消息,因此控制器就能夠創建完整的網絡拓撲視圖,基于這樣的視圖,控制器可以根據業務應用的流量需求,為每臺交換機推送下發不同的流表項。
基于LLDP消息的方法智能對于控制器直連的openflow交換機進行鏈路發現,如果網絡中存在非openflow域,即兩臺openflow交換機通過其他多臺非openflow交換機連接,此時需要其他的鏈路發現手段。在這種情況下,控制器還是會首先發送packet-out消息給與之相連的openflow交換機,但同時控制器會要求交換機發出廣播包,廣播包將被發往除交換機和控制器相連的端口之外的其他端口。廣播包從openflow交換機發出后,如果網絡中存在非openflow域,廣播包將從這個網絡域的一端進入并穿越,達到與該非openflow域連接的其他openflow交換機。因為在接收到廣播包的openflow交換機中并沒有對應的流表項可供廣播包匹配,所以該廣播包將被上傳到控制器,從而告知控制器在網絡中存在非openflow域。而如果控制器并沒有收到上傳的廣播包,那么就可判斷出整個網絡都有openflow交換機組成。
拓撲管理作用是為了隨時監控和采集網絡中SDN交換機的信息,及時反饋網絡的設備工作狀態和鏈路鏈接狀態。為了這一目標,控制器需要定時發送LLDP數據包的packet-out消息給與其相連的SDN交換機并根據反饋回來的packet-in消息獲知交換機信息,在監測交換機工作狀態的同時完成網絡拓撲視圖的更新。但值得注意的是,SDN網絡規模較大時,這種拓撲管理機制會導致較慢的收斂過程,影響網絡狀態的實時反饋,同時,該機制也使得包含LLDP數據包的packet-out消息發送的周期設置更復雜。
拓撲管理還有一項工作:隨時更新SDN交換機及鏈接狀態的同時,對各種邏輯組網信息進行記錄,其中最典型的場景就是云計算下的多租戶共享網絡資源。在多租戶情況下,網絡資源被虛擬化為資源池,每個租戶都可以按照自己的實際需求獲得設備、端口、帶寬等資源,同時還可以根據自身需求對其所有的資源靈活組網。這些租戶網絡相關的資源信息都需要在拓撲管理中予以保存和展現,以反映真實的網絡利用情況,實現優化的資源調度。同時給予不同租戶網絡的拓拓撲信息,SDN控制器可以為相應的網絡數據通路設定訪問控制列表,Qos等,支持租戶網絡在性能、安全等方面的彼此隔離,提供更優的用戶體驗。
策略制定和表項下發
流表是SDN交換機進行數據包處理的最基本依據,他直接影響了數據轉發的效率和整個網絡性能。流表是由集中化的控制器基于全網拓撲視圖生成并統一下發給數據流傳輸路徑上的所有SDN交換機,因此,流表的生成算法成了影響控制器智能化水平的關鍵因素。
SDN交換機的流表機制打破了傳統網絡中的層次化概念,無論是源MAC目的MAC、VLAN ID等傳統的二層網絡信息,還是源IP,目的IP等三層信息,或者是源TCP/UDP端口號、目的TCP/UDP端口號等4層信息,都被統一封裝在流表中。因此,控制器需要針對不同層的網絡傳輸需求,制定相應的轉發策略并生成對應流表下發給交換機。
對于2層轉發,在SDN網絡中,MAC地址學習在控制器的鏈路發現過程中實現,根據2層信息進行數據包轉發也比較容易實現,只需控制器以目的MAC地址為依據將對應的交換機轉發端口號寫入對應的交換機流表項中即可。
對于3層轉發,在SDN網絡中,控制器利用相關的路由算法計算出源和目的地址之間的路由信息,并以IP地址、MAC地址為依據,將對應的交換機轉發端口號寫入相應交換機的流表項中。
對于4層轉發,在SDN網絡中,4層數據包解析將在控制器中完成,并以TCP/UDP端口號、IP地址、MAC地址為依據,將對應的交換機轉發端口號寫入相應交換機的流表項中。
和傳統網絡一樣,SDN控制器可以有效處理不同層次上的數據轉發,可以至制定流表時,利用各個網絡層次上的規則和算法,減少流表數量。不同的是,傳統網絡在各個設備本地進行相關算法的執行,通常只能根據設備自身所掌握的的有限局部鏈接情況進行數據處理決策;而SDN具有集中化管控的優勢,控制器擁有全局的網絡資源視圖,因此更容易獲得優化的算法執行結果。不過,這樣做也會產生一些問題,例如在SDN系統中,所有數據流的轉發過程都需要經過控制器進行決策,從而為控制帶來繁重壓力。
控制器對SDN交換機設備的控制是通過流表下發機制進行的,SDN控制器的下發有主動和被動2種模式。主動是指數據包在到達openflow交換機之前就進行流表設置,因此,當第一個數據包到達交換機后,交換機就知道如何處理數據包了。這種方式有效消除了每秒鐘能處理的數據量的限制,理想情況下,控制器需要盡可能的預擴散流表項。被動方式是指第一個數據包到達交換機時并沒有發現與之匹配的流表項,只能將其送給控制器處理。一旦控制器確定了相應的方式,那么相關的信息就會返回并緩存在交換機上,同時控制器將確定這些緩存信息的保存時限。
不同的流表下發模式具有各自的特點。主動的流表下發利用預先設定好的規則,避免每次針對各個數據流的流表項設置工作,但考慮到數據流的多樣性,為了保證每個流都被轉發,流表項的管理工作變得復雜,例如需要合理設置通配符滿足轉發需求。被動的流表下發能更有效的利用交換機上的流表存儲資源,但在處理過程中,會增加額外的流表設置時間,同時一旦控制器和交換機之間的連接斷開,交換機將不能對后續到到的數據流進行轉發處理。