劉???,李集林,尤啟迪,鄒光南
(北京衛(wèi)星信息工程研究所 北京 100086)
一種基于OpenFlow協(xié)議的拓?fù)浒l(fā)現(xiàn)方法
劉海客,李集林,尤啟迪,鄒光南
(北京衛(wèi)星信息工程研究所 北京 100086)
傳統(tǒng)網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)及無(wú)環(huán)轉(zhuǎn)發(fā)結(jié)構(gòu)的構(gòu)建方法如STP及RSTP,已不能更好滿足未來(lái)復(fù)雜的網(wǎng)絡(luò)環(huán)境,其慢收斂性、不可擴(kuò)展性及較低的帶寬利用率一直無(wú)法很好解決。在SDN網(wǎng)絡(luò)架構(gòu)之上,深入探討基于OpenFlow協(xié)議的底層網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)機(jī)制,闡述了新網(wǎng)絡(luò)架構(gòu)下的鏈路發(fā)現(xiàn)方法及無(wú)環(huán)轉(zhuǎn)發(fā)結(jié)構(gòu)構(gòu)建方法。仿真驗(yàn)證了該方法的有效性,并在Mininet中對(duì)該方法的收斂時(shí)間進(jìn)行測(cè)算。該拓?fù)浒l(fā)現(xiàn)方法可提升網(wǎng)絡(luò)功能的可擴(kuò)展性,并帶來(lái)良好的用戶體驗(yàn)。
軟件定義網(wǎng)絡(luò);拓?fù)浒l(fā)現(xiàn);生成樹;OpenFlow協(xié)議;收斂時(shí)間
隨著網(wǎng)絡(luò)技術(shù)及網(wǎng)絡(luò)應(yīng)用的不斷發(fā)展,傳統(tǒng)的STP及RSTP協(xié)議已不再更好地滿足當(dāng)前更復(fù)雜、更智能、更現(xiàn)代的網(wǎng)絡(luò)環(huán)境。其具有較長(zhǎng)的收斂時(shí)間,并且在組網(wǎng)應(yīng)用中主要以交換機(jī)間擴(kuò)散相應(yīng)的控制信令實(shí)現(xiàn)網(wǎng)絡(luò)的無(wú)環(huán)化,因此缺乏對(duì)拓?fù)涞目刂乒δ?,在網(wǎng)絡(luò)中某條鏈路失效或有新的交換節(jié)點(diǎn)加入和離開時(shí),將給用戶體驗(yàn)帶來(lái)較大影響。對(duì)一些后繼協(xié)議如TRILL及802.1aq(最短路徑橋接)的提出,均有一定的局限性。如TRILL由于具有額外的封裝,在硬件中需要設(shè)計(jì)新的ASIC來(lái)完成數(shù)據(jù)幀的轉(zhuǎn)發(fā),并且由于單播的幀和非單播的幀采用不同的方式進(jìn)行轉(zhuǎn)發(fā),當(dāng)目的MAC狀態(tài)從未知轉(zhuǎn)到已知后,會(huì)出現(xiàn)數(shù)據(jù)包亂序的情況。而802.1aq協(xié)議復(fù)雜性高,要與現(xiàn)有技術(shù)融合難度大[1]。本文將在SDN網(wǎng)絡(luò)的架構(gòu)下,探討基于OpenFlow協(xié)議如何實(shí)現(xiàn)網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)及無(wú)環(huán)轉(zhuǎn)發(fā)路徑構(gòu)建的方法,充分利用SDN集中式的管控優(yōu)勢(shì)[2],解決拓?fù)渥R(shí)別收斂慢、拓?fù)涓脑僮R(shí)別時(shí)的業(yè)務(wù)不連續(xù)等問題。
1.1OpenFlow協(xié)議交互流程
根據(jù)OpenFlow協(xié)議[3-5],在控制器與OF交換機(jī)啟動(dòng)時(shí),控制器將與每個(gè)交換機(jī)建立一條安全可靠的通信信道。在控制器和OF交換機(jī)之間首先進(jìn)行交換機(jī)的注冊(cè)流程,如圖1所示。
圖1 OF交換機(jī)注冊(cè)流程
1)交換機(jī)通過發(fā)送Hello信令,可以獲知控制器的存在,Hello信令為對(duì)稱信令,因此控制器也需要發(fā)送一個(gè)Hello信令給交換機(jī),通過此信令可以協(xié)商控制器和交換機(jī)使用的OpenFlow版本號(hào);
2)控制器向交換機(jī)發(fā)送一個(gè)Features Request信令,獲取交換機(jī)中哪些端口可用;
3)在這種情況下,控制器要求交換機(jī)使用特定的參數(shù);
4)OF交換機(jī)回復(fù)控制器它的物理端口、端口能力、所支持的動(dòng)作、緩存大小;
5)控制器要求交換機(jī)清空所有流表,保證交換機(jī)以初始狀態(tài)開始運(yùn)行。
在 OpenFlow協(xié)議中,規(guī)定了流表超時(shí)流程。在OpenFlow設(shè)備中的每一個(gè)流表具有一個(gè)超時(shí)值。對(duì)于一個(gè)規(guī)則,如果在規(guī)定的超時(shí)閾值之前沒有業(yè)務(wù)匹配它,OpenFlow設(shè)備將刪除這個(gè)流表,并通知控制器。在超時(shí)后,交換機(jī)通知控制器哪個(gè)流表被刪除。
當(dāng)OF交換機(jī)接收到一個(gè)無(wú)匹配流表的數(shù)據(jù)流時(shí),將使用PacketIn信令攜帶部分?jǐn)?shù)據(jù)頭部信息回傳給控制器,由控制器的相應(yīng)程序產(chǎn)生處理策略。
1.2基于OpenFlow的鏈路發(fā)現(xiàn)及無(wú)環(huán)拓?fù)錁?gòu)建方法
在SDN網(wǎng)絡(luò)架構(gòu)下基于OpenFlow協(xié)議實(shí)現(xiàn)二層網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)功能,可充分發(fā)揮SDN網(wǎng)絡(luò)集中化管理及底層網(wǎng)絡(luò)視圖可見的優(yōu)勢(shì),與傳統(tǒng)二層網(wǎng)絡(luò)的STP方法相比,在收斂時(shí)間、故障診斷、負(fù)載均衡等方面具有天然優(yōu)勢(shì)[6-7]。
圖2所示為基于OpenFlow協(xié)議的拓?fù)渥R(shí)別功能模塊圖,在OpenFlow協(xié)議之上,主要包括拓?fù)浒l(fā)現(xiàn)模塊、STP模塊、鏈路連接對(duì)應(yīng)表和拓?fù)浣Y(jié)構(gòu)。
圖2 拓?fù)渥R(shí)別功能模塊組成圖
拓?fù)浒l(fā)現(xiàn)模塊:該模塊通過發(fā)送和接收LLDP數(shù)據(jù)包(鏈路層發(fā)現(xiàn)協(xié)議),識(shí)別網(wǎng)絡(luò)中不同OF交換機(jī)的端口連接情況,同時(shí)如果發(fā)現(xiàn)底層網(wǎng)絡(luò)拓?fù)浒l(fā)生變化(新交換機(jī)連入網(wǎng)絡(luò)或發(fā)生鏈路故障),則會(huì)觸發(fā)STP模塊重新計(jì)算無(wú)環(huán)路拓?fù)浣Y(jié)構(gòu)。
鏈路連接對(duì)應(yīng)表:該模塊主要存儲(chǔ)由拓?fù)浒l(fā)現(xiàn)模塊識(shí)別出的底層網(wǎng)絡(luò)交換機(jī)連接關(guān)系對(duì)應(yīng)表。
STP模塊:由拓?fù)浒l(fā)現(xiàn)模塊觸發(fā),當(dāng)?shù)讓泳W(wǎng)絡(luò)拓?fù)浒l(fā)生變化時(shí),STP模塊根據(jù)已識(shí)別的交換機(jī)互連關(guān)系計(jì)算一個(gè)無(wú)環(huán)路的數(shù)據(jù)轉(zhuǎn)發(fā)拓?fù)浣Y(jié)構(gòu)。
拓?fù)浣Y(jié)構(gòu):此模塊主要存儲(chǔ)計(jì)算出的無(wú)環(huán)路數(shù)據(jù)轉(zhuǎn)發(fā)拓?fù)浣Y(jié)構(gòu),此結(jié)構(gòu)將作為底層網(wǎng)絡(luò)數(shù)據(jù)轉(zhuǎn)發(fā)的依據(jù),并且按照此結(jié)構(gòu)配置底層網(wǎng)絡(luò)的端口轉(zhuǎn)發(fā)屬性。
1)拓?fù)浒l(fā)現(xiàn)
拓?fù)浒l(fā)現(xiàn)模塊的主要處理流程如下圖3所示。
圖3 拓?fù)浒l(fā)現(xiàn)處理流程圖
在拓?fù)浒l(fā)現(xiàn)模塊中,控制器主要需要監(jiān)聽OpenFlow協(xié)議的交換機(jī)注冊(cè)事件、PacketIn事件、連接中斷事件和端口狀態(tài)改變事件。
在步驟1中,當(dāng)交換機(jī)連接到控制器后,依據(jù)OpenFlow協(xié)議控制器會(huì)獲得此交換機(jī)的可用端口信息,控制器將與此交換機(jī)的連接id(連接key)和可用端口號(hào)進(jìn)行對(duì)應(yīng)存儲(chǔ)。
在步驟2中,控制器需要為每一個(gè)成功連接到控制器的OF交換機(jī)生成一個(gè)流表,此流表的匹配項(xiàng)需匹配LLDP數(shù)據(jù)包,匹配后的動(dòng)作為使用PacketIn信令將接收到的LLDP數(shù)據(jù)包回傳至控制器。
在步驟3中,依據(jù)獲取的交換機(jī)端口信息,為每個(gè)交換機(jī)的每個(gè)端口生成一個(gè)LLDP數(shù)據(jù)包,并在對(duì)應(yīng)端口上定時(shí)發(fā)送這些LLDP數(shù)據(jù)包,這些數(shù)據(jù)包由控制器發(fā)送,按照OpenFlow協(xié)議使用PacketOut信令指定交換機(jī)端口進(jìn)行發(fā)送。
LLDP為鏈路層發(fā)現(xiàn)協(xié)議,封裝有LLDPDU的報(bào)文稱為鏈路發(fā)現(xiàn)協(xié)議報(bào)文,在拓?fù)浒l(fā)現(xiàn)模塊中構(gòu)造LLDP數(shù)據(jù)包時(shí),Port ID賦予擬發(fā)送此數(shù)據(jù)包的OF交換機(jī)端口號(hào),此端口號(hào)可在交換機(jī)向控制器注冊(cè)時(shí)獲得。
在交換機(jī)與控制器連接建立成功時(shí),OpenFlow協(xié)議會(huì)為這個(gè)連接分配一個(gè)id(key),這個(gè)連接id也可稱為DPID,此DPID值唯一對(duì)應(yīng)一個(gè)交換機(jī)-控制器連接,即同樣也是對(duì)應(yīng)一個(gè)OF交換機(jī)的標(biāo)識(shí)。
對(duì)于步驟4,由于每個(gè)交換機(jī)均向相鄰的節(jié)點(diǎn)發(fā)送LLDP數(shù)據(jù)包,且如果鏈路的另一端連接了一個(gè)交換機(jī),根據(jù)之前給每個(gè)交換機(jī)下發(fā)的流表,接收到的LLDP包將均被發(fā)送到控制器中。在步驟4中,通過監(jiān)聽PacketIn事件,接收LLDP數(shù)據(jù)包,并解析數(shù)據(jù)包中的源端口和DPID信息,DPID對(duì)應(yīng)源交換機(jī)的標(biāo)識(shí)。
在步驟5中,依據(jù)OpenFlow協(xié)議的PacketIn信令,可以得到發(fā)送相應(yīng)LLDP數(shù)據(jù)包的交換機(jī)入端口號(hào)以及交換機(jī)和控制器連接的DPID值,因此可以更新鏈路連接對(duì)應(yīng)表信息,完成底層網(wǎng)絡(luò)連接關(guān)系更新,連接對(duì)應(yīng)表的格式為:{DPID1,PORT1:DPID2,PORT2},DPID表示交換機(jī),PORT表示這個(gè)交換機(jī)上的一個(gè)端口,而冒號(hào)之后表示它的連接關(guān)系。
步驟6和7為,如果發(fā)生控制器和交換器連接中斷情況以及交換機(jī)端口狀態(tài)變化(打開或關(guān)閉)情況時(shí),將導(dǎo)致網(wǎng)絡(luò)拓?fù)渥兓?,同時(shí)觸發(fā)鏈路連接對(duì)應(yīng)表信息的更新。
在步驟8中,底層網(wǎng)絡(luò)鏈路連接關(guān)系的任何變化(連接增加或者刪減)均會(huì)觸發(fā)一次新的STP計(jì)算過程,即獲得一個(gè)新的無(wú)環(huán)路轉(zhuǎn)發(fā)的拓?fù)浣Y(jié)構(gòu)。
2)無(wú)環(huán)拓?fù)錁?gòu)建
當(dāng)控制器中的拓?fù)浒l(fā)現(xiàn)模塊識(shí)別出底層網(wǎng)絡(luò)連接狀態(tài)變化時(shí),該模塊將觸發(fā)STP模塊,由STP模塊依據(jù)鏈路連接表生成一個(gè)無(wú)環(huán)路拓?fù)浣Y(jié)構(gòu),指導(dǎo)數(shù)據(jù)的轉(zhuǎn)發(fā)路徑。STP模塊主要完成兩個(gè)功能:1)網(wǎng)絡(luò)生成樹結(jié)構(gòu)計(jì)算;2)底層網(wǎng)絡(luò)轉(zhuǎn)發(fā)端口配置。如圖4所示。
圖4 STP模塊功能組成示意圖
計(jì)算生成樹模塊將鏈路連接對(duì)應(yīng)表的存儲(chǔ)格式轉(zhuǎn)換為{s1:{s2:port1},s2:{s1:port2}},s1到s2可能通過多個(gè)端口相連,但只要找到第一個(gè),就不再繼續(xù)找下去,相當(dāng)于s1到s2的連接只保留了一條。最后構(gòu)造出樹結(jié)構(gòu),樹最終結(jié)構(gòu)為{s1:([(s2, port1),(s3,port2),…]),s2:([(s1,port1),…]),…}。這里會(huì)將STP拓?fù)浣Y(jié)構(gòu)的連接關(guān)系列出,而洪泛阻塞的端口則不被考慮。
當(dāng)STP拓?fù)渖芍螅枰獙⑼負(fù)浣Y(jié)構(gòu)映射到底層網(wǎng)絡(luò)中,即改變底層網(wǎng)絡(luò)中交換機(jī)的端口轉(zhuǎn)發(fā)狀態(tài)。交換機(jī)端口配置模塊的主要功能是將STP拓?fù)浣Y(jié)構(gòu)轉(zhuǎn)化為OF交換機(jī)的端口配置信令,該模塊得到樹結(jié)構(gòu),然后遍歷樹結(jié)構(gòu)。遍歷過程為:首先得到樹中每條鏈路對(duì)應(yīng)的起始交換機(jī),得到該交換機(jī)的所有端口。遍歷這些端口,如果其端口號(hào)在樹中,則允許通過該端口洪泛,如果不在樹中,但該端口為邊緣端口,也可以洪泛??刂破饕罁?jù)OpenFlow協(xié)議將向每一個(gè)OF交換機(jī)發(fā)送一個(gè)端口配置信令。
2.1仿真概述
本仿真使用mininet軟件仿真底層交換網(wǎng)絡(luò),交換機(jī)節(jié)點(diǎn)采用OVS交換機(jī)類型,使用POX開源軟件作為OpenFlow控制器。在 mininet中構(gòu)建網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),本文所提基于OpenFlow協(xié)議的拓?fù)浒l(fā)現(xiàn)方法在POX控制器中實(shí)現(xiàn)。在mininet中搭建多種不同OF交換機(jī)數(shù)量的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),對(duì)所提拓?fù)浒l(fā)現(xiàn)方法進(jìn)行仿真測(cè)試[8-9]。
2.2拓?fù)浒l(fā)現(xiàn)仿真
首先在mininet中構(gòu)建底層OF網(wǎng)絡(luò)拓?fù)洌鐖D5所示。該拓?fù)溆葾、B、C、D、E、F、G七個(gè)OF交換機(jī)節(jié)點(diǎn)組成。每條鏈路的帶寬配置為5M,鏈路延遲配置為5 ms。
圖5 仿真拓?fù)浣Y(jié)構(gòu)
在拓?fù)浒l(fā)現(xiàn)階段,首先由控制器向每一個(gè)交換機(jī)下發(fā)一個(gè)統(tǒng)一流表,該流表用來(lái)向控制器轉(zhuǎn)發(fā)鏈路發(fā)現(xiàn)數(shù)據(jù)包統(tǒng)一流表配置完成后,控制器向每個(gè)交換機(jī)的各個(gè)轉(zhuǎn)發(fā)端口發(fā)送一個(gè)LLDP包,并由這些端口轉(zhuǎn)發(fā)各自的LLDP包。相鄰交換機(jī)接收到LLDP包后,由于沒有相應(yīng)的流表進(jìn)行匹配,因此接收交換機(jī)將LLDP包通過PacketIn信令回傳給控制器,交由控制器進(jìn)行處理。
通過該過程可以使得控制器獲得底層網(wǎng)絡(luò)各個(gè)交換機(jī)節(jié)點(diǎn)之間的拓?fù)溥B接關(guān)系,在7個(gè)交換機(jī)啟動(dòng)并正常注冊(cè)到控制器之后,底層網(wǎng)絡(luò)拓?fù)浣粨Q機(jī)節(jié)點(diǎn)之間的連接關(guān)系可以被正確的探測(cè)出。當(dāng)?shù)讓泳W(wǎng)絡(luò)交換機(jī)之間的連接關(guān)系獲得之后,由控制器計(jì)算無(wú)環(huán)轉(zhuǎn)發(fā)的結(jié)構(gòu),打印該生成樹結(jié)構(gòu)如圖6所示,1:2 4表示節(jié)點(diǎn)1與節(jié)點(diǎn)2和節(jié)點(diǎn)4相連,其他節(jié)點(diǎn)的連接情況以此類推。
圖6 初始STP結(jié)構(gòu)
2.3算法收斂時(shí)間仿真
如不考慮鏈路發(fā)現(xiàn)的時(shí)間,僅考慮每次拓?fù)涓滤惴ǖ氖諗繒r(shí)間,規(guī)定算法收斂時(shí)間為從算法開始到獲得底層網(wǎng)絡(luò)生成樹配置策略這段時(shí)間,可以得到拓?fù)涓滤惴ㄆ骄諗繒r(shí)間如圖7所示。
圖7 本文所提MST算法平均收斂時(shí)間
從上圖中可以看出,如果不考慮鏈路發(fā)現(xiàn)時(shí)間,生成樹的收斂速度是很快的,一般在0.1 s以內(nèi)。
如果考慮鏈路發(fā)現(xiàn)時(shí)間,在具有不同節(jié)點(diǎn)數(shù)量的拓?fù)渲?,統(tǒng)計(jì)拓?fù)浒l(fā)現(xiàn)及STP配置的平均時(shí)間如圖8所示。
圖8 拓?fù)浒l(fā)現(xiàn)及MST配置平均時(shí)間統(tǒng)計(jì)圖
基于OpenFlow的拓?fù)渥R(shí)別及轉(zhuǎn)發(fā)機(jī)制可以在SDN控制器端獲得全網(wǎng)的拓?fù)湫畔?,掌握全網(wǎng)交換機(jī)的互連關(guān)系,對(duì)于二層轉(zhuǎn)發(fā)網(wǎng)絡(luò)來(lái)說,其生成樹的收斂時(shí)間可以較大縮短,尤其對(duì)于交換節(jié)點(diǎn)規(guī)模較大的網(wǎng)絡(luò)。由于控制器采用的是集中式管控方法,因此在網(wǎng)絡(luò)拓?fù)浒l(fā)生變化需計(jì)算并生效新的無(wú)環(huán)轉(zhuǎn)發(fā)結(jié)構(gòu)時(shí),對(duì)系統(tǒng)中承載的業(yè)務(wù)傳輸影響較小,用戶的業(yè)務(wù)體驗(yàn)更優(yōu)良。
[1]劉劍鋒.基于TRILL協(xié)議實(shí)現(xiàn)數(shù)據(jù)交換[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2011(12):48-50.
[2]左青云,陳鳴,趙廣松.基于OpenFlow的SDN技術(shù)研究[J].軟件學(xué)報(bào),2013(5):1078-1097.
[3]陳春凱.云計(jì)算環(huán)境下基于拓?fù)涓兄奶摂M網(wǎng)絡(luò)映射研究[J].計(jì)算機(jī)應(yīng)用與軟件,2014(12):156-160.
[4]OpenFlow switch specification(version 1.3.2),2013.https:// www.opennetworking.org/images/stories/downloads/sdnresources/onfspecifications/OpenFlow/OpenFlow-spec-v1.3.2.pdf.
[5]Open networking foundation,2013.[EB/OL].http://www.opennetworking.org.
[6]Lantz B,Heller B,McKeown N.A network in a laptop:rapid prototyping for software-defined networks[C]//Proceedings of the9th ACM SIGCOMM Workshop on Hot Topics in Networks,2010.
[7]Long Hui,Shen Yao,Guo Minyi.LABERIO:Dynamic loadbalanced Routing in OpenFlow-enabled Networks[C]//Advanced Information Networking and Application(AINA), 2013 IEEE 27th International Conference,2013.
[8]Pox homepage[EB/OL].http://www.noxrepo.org/pox,2015-07-08.
[9]Open vSwitch[EB/OL].http://openvswitch.org/,2015-07-08.
A topology discovery method based on OpenFlow protocol
LIU Hai-ke,LI Ji-lin,YOU Qi-di,ZOU Guang-nan
(Beijing Institute of Satellite Information Engineering,Beijing 100086,China)
The method of no loop structure construction and network topology discovery in traditional network,such as STP and RSTP,has been unable to meet the complex network environment in the future.There is no good solution to its disadvantage of slow convergence,non extensible and low bandwidth utilization.This paper introduces the topology discovery mechanism based on OpenFlow protocol.The method of link discovery and no loop structure construction under the new network architecture is described in detail.The effectiveness of the proposed method is verified by simulation,and the convergence time of the proposed method is estimated in Mininet software.This topology discovery method can improve the scalability of the network function,and bring a good user experience.
SDN;topology discovery;STP;openFlow protocol;convergence time
TN915.5
A
1674-6236(2016)13-0116-04
2015-07-16稿件編號(hào):201507121
劉??停?986—),男,河北秦皇島人,博士研究生。研究方向:計(jì)算機(jī)網(wǎng)絡(luò)、SDN網(wǎng)絡(luò)。