[程明 盧建福 羅晉]
隨著網(wǎng)絡(luò)規(guī)模的不斷擴大,網(wǎng)絡(luò)設(shè)備和網(wǎng)絡(luò)應(yīng)用的種類和數(shù)量不斷增加,計算機網(wǎng)絡(luò)結(jié)構(gòu)日趨復(fù)雜,SDN 的出現(xiàn)有效地適應(yīng)了各種網(wǎng)絡(luò)變化的需求[1]。SDN 作為一種集中控制的網(wǎng)絡(luò)架構(gòu),相對于傳統(tǒng)的網(wǎng)絡(luò)來說,它將控制與轉(zhuǎn)發(fā)分離,將所有的控制功能交給控制器;并且SDN可以讓人們在控制器上根據(jù)不同功能的應(yīng)用程序進(jìn)行軟件編程,因此,特別適用于軍用算機網(wǎng)絡(luò)未來架構(gòu)[2]。SDN數(shù)控分離以及高度集中的控制方式,控制器性能極大地影響著網(wǎng)絡(luò)的運行。為減輕可能由SDN 控制器集中控制的特性引起的控制器負(fù)擔(dān),本文設(shè)計一種ELDP(Easy Link Report Protocal,簡單鏈路上報協(xié)議),各路由器和交換機設(shè)備節(jié)點之間通過該協(xié)議實現(xiàn)鄰居設(shè)備的發(fā)現(xiàn)和鄰居鏈路信息的產(chǎn)生,全網(wǎng)節(jié)點設(shè)備通過該協(xié)議實現(xiàn)鄰居鏈路信息的擴散和全網(wǎng)鏈路信息同步。SDN 控制器僅需要訪問網(wǎng)絡(luò)中的任意一臺節(jié)點設(shè)備即可獲取當(dāng)前整個網(wǎng)絡(luò)的拓?fù)湫畔ⅰ?/p>
簡單鏈路上報協(xié)議主要由兩部分核心協(xié)議構(gòu)成:一是鄰居設(shè)備發(fā)現(xiàn)協(xié)議;二是鏈路信息擴散和同步協(xié)議。
網(wǎng)絡(luò)交換設(shè)備(三層路由器或二層交換機)上正常工作后,當(dāng)設(shè)備端口物理層Link 時,簡單鏈路上報協(xié)議啟動鄰居設(shè)備發(fā)現(xiàn)協(xié)議,鄰居設(shè)備雙方通過該協(xié)議感知彼此的存在,當(dāng)鄰居設(shè)備成功被發(fā)現(xiàn)后,以端口為基礎(chǔ)信息構(gòu)建本設(shè)備端口到其鄰居設(shè)備端口的鏈路信息。
當(dāng)本設(shè)備發(fā)現(xiàn)有鄰居設(shè)備后,簡單鏈路上報協(xié)議啟動鏈路信息擴展和同步協(xié)議,該協(xié)議會匯總本設(shè)備中所有的端口和其端口的鄰居所構(gòu)建的鄰居信息,并通過鏈路信息管理節(jié)點選舉后,擁有鏈路信息管理節(jié)點權(quán)限的網(wǎng)絡(luò)交換設(shè)備,將本設(shè)備的所有鄰居端口信息匯總產(chǎn)生端口鏈路信息,并向所有的端口擴散所產(chǎn)生的所有端口鏈路信息;沒有擁有鏈路信息管理節(jié)點權(quán)限的網(wǎng)絡(luò)交換設(shè)備接收并儲存來自鏈路信息管理節(jié)點的鏈路信息。
經(jīng)過兩兩網(wǎng)絡(luò)交換設(shè)備間不斷的擴散和同步彼此的鏈路信息,最終實現(xiàn)每臺網(wǎng)絡(luò)交換設(shè)備上儲存全網(wǎng)的拓?fù)湫畔ⅰ?/p>
為實現(xiàn)端口自動感知鄰居設(shè)備的存在,ELRP 報文封裝采用以太網(wǎng)二層組播報文進(jìn)行封裝設(shè)計。結(jié)構(gòu)如圖1所示。
圖1 ELRP 協(xié)議二層數(shù)據(jù)幀結(jié)構(gòu)圖
DMAC:目的MAC 地址,設(shè)計為0x0180-C200-005E
SMAC:源MAC 地址
Type:幀類型為0x8181
Data:ELRP 的數(shù)據(jù)域內(nèi)容
FCS:幀檢驗序列
網(wǎng)絡(luò)交換設(shè)備通過接收以太網(wǎng)數(shù)據(jù)包中目的MAC(0x0180-C200-005E)和數(shù)據(jù)幀類型(0x8181)作為標(biāo)識。
當(dāng)網(wǎng)絡(luò)交換設(shè)備正常工作,本設(shè)備的端口物理層Up后,簡單鏈路上報協(xié)議開始啟動鄰居設(shè)備發(fā)現(xiàn)協(xié)議。該協(xié)議在Up 狀態(tài)的物理端口上,周期性的發(fā)送Hello 通告報文去感知鄰居網(wǎng)絡(luò)交換設(shè)備的存在。
2.2.1 Hello 報文組成
鄰居設(shè)備之間通過交互Hello 報文完成設(shè)備之間的自動感知。Hello 報文設(shè)計如圖2 所示。
圖2 Hello 報文結(jié)構(gòu)示意圖
2.2.2 鄰居設(shè)備發(fā)現(xiàn)過程
網(wǎng)絡(luò)交換設(shè)備會周期性向所有物理層Up 的端口發(fā)送Hello 報文。Hello 報文中主要包含了本設(shè)備MAC 地址和本設(shè)備端口序號以及對應(yīng)的鄰居狀態(tài)信息。網(wǎng)絡(luò)交換鄰居設(shè)備發(fā)現(xiàn)交互過程如圖3 所示。
圖3 鄰居設(shè)備Hello 報文交互過程圖
(1)網(wǎng)絡(luò)交換設(shè)備-A 設(shè)備端口剛Link 時,其端口沒有任何鄰居設(shè)備信息,發(fā)送Hello 報文中,僅攜帶自己的MAC 和端口信息,無鄰居MAC 信息,鄰居狀態(tài)為Down 狀態(tài)。
(2)網(wǎng)絡(luò)交換設(shè)備-B 設(shè)備端口接收到一個Hello 報文后,提取并記錄發(fā)送方的MAC 地址、端口號和狀態(tài)信息。由于鄰居狀態(tài)信息為Down,表明其對端可能存在一個合法有效的鄰居信息,故網(wǎng)絡(luò)交換設(shè)備-B 設(shè)備發(fā)送的Hello報文中,不僅攜帶B 設(shè)備的MAC 和端口信息,同時填充其鄰居信息為設(shè)備A 的MAC 地址,由于不確定設(shè)備A 是否是合法存在,故狀態(tài)信息填充Init 狀態(tài)。
(3)網(wǎng)絡(luò)交換設(shè)備-A 設(shè)備接收到網(wǎng)絡(luò)交換設(shè)備-B的Hello 報文后,提取并記錄發(fā)送方的MAC 地址、端口號和狀態(tài)信息。由于鄰居狀態(tài)信息為Init,網(wǎng)絡(luò)交換設(shè)備-A解析報文中攜帶的鄰居信息包含自己(網(wǎng)絡(luò)交換設(shè)備-A)的MAC 地址,表明對端已成功接收并解析過網(wǎng)絡(luò)交換設(shè)備-A 的Hello 報文,對端設(shè)備知曉本設(shè)備的存在。故網(wǎng)絡(luò)交換設(shè)備-A 再次發(fā)送Hello 報文時,填充鄰居網(wǎng)絡(luò)交換設(shè)備-B 的MAC 地址,鄰居狀態(tài)為Up 狀態(tài)。
(4)網(wǎng)絡(luò)交換設(shè)備-B 設(shè)備接收到Hello 報文后,提取并記錄發(fā)送方的MAC 地址、端口號和狀態(tài)信息。由于鄰居狀態(tài)信息為Up,發(fā)現(xiàn)其報文中攜帶的鄰居信息包含自己(網(wǎng)絡(luò)交換設(shè)備-B)的MAC 地址,表明對端已成功接收并解析過網(wǎng)絡(luò)交換設(shè)備-B 的Hello 報文,對端設(shè)備知曉本設(shè)備的存在。故網(wǎng)絡(luò)交換設(shè)備-B 再次發(fā)送Hello 報文時,填充鄰居網(wǎng)絡(luò)交換設(shè)備-A 的MAC 地址,鄰居狀態(tài)為Up 狀態(tài)。
(5)當(dāng)網(wǎng)絡(luò)交換設(shè)備雙方發(fā)送的鄰居狀態(tài)為Up 的Hello 報文后,表明合法有效的鄰居設(shè)備信息成功建立。后續(xù)Hello 報文的交互將作為鄰居設(shè)備之間的心跳報文,通過該報文感知對端的存在狀態(tài)。當(dāng)網(wǎng)絡(luò)交換設(shè)備超過設(shè)定的超時時間沒有接收到對端Up 狀態(tài)Hello 報文后,網(wǎng)絡(luò)交換設(shè)備將鄰居狀態(tài)從Up 狀態(tài)直接調(diào)整為Down 狀態(tài)。
當(dāng)網(wǎng)絡(luò)交換設(shè)備通過鄰居發(fā)現(xiàn)協(xié)議完成鄰居設(shè)備的發(fā)現(xiàn)后,鄰居信息將以端口號為基礎(chǔ)構(gòu)建本設(shè)備的鄰居信息數(shù)據(jù)庫,本設(shè)備的端口鏈路信息將從匯總后的鄰居信息數(shù)據(jù)庫作為基礎(chǔ)產(chǎn)生。為方便管理每一條唯一的鏈路信息,鏈路信息由鏈路信息ID 和鏈路詳細(xì)信息兩部分組成。
2.3.1 鏈路信息ID(LCP-ID)
鏈路信息ID 由圖4 所示。
圖4 LcpID 結(jié)構(gòu)示意圖
鏈路信息ID(LCP-ID)由本設(shè)備MAC 地址、端口號和鏈路序號組成。鏈路信息ID 的總長度為16 字節(jié)。其中鏈路序號用于表征當(dāng)前鏈路信息的新舊程度。其值從1開始順序遞增,序號值越大則表明當(dāng)前鏈路信息越新。當(dāng)端口的鏈路信息發(fā)生改變時,其值自加1。當(dāng)其他設(shè)備進(jìn)行鏈路信息同步時,可參考SeqNum 值的大小來確定當(dāng)前鏈路是否發(fā)生改變,而不需要完全比對鏈路信息中的所有詳細(xì)內(nèi)容。
2.3.2 鏈路詳細(xì)信息(LCP)
當(dāng)設(shè)備通過Hello 報文完成鄰居設(shè)備發(fā)現(xiàn),構(gòu)建本地的鄰居信息數(shù)據(jù)庫后,即可通過鄰居信息數(shù)據(jù)庫構(gòu)建本網(wǎng)絡(luò)交換設(shè)備到其鄰居設(shè)備的鏈路信息。鏈路詳細(xì)信息示意圖如圖5 所示。
圖5 鏈路詳細(xì)信息示意圖
鏈路詳細(xì)信息包含設(shè)備鏈路類型、設(shè)備鏈路延時、設(shè)備鏈路帶寬、設(shè)備鏈路消耗、本設(shè)備MAC、本設(shè)備端口號、鄰居設(shè)備MAC、鄰居設(shè)備端口號組成。鏈路詳細(xì)信息總長度為30 字節(jié)。通過該詳細(xì)信息,即可了解互聯(lián)設(shè)備之間的鏈路狀態(tài)。設(shè)備鏈路延時、設(shè)備鏈路帶寬、設(shè)備鏈路消耗可作為控制器的路由算路的輸入?yún)?shù)對路由的算路結(jié)果進(jìn)行人為干預(yù)。
鏈路信息將被保存在本地的鏈路信息數(shù)據(jù)庫中。
當(dāng)鄰居設(shè)備發(fā)現(xiàn)協(xié)議執(zhí)行完成后,在本設(shè)備鏈路信息數(shù)據(jù)庫中將產(chǎn)生本設(shè)備到其鄰居設(shè)備的鏈路信息。以三層路由器構(gòu)建口型拓?fù)錇槔?,如圖6 所示。
圖6 4 臺路由器設(shè)備口型拓?fù)浠ヂ?lián)圖
Router-1設(shè)備中將產(chǎn)生Router-1、Router-2、Router-3之前的互聯(lián)鏈路信息,但在Router-1 設(shè)備上,由于沒有鏈路信息的同步,設(shè)備Router-1 上無法查詢到Router-4 設(shè)備上的互聯(lián)鏈路信息。故需要在各Router 設(shè)備之間,設(shè)計鏈路信息的擴散和同步機制。
2.4.1 鏈路信息管理節(jié)點選舉
在設(shè)備完成鄰居設(shè)備發(fā)現(xiàn)協(xié)議后,在本設(shè)備和鄰居設(shè)備上都會保存彼此設(shè)備的鄰居的MAC 信息。并依據(jù)該鄰居信息構(gòu)建本地的鏈路信息數(shù)據(jù)庫。當(dāng)進(jìn)行鏈路信息數(shù)據(jù)擴散和同步時,如設(shè)備雙方都向?qū)Ψ桨l(fā)送自己的鏈路信息數(shù)據(jù),將會導(dǎo)致大量的帶寬被交互報文所占用。故在鏈路信息擴散和同步時,在雙方設(shè)備之間選舉出一個鏈路信息管理節(jié)點,該節(jié)點負(fù)責(zé)向?qū)Χ嗽O(shè)備擴散和同步本設(shè)備的鏈路信息。
因MAC 地址的全網(wǎng)唯一性,鏈路信息管理節(jié)點選舉采用MAC 地址作為標(biāo)桿。MAC 地址越小,優(yōu)先權(quán)越高?;ヂ?lián)設(shè)備中,優(yōu)先權(quán)最高的設(shè)備被選舉作為鏈路信息管理節(jié)點。當(dāng)網(wǎng)絡(luò)中有老設(shè)備離線或新設(shè)備加入時,會重新進(jìn)行鏈路信息管理節(jié)點選舉。當(dāng)高優(yōu)先級的設(shè)備加入網(wǎng)絡(luò)后,該設(shè)備將搶占作為新的鏈路信息管理節(jié)點。
2.4.2 鏈路信息擴散過程
在網(wǎng)絡(luò)節(jié)點中,全網(wǎng)鏈路信息管理由鏈路信息管理節(jié)點進(jìn)行維護(hù),該虛擬節(jié)點周期性的發(fā)送本設(shè)備的鏈路信息。在鏈路信息發(fā)送過程中,為減少交互協(xié)議的帶寬,鏈路信息管理節(jié)點僅發(fā)送攜帶鏈路信息ID 值的鏈路摘要報文(CSNP)。
如表1 所示,假設(shè)當(dāng)前網(wǎng)絡(luò)中存在100 個節(jié)點,每個節(jié)點之間互聯(lián)4 條鏈路。
表1 鏈路信息ID 和鏈路信息長度對比表
(1)當(dāng)鏈路信息管理節(jié)點發(fā)送全鏈路信息時,其所需要發(fā)送的總報文長度為報文長度×節(jié)點數(shù)量×鏈路數(shù)量×雙向鏈路(2),合計46×100×4×2=36 800 字節(jié)。
(2)當(dāng)鏈路信息管理節(jié)點發(fā)送鏈路信息ID 時,其所需要發(fā)送的總報文長度為報文長度×節(jié)點數(shù)量×鏈路數(shù)量×雙向鏈路(2),合計16×100×4×2=12 800 字節(jié)。
(3)通過對比發(fā)現(xiàn),當(dāng)僅發(fā)送鏈路信息ID 時,協(xié)議帶寬占用量將減少65.2%。
鏈路信息管理節(jié)點發(fā)送的鏈路摘要信息報文(CSNP)如圖7 所示。
圖7 鏈路摘要信息CSNP 報文結(jié)構(gòu)圖
2.4.3 鏈路信息同步過程
2.4.3.1 鏈路信息管理節(jié)點分發(fā)鏈路信息
假設(shè)設(shè)備-A 被選舉作為鏈路信息管理節(jié)點,設(shè)備-A周期性發(fā)送鏈路摘要信息(CSNP)報文。設(shè)備-B 接收到CSNP 報文后,提取CSNP 報文中的LCP-ID 與本地鏈路信息數(shù)據(jù)庫中LCP-ID 值進(jìn)行對比。當(dāng)發(fā)現(xiàn)設(shè)備-A 設(shè)備發(fā)送的LCP-ID在本地鏈路信息數(shù)據(jù)庫中沒有被查詢到時,設(shè)備-B 設(shè)備主動向設(shè)備-A 設(shè)備發(fā)送鏈路詳細(xì)信息請求(PSNP)請求該LCP-ID 所對應(yīng)的詳細(xì)鏈路信息。
設(shè)備-A 接收到設(shè)備-B 的PSNP 請求后,返回包含LCP-ID 詳細(xì)信息的數(shù)據(jù)報文LCP 報文給設(shè)備-B。分發(fā)過程如圖8 所示。
圖8 鏈路信息管理節(jié)點分發(fā)鏈路過程示意圖
2.4.3.2 鏈路信息管理節(jié)點補全鏈路信息
當(dāng)設(shè)備-B 設(shè)備作為非鏈路信息管理節(jié)點接收到鏈路信息管理節(jié)點(設(shè)備-A)的CSNP 報文后,提取LCP-ID與本地的LCP-ID 鏈表中的值進(jìn)行比對。當(dāng)CSNP 報文中所有的LCP-ID 都匹配完成后,本地設(shè)備-B 設(shè)備中鏈路信息數(shù)據(jù)庫中依舊存在沒有被查找過的LCP-ID 時,表明設(shè)備-B 設(shè)備存儲的鏈路信息比鏈路信息管理節(jié)點的多。設(shè)備-B 設(shè)備主動向設(shè)備-A 發(fā)送LCP 數(shù)據(jù)幀以便設(shè)備-A設(shè)備補全缺失的鏈路信息,加快全網(wǎng)鏈路信息的同步收斂時間。
2.4.4 鏈路信息刪除同步
如圖9 所示:當(dāng)Router-1 和Router-2 之間的鏈路linkDown時,Router-2設(shè)備感知其端口的Linkdown事件。Router-2 設(shè)備在其鏈路信息數(shù)據(jù)庫以本設(shè)備MAC 地址和linkDown 的端口作為輸入?yún)?shù)進(jìn)行搜索。一旦發(fā)現(xiàn)鏈路狀態(tài)數(shù)據(jù)庫中存在該鏈路信息,則將該鏈路信息的生存時間修改為0 秒,同時讓該鏈路LcpID 的序號seqnum 的值增加1。Router-2 設(shè)備將更新后的LcpID 信息向其所有l(wèi)inkUp 的端口進(jìn)行發(fā)送。
圖9 設(shè)備鏈路Linkdown 示意圖
Router-3 設(shè)備接收到SeqNum 較大的LcpID 鏈路信息后,更新本地鏈路狀態(tài)數(shù)據(jù)庫的信息。同時,向所有Router-3 設(shè)備上LinkUp 的端口廣播該LcpID 信息。
由于該LcpID 中的生存時間為0,當(dāng)各設(shè)備的鏈路老化計時器到達(dá)計數(shù)時間時,會自動老化掉鏈路信息數(shù)據(jù)庫中的LcpID。通過以上過程,鏈路的linkDown 事件,就會自動在全網(wǎng)中實現(xiàn)擴散。
將實物設(shè)備安裝如圖10 示意圖連接。
圖10 實物驗證連接示意圖
在設(shè)備Box1 上查看端口的鄰居信息,可到如圖11所示。
圖11 Box-1 端口鄰居信息結(jié)果圖
(1)設(shè)備Box1 的MAC 地址為00:1e:08:21:58:00,設(shè)備IP 為10.254.0.39;
(2)設(shè)備Box1的端口eth-0-1與設(shè)備00:1e:08:00:08:00的eth-0-13 連接;
(3)設(shè)備Box1 的端口eth-0-41 與設(shè)備00:1e:08:23:6e:00 的eth-0-41 連接。
在設(shè)備Box2 上查看端口的鄰居信息,可到如圖12所示。
圖12 設(shè)備端口鄰居信息結(jié)果圖
(1)設(shè)備Box2 的MAC 地址為00:1e:08:23:6e:00,設(shè)備IP 為10.254.0.38;
(2)設(shè)備Box2的端口eth-0-1與設(shè)備00:1e:08:00:09:00 的eth-0-13 連接;
(3)設(shè)備Box2的端口eth-0-41與設(shè)備00:1e:08:21:58:00 的eth-0-41 連接。
根據(jù)查詢返回的消息,可知,設(shè)備Box1(00:1e:08:21:58:00)的端口eth-0-41與設(shè)備Box2(00:1e:08:23:6e:00)的端口eth-0-41 是相互對接在一起的。與實物連接示意圖10 描述一致。
在設(shè)備Box4 上,查看當(dāng)前網(wǎng)絡(luò)中的鏈路信息ID 可到如圖13 所示結(jié)果。
圖13 全網(wǎng)設(shè)備拓?fù)溥B接示意圖
在Box4 設(shè)備上查看鏈路信息ID 的統(tǒng)計結(jié)果,發(fā)現(xiàn)不僅包含了本設(shè)備Box4(00:1e:08:00:09:00)、及其鄰居設(shè)備Box2(00:1e:08:23:6e:00)和Box3(00:1e:08:00:08:00)的鏈路信息ID,還包含了不與Box4 直接連接的設(shè)備Box1(00:1e:08:21:58:00)的鏈路信息ID。說明非直連的鏈路信息已成功的通過中間節(jié)點同步到了全網(wǎng)其他設(shè)備上。
將網(wǎng)絡(luò)拓?fù)湫畔⑸蠄蠼o網(wǎng)管軟件后,查看當(dāng)前網(wǎng)絡(luò)的拓?fù)湫畔?,可得到圖14 所示結(jié)果。
圖14 各設(shè)備全網(wǎng)設(shè)備拓?fù)溥B接示意圖
SDN 控制器只需要與其中任意1 臺設(shè)備連接,從該設(shè)備上即可獲取全網(wǎng)所有互聯(lián)網(wǎng)絡(luò)設(shè)備的拓?fù)湫畔ⅰ?/p>
當(dāng)發(fā)生設(shè)備間鏈路斷線時,拓?fù)鋮f(xié)議會自動將斷纖信息進(jìn)行全網(wǎng)同步,并將相應(yīng)的信息上報到網(wǎng)管中。網(wǎng)絡(luò)設(shè)備斷線時可見如圖15 所示。
圖15 網(wǎng)絡(luò)設(shè)備斷路后網(wǎng)絡(luò)拓?fù)涫疽鈭D
本文針對二層交換和三層路由設(shè)備之間拓?fù)浠ヂ?lián)關(guān)系,設(shè)計一套簡單的網(wǎng)絡(luò)拓?fù)渖蠄髤f(xié)議,本協(xié)議為私有的定制化協(xié)議,可在自研的網(wǎng)絡(luò)設(shè)備中實現(xiàn)設(shè)計實現(xiàn)鄰居設(shè)備之間的自動感知發(fā)現(xiàn)和鏈路信息的全網(wǎng)同步擴散和同步。本協(xié)議已實際應(yīng)用在項目產(chǎn)品中,通過實裝設(shè)備測試證明,本協(xié)議可實現(xiàn)在自動發(fā)現(xiàn)網(wǎng)絡(luò)中的各交換機和路由器設(shè)備節(jié)點,并自動構(gòu)建網(wǎng)絡(luò)交換設(shè)備節(jié)點之間的鏈路信息,同時將鏈路信息進(jìn)行全網(wǎng)擴散和同步,最終實現(xiàn)在網(wǎng)絡(luò)中任意節(jié)點設(shè)備上都保存有全網(wǎng)的拓?fù)湫畔ⅰMㄟ^該協(xié)議,SDN 控制器可從全網(wǎng)中任意1 臺設(shè)備中獲取當(dāng)前網(wǎng)絡(luò)的拓?fù)湫畔?。減少了SDN 控制器對網(wǎng)絡(luò)拓?fù)涞男畔⑻崛『陀嬎悖瑴p少了SDN 控制器的計算復(fù)雜度。下一步還需進(jìn)一步開展數(shù)百個節(jié)點復(fù)雜組網(wǎng)網(wǎng)絡(luò)環(huán)境下的功能性能驗證,查看鏈路信息在全網(wǎng)中同步所需要的時間以及鏈路變更后,在全網(wǎng)環(huán)境下的擴展延時。