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