[程明 盧建福 羅晉]
隨著網絡規模的不斷擴大,網絡設備和網絡應用的種類和數量不斷增加,計算機網絡結構日趨復雜,SDN 的出現有效地適應了各種網絡變化的需求[1]。SDN 作為一種集中控制的網絡架構,相對于傳統的網絡來說,它將控制與轉發分離,將所有的控制功能交給控制器;并且SDN可以讓人們在控制器上根據不同功能的應用程序進行軟件編程,因此,特別適用于軍用算機網絡未來架構[2]。SDN數控分離以及高度集中的控制方式,控制器性能極大地影響著網絡的運行。為減輕可能由SDN 控制器集中控制的特性引起的控制器負擔,本文設計一種ELDP(Easy Link Report Protocal,簡單鏈路上報協議),各路由器和交換機設備節點之間通過該協議實現鄰居設備的發現和鄰居鏈路信息的產生,全網節點設備通過該協議實現鄰居鏈路信息的擴散和全網鏈路信息同步。SDN 控制器僅需要訪問網絡中的任意一臺節點設備即可獲取當前整個網絡的拓撲信息。
簡單鏈路上報協議主要由兩部分核心協議構成:一是鄰居設備發現協議;二是鏈路信息擴散和同步協議。
網絡交換設備(三層路由器或二層交換機)上正常工作后,當設備端口物理層Link 時,簡單鏈路上報協議啟動鄰居設備發現協議,鄰居設備雙方通過該協議感知彼此的存在,當鄰居設備成功被發現后,以端口為基礎信息構建本設備端口到其鄰居設備端口的鏈路信息。
當本設備發現有鄰居設備后,簡單鏈路上報協議啟動鏈路信息擴展和同步協議,該協議會匯總本設備中所有的端口和其端口的鄰居所構建的鄰居信息,并通過鏈路信息管理節點選舉后,擁有鏈路信息管理節點權限的網絡交換設備,將本設備的所有鄰居端口信息匯總產生端口鏈路信息,并向所有的端口擴散所產生的所有端口鏈路信息;沒有擁有鏈路信息管理節點權限的網絡交換設備接收并儲存來自鏈路信息管理節點的鏈路信息。
經過兩兩網絡交換設備間不斷的擴散和同步彼此的鏈路信息,最終實現每臺網絡交換設備上儲存全網的拓撲信息。
為實現端口自動感知鄰居設備的存在,ELRP 報文封裝采用以太網二層組播報文進行封裝設計。結構如圖1所示。

圖1 ELRP 協議二層數據幀結構圖
DMAC:目的MAC 地址,設計為0x0180-C200-005E
SMAC:源MAC 地址
Type:幀類型為0x8181
Data:ELRP 的數據域內容
FCS:幀檢驗序列
網絡交換設備通過接收以太網數據包中目的MAC(0x0180-C200-005E)和數據幀類型(0x8181)作為標識。
當網絡交換設備正常工作,本設備的端口物理層Up后,簡單鏈路上報協議開始啟動鄰居設備發現協議。該協議在Up 狀態的物理端口上,周期性的發送Hello 通告報文去感知鄰居網絡交換設備的存在。
2.2.1 Hello 報文組成
鄰居設備之間通過交互Hello 報文完成設備之間的自動感知。Hello 報文設計如圖2 所示。

圖2 Hello 報文結構示意圖
2.2.2 鄰居設備發現過程
網絡交換設備會周期性向所有物理層Up 的端口發送Hello 報文。Hello 報文中主要包含了本設備MAC 地址和本設備端口序號以及對應的鄰居狀態信息。網絡交換鄰居設備發現交互過程如圖3 所示。

圖3 鄰居設備Hello 報文交互過程圖
(1)網絡交換設備-A 設備端口剛Link 時,其端口沒有任何鄰居設備信息,發送Hello 報文中,僅攜帶自己的MAC 和端口信息,無鄰居MAC 信息,鄰居狀態為Down 狀態。
(2)網絡交換設備-B 設備端口接收到一個Hello 報文后,提取并記錄發送方的MAC 地址、端口號和狀態信息。由于鄰居狀態信息為Down,表明其對端可能存在一個合法有效的鄰居信息,故網絡交換設備-B 設備發送的Hello報文中,不僅攜帶B 設備的MAC 和端口信息,同時填充其鄰居信息為設備A 的MAC 地址,由于不確定設備A 是否是合法存在,故狀態信息填充Init 狀態。
(3)網絡交換設備-A 設備接收到網絡交換設備-B的Hello 報文后,提取并記錄發送方的MAC 地址、端口號和狀態信息。由于鄰居狀態信息為Init,網絡交換設備-A解析報文中攜帶的鄰居信息包含自己(網絡交換設備-A)的MAC 地址,表明對端已成功接收并解析過網絡交換設備-A 的Hello 報文,對端設備知曉本設備的存在。故網絡交換設備-A 再次發送Hello 報文時,填充鄰居網絡交換設備-B 的MAC 地址,鄰居狀態為Up 狀態。
(4)網絡交換設備-B 設備接收到Hello 報文后,提取并記錄發送方的MAC 地址、端口號和狀態信息。由于鄰居狀態信息為Up,發現其報文中攜帶的鄰居信息包含自己(網絡交換設備-B)的MAC 地址,表明對端已成功接收并解析過網絡交換設備-B 的Hello 報文,對端設備知曉本設備的存在。故網絡交換設備-B 再次發送Hello 報文時,填充鄰居網絡交換設備-A 的MAC 地址,鄰居狀態為Up 狀態。
(5)當網絡交換設備雙方發送的鄰居狀態為Up 的Hello 報文后,表明合法有效的鄰居設備信息成功建立。后續Hello 報文的交互將作為鄰居設備之間的心跳報文,通過該報文感知對端的存在狀態。當網絡交換設備超過設定的超時時間沒有接收到對端Up 狀態Hello 報文后,網絡交換設備將鄰居狀態從Up 狀態直接調整為Down 狀態。
當網絡交換設備通過鄰居發現協議完成鄰居設備的發現后,鄰居信息將以端口號為基礎構建本設備的鄰居信息數據庫,本設備的端口鏈路信息將從匯總后的鄰居信息數據庫作為基礎產生。為方便管理每一條唯一的鏈路信息,鏈路信息由鏈路信息ID 和鏈路詳細信息兩部分組成。
2.3.1 鏈路信息ID(LCP-ID)
鏈路信息ID 由圖4 所示。

圖4 LcpID 結構示意圖
鏈路信息ID(LCP-ID)由本設備MAC 地址、端口號和鏈路序號組成。鏈路信息ID 的總長度為16 字節。其中鏈路序號用于表征當前鏈路信息的新舊程度。其值從1開始順序遞增,序號值越大則表明當前鏈路信息越新。當端口的鏈路信息發生改變時,其值自加1。當其他設備進行鏈路信息同步時,可參考SeqNum 值的大小來確定當前鏈路是否發生改變,而不需要完全比對鏈路信息中的所有詳細內容。
2.3.2 鏈路詳細信息(LCP)
當設備通過Hello 報文完成鄰居設備發現,構建本地的鄰居信息數據庫后,即可通過鄰居信息數據庫構建本網絡交換設備到其鄰居設備的鏈路信息。鏈路詳細信息示意圖如圖5 所示。

圖5 鏈路詳細信息示意圖
鏈路詳細信息包含設備鏈路類型、設備鏈路延時、設備鏈路帶寬、設備鏈路消耗、本設備MAC、本設備端口號、鄰居設備MAC、鄰居設備端口號組成。鏈路詳細信息總長度為30 字節。通過該詳細信息,即可了解互聯設備之間的鏈路狀態。設備鏈路延時、設備鏈路帶寬、設備鏈路消耗可作為控制器的路由算路的輸入參數對路由的算路結果進行人為干預。
鏈路信息將被保存在本地的鏈路信息數據庫中。
當鄰居設備發現協議執行完成后,在本設備鏈路信息數據庫中將產生本設備到其鄰居設備的鏈路信息。以三層路由器構建口型拓撲為例,如圖6 所示。

圖6 4 臺路由器設備口型拓撲互聯圖
Router-1設備中將產生Router-1、Router-2、Router-3之前的互聯鏈路信息,但在Router-1 設備上,由于沒有鏈路信息的同步,設備Router-1 上無法查詢到Router-4 設備上的互聯鏈路信息。故需要在各Router 設備之間,設計鏈路信息的擴散和同步機制。
2.4.1 鏈路信息管理節點選舉
在設備完成鄰居設備發現協議后,在本設備和鄰居設備上都會保存彼此設備的鄰居的MAC 信息。并依據該鄰居信息構建本地的鏈路信息數據庫。當進行鏈路信息數據擴散和同步時,如設備雙方都向對方發送自己的鏈路信息數據,將會導致大量的帶寬被交互報文所占用。故在鏈路信息擴散和同步時,在雙方設備之間選舉出一個鏈路信息管理節點,該節點負責向對端設備擴散和同步本設備的鏈路信息。
因MAC 地址的全網唯一性,鏈路信息管理節點選舉采用MAC 地址作為標桿。MAC 地址越小,優先權越高。互聯設備中,優先權最高的設備被選舉作為鏈路信息管理節點。當網絡中有老設備離線或新設備加入時,會重新進行鏈路信息管理節點選舉。當高優先級的設備加入網絡后,該設備將搶占作為新的鏈路信息管理節點。
2.4.2 鏈路信息擴散過程
在網絡節點中,全網鏈路信息管理由鏈路信息管理節點進行維護,該虛擬節點周期性的發送本設備的鏈路信息。在鏈路信息發送過程中,為減少交互協議的帶寬,鏈路信息管理節點僅發送攜帶鏈路信息ID 值的鏈路摘要報文(CSNP)。
如表1 所示,假設當前網絡中存在100 個節點,每個節點之間互聯4 條鏈路。

表1 鏈路信息ID 和鏈路信息長度對比表
(1)當鏈路信息管理節點發送全鏈路信息時,其所需要發送的總報文長度為報文長度×節點數量×鏈路數量×雙向鏈路(2),合計46×100×4×2=36 800 字節。
(2)當鏈路信息管理節點發送鏈路信息ID 時,其所需要發送的總報文長度為報文長度×節點數量×鏈路數量×雙向鏈路(2),合計16×100×4×2=12 800 字節。
(3)通過對比發現,當僅發送鏈路信息ID 時,協議帶寬占用量將減少65.2%。
鏈路信息管理節點發送的鏈路摘要信息報文(CSNP)如圖7 所示。

圖7 鏈路摘要信息CSNP 報文結構圖
2.4.3 鏈路信息同步過程
2.4.3.1 鏈路信息管理節點分發鏈路信息
假設設備-A 被選舉作為鏈路信息管理節點,設備-A周期性發送鏈路摘要信息(CSNP)報文。設備-B 接收到CSNP 報文后,提取CSNP 報文中的LCP-ID 與本地鏈路信息數據庫中LCP-ID 值進行對比。當發現設備-A 設備發送的LCP-ID在本地鏈路信息數據庫中沒有被查詢到時,設備-B 設備主動向設備-A 設備發送鏈路詳細信息請求(PSNP)請求該LCP-ID 所對應的詳細鏈路信息。
設備-A 接收到設備-B 的PSNP 請求后,返回包含LCP-ID 詳細信息的數據報文LCP 報文給設備-B。分發過程如圖8 所示。

圖8 鏈路信息管理節點分發鏈路過程示意圖
2.4.3.2 鏈路信息管理節點補全鏈路信息
當設備-B 設備作為非鏈路信息管理節點接收到鏈路信息管理節點(設備-A)的CSNP 報文后,提取LCP-ID與本地的LCP-ID 鏈表中的值進行比對。當CSNP 報文中所有的LCP-ID 都匹配完成后,本地設備-B 設備中鏈路信息數據庫中依舊存在沒有被查找過的LCP-ID 時,表明設備-B 設備存儲的鏈路信息比鏈路信息管理節點的多。設備-B 設備主動向設備-A 發送LCP 數據幀以便設備-A設備補全缺失的鏈路信息,加快全網鏈路信息的同步收斂時間。
2.4.4 鏈路信息刪除同步
如圖9 所示:當Router-1 和Router-2 之間的鏈路linkDown時,Router-2設備感知其端口的Linkdown事件。Router-2 設備在其鏈路信息數據庫以本設備MAC 地址和linkDown 的端口作為輸入參數進行搜索。一旦發現鏈路狀態數據庫中存在該鏈路信息,則將該鏈路信息的生存時間修改為0 秒,同時讓該鏈路LcpID 的序號seqnum 的值增加1。Router-2 設備將更新后的LcpID 信息向其所有linkUp 的端口進行發送。

圖9 設備鏈路Linkdown 示意圖
Router-3 設備接收到SeqNum 較大的LcpID 鏈路信息后,更新本地鏈路狀態數據庫的信息。同時,向所有Router-3 設備上LinkUp 的端口廣播該LcpID 信息。
由于該LcpID 中的生存時間為0,當各設備的鏈路老化計時器到達計數時間時,會自動老化掉鏈路信息數據庫中的LcpID。通過以上過程,鏈路的linkDown 事件,就會自動在全網中實現擴散。
將實物設備安裝如圖10 示意圖連接。

圖10 實物驗證連接示意圖
在設備Box1 上查看端口的鄰居信息,可到如圖11所示。

圖11 Box-1 端口鄰居信息結果圖
(1)設備Box1 的MAC 地址為00:1e:08:21:58:00,設備IP 為10.254.0.39;
(2)設備Box1的端口eth-0-1與設備00:1e:08:00:08:00的eth-0-13 連接;
(3)設備Box1 的端口eth-0-41 與設備00:1e:08:23:6e:00 的eth-0-41 連接。
在設備Box2 上查看端口的鄰居信息,可到如圖12所示。

圖12 設備端口鄰居信息結果圖
(1)設備Box2 的MAC 地址為00:1e:08:23:6e:00,設備IP 為10.254.0.38;
(2)設備Box2的端口eth-0-1與設備00:1e:08:00:09:00 的eth-0-13 連接;
(3)設備Box2的端口eth-0-41與設備00:1e:08:21:58:00 的eth-0-41 連接。
根據查詢返回的消息,可知,設備Box1(00:1e:08:21:58:00)的端口eth-0-41與設備Box2(00:1e:08:23:6e:00)的端口eth-0-41 是相互對接在一起的。與實物連接示意圖10 描述一致。
在設備Box4 上,查看當前網絡中的鏈路信息ID 可到如圖13 所示結果。

圖13 全網設備拓撲連接示意圖
在Box4 設備上查看鏈路信息ID 的統計結果,發現不僅包含了本設備Box4(00:1e:08:00:09:00)、及其鄰居設備Box2(00:1e:08:23:6e:00)和Box3(00:1e:08:00:08:00)的鏈路信息ID,還包含了不與Box4 直接連接的設備Box1(00:1e:08:21:58:00)的鏈路信息ID。說明非直連的鏈路信息已成功的通過中間節點同步到了全網其他設備上。
將網絡拓撲信息上報給網管軟件后,查看當前網絡的拓撲信息,可得到圖14 所示結果。

圖14 各設備全網設備拓撲連接示意圖
SDN 控制器只需要與其中任意1 臺設備連接,從該設備上即可獲取全網所有互聯網絡設備的拓撲信息。
當發生設備間鏈路斷線時,拓撲協議會自動將斷纖信息進行全網同步,并將相應的信息上報到網管中。網絡設備斷線時可見如圖15 所示。

圖15 網絡設備斷路后網絡拓撲示意圖
本文針對二層交換和三層路由設備之間拓撲互聯關系,設計一套簡單的網絡拓撲上報協議,本協議為私有的定制化協議,可在自研的網絡設備中實現設計實現鄰居設備之間的自動感知發現和鏈路信息的全網同步擴散和同步。本協議已實際應用在項目產品中,通過實裝設備測試證明,本協議可實現在自動發現網絡中的各交換機和路由器設備節點,并自動構建網絡交換設備節點之間的鏈路信息,同時將鏈路信息進行全網擴散和同步,最終實現在網絡中任意節點設備上都保存有全網的拓撲信息。通過該協議,SDN 控制器可從全網中任意1 臺設備中獲取當前網絡的拓撲信息。減少了SDN 控制器對網絡拓撲的信息提取和計算,減少了SDN 控制器的計算復雜度。下一步還需進一步開展數百個節點復雜組網網絡環境下的功能性能驗證,查看鏈路信息在全網中同步所需要的時間以及鏈路變更后,在全網環境下的擴展延時。