潘 爽,蘇亞維
(中國電子科技集團公司第十五研究所,北京 100083)
隨著互聯網的快速發展,網絡規模迅速擴大,網絡結構愈加復雜,準確完整的網絡拓撲結構發現方法有助于網絡的高效管理,對優化網絡配置、定位網絡故障、發現網絡漏洞、探測網絡交流等具有重要意義。網絡拓撲發現是一種發現網絡實體(例如路由器、交換機、網橋等)并展示實體間關系的技術,一般來說,根據網絡拓撲發現設備的不同,通常分為邏輯拓撲發現和物理拓撲發現,分別對應于OSI參考模型中的網絡層和鏈路層。其中,邏輯拓撲發現主要根據網絡層IP地址來發現路由器與路由器之間的連接,路由器與子網之間的連接,使用IP地址建立網絡實體的連接。物理拓撲發現主要根據鏈路層的信息發現物理網絡實體(例如交換機和終端)之間的連接,使用Mac地址建立網絡實體的連接。關于網絡層有許多拓撲發現算法,這些算法通常基于SNMP、ICMP、RIP、OSPF和ARP路由表[1-3]。
本文融合多協議對網絡結構進行分層構建,并對各層進行關聯。首先對現有邏輯拓撲發現算法和物理拓撲發現算法進行完善,提出應用拓撲層的概念及構建方法,并進一步對物理拓撲、邏輯拓撲、應用拓撲三層拓撲進行關聯分析[4-5]。
邏輯拓撲重構的目的是發現網絡中的路由器和子網,并顯示路由器與路由器之間、路由器與子網之間的關系以及子網內的網絡設備。RIP(路由信息協議)是一種用于建立設備路由信息的協議,該協議主要基于距離矢量算法(Distance Vector Algorithms)完成,核心思想是通過“跳數”(metric)統計到達目的地址的路由距離,計算路由器間的連接情況。但該算法存在一定的局限性,一方面,要求網絡中的路由器使用RIP協議作為路由信息交換協議,另一方面,路由距離限制在15跳之內,不適用于大型網絡。而大多數網絡均使用了SNMP協議,因此使用基于SNMP協議的發現方法構建網絡拓撲時不受此限制。
本文使用基于SNMP協議的發現方法構建拓撲,該方法的主要思想是利用SNMP協議從路由器數據庫中獲取路由信息,然后分析這些信息,獲取網絡中路由器和子網之間的連接,進而發現網絡。算法流程如下:
(1)根據SNMP協議在網絡中進行掃描,添加路由器到路由器的等待隊列中。
(2)從隊列中選擇一個路由器作為開始路由器,通過其MIB獲得路由信息表。
(3)將路由信息表中最大的IP地址作為當前路由器的ID,將此路由器添加到已建立的隊列中,然后刪除與等待隊列中當前路由器具有相同IP地址的路由器。遍歷當前路由器MIB中的ipAddrTable記錄。
(4)如果記錄的ipRouteType為3,則表示當前路由器與子網直接連接,根據ipRouteDest和ipRouteMask獲取直接連接的子網信息,以及路由器和子網的連接情況。
(5)如果記錄的ipRouteType為4,則表示當前路由器與子網間接連接,可以查找與當前路由器直接連接的下一個路由器,然后將其添加到等待隊列。
(6)從等待隊列中執行下一個路由器,并重復步驟(2)~步驟(6),直到等待隊列為空。
拓撲協議或路由協議的主要功能是實現設備的物理連接,并非識別設備版本號和型號。識別設備/軟件類型型號主要依賴于設備指紋分析,本文選擇協議CDP、HTTP、S7、Modbus、Smb、SNMP、MySQL等識別大部分設備,對其他設備結合SNMP中MIB信息接口組中的sysServices、IP組的ipforword和Bridge-MIB函數確定設備類型。
如圖1所示,CDP協議識別思科設備型號和軟件版本;HTTP協議識別TP-LINK型號;S7協議識別西門子設備型號;HTTP協議識別火絨殺毒軟件版本號信息。

圖1 設備識別流程
以CDP協議為例,CDP是一個二層的網絡協議,默認每60 s向01-00-0C-CC-CC-CC組播地址發送一次通告,CDP協議中包含設備類型信息,字段為Capabilities,其中Switch標識的是交換機,Route為路由器。CDP數據包還包括設備連接的物理接口信息。通過CDP數據包中的Software Version字段獲取軟件版本、設備平臺等信息。基于網絡通信指紋比對識別設備信息,如設備廠商、型號和版本等。
通過融合多協議,實現可支持的部分設備見表1所列。

表1 支持設備列表
結合SNMP中MIB信息接口組中的sysServices值可初步判斷其他設備的類型。可根據式(1)計算Li,若值為3,則其屬于第3層網絡設備,具有數據轉發能力,根據表2可知,該設備可以判斷為路由器。


表2 網絡設備
將IP組的ipforword數據作為輔助值進行驗證和進一步判斷。若ipforword值為1,則表示設備具有數據轉發功能;若ipforword值為0,則表示設備不具有數據轉發功能。考慮到很多3層網絡交換機也具有數據轉發功能,與路由器ipforword值相同,且均屬于網絡層,因此進一步通過檢查設備能否實現Bridge-MIB功能對兩者進行區分(路由器無此功能,但交換機具有此功能)。不同設備對應各值的情況見表3所列。

表3 網絡設備對應值
物理層拓撲發現要在網絡層拓撲發現任務之后進行,用于進一步確定子網的拓撲結構,發現交換機與路由器,交換機與主機之間的物理連接關系。目前,物理層拓撲發現主要有兩類算法,一種基于生成樹協議(如基于STP協議、CDP協議的方法);另一種基于地址轉換表(如基于AFT協議、SNMP協議的方法)。其中,基于AFT協議的方法對地址轉發表要求高,表必須完好無損;用SNMP協議讀取設備的MIB信息會有一定的延遲,并與網絡規模成正相關趨勢;CDP協議只能在Cisco設備上使用。考慮到目前大多數鏈路層設備都支持生成樹協議(STP),因此本文選擇基于STP協議的方法。
通過STP生成樹協議可以發現網絡中的所有鏈路,并避免冗余鏈路形成環路,用來發現交換機之間的連接關系[6-10]。
子網物理拓撲發現流程如圖2所示。

圖2 子網物理拓撲發現流程
(1)獲取子網中所有交換機的總隊列。如果交換機支持生成樹協議,則根交換機由生成樹協議選擇,否則,選擇核心交換機或網關交換機作為根交換機。
(2)選擇交換機列表中的上行鏈路端口作為當前根交換機。
(3)從列表中選擇一個交換機,然后根據直接連接規則判斷所選交換機與當前根交換機之間的連接。
(4)遍歷所選交換機的葉端口,在葉端口表中顯示路由設備和IP地址的主機,然后將它們連接到所選交換機。重復步驟(3),直到交換機是列表中的最后一個。
(5)從步驟(2)中建立的交換機列表中選擇一個交換機,將其作為虛擬根交換機,然后算法將從步驟(2)開始重復,直到交換機總隊列為空。
目前的研究中,缺乏對應用拓撲的發現,但實際應用中,發現設備之間的通信情況具有重要的意義,因此,本文提出應用拓撲重構的概念,并以郵件為例進行分析。
應用拓撲發現主要是基于設備(IP地址)之間的網絡通信分析,在設備(IP地址)的連接關系上,進一步基于協議識別與解析,如識別設備提供的服務與連接協議,以及服務的詳細情況等[11-15]。
將 HTTP、HTTPS、SNMP、FTP、SFTP、Telnet、SSH、NTP、SMTP、POP3、IMAP、SMB等協議通信報文內容與指紋庫軟件指紋進行比對,可以識別操作系統、安防、應用軟件的數據信息。支持識別的應用軟件見表4所列。

表4 應用軟件
在識別應用服務的基礎上,對通信報文進行深度解析,提取業務應用通信行為和關鍵字段信息,構建詳細的應用拓撲關系。可實現對郵件、語音、傳真、文件傳輸、遠程控制、數據庫訪問和數字證書認證等業務的信息識別與構建。以郵件為例,根據SMTP協議字段response字段值可判斷是否包含郵件服務,并通過SMTP、POP3、IMAP協議中的from、to、subject字段獲取發送者、接收者、主題等信息。
物理拓撲、邏輯拓撲、應用拓撲既相互獨立(各表述不同網絡層關注的設備及結構)又相互關聯(共同構成完整的網絡結構)。研究拓撲間的聯系,有利于清晰了解網絡結構,掌握設備在不同層間的關系。因此,本文對物理拓撲、邏輯拓撲和應用拓撲的關聯方式進行研究,提出了一種符合實際應用場景的關聯方式。該關聯方式的核心為IP,通過IP對三層網絡拓撲進行關聯,并獲取物理拓撲信息、邏輯層信息和應用層信息。本文發現,可以通過ARP協議關聯物理拓撲層和邏輯拓撲層,通過路由器IP間的服務和服務信息關聯邏輯拓撲層和應用拓撲層。其中,ARP(地址解析協議)是一種計算機聯網協議。用于已知IP地址或網絡層地址時可以確定網絡主機的鏈路層或硬件地址,維護的ARP表中每條記錄都是一個IP地址和一個物理地址的綁定,因此可以使用路由設備或交換設備的ARP表來關聯物理層和邏輯層信息,可通過IP查看IP關聯的設備和設備之間的應用服務情況[16-19]。
目前的網絡拓撲分析主要是發現網絡層的拓撲結構,對子網內部的結構關注較少,這顯然不能適應規模日益擴大的網絡結構,因此本文分層論述了網絡拓撲發現方法,一是通過改進的邏輯拓撲重構算法發現路由器、子網及其連接關系;二是通過改進的物理拓撲重構算法發現網絡中交換機與交換機、交換機與路由器之間的關系;另外,本文引入的應用拓撲展示了設備間的應用服務,使得網絡更加完整。
綜上所述,論文中提出的融合多協議的網絡拓撲發現技術在發現完整網絡結構中具有較大優勢,但仍存在一些問題,如部分不支持SNMP協議的設備難以被發現,算法未考慮IPv6網絡環境,一定程度上依賴設備指紋庫等。通過對網絡拓撲構建的研究,本文認為適配IPv6環境 、完善設備指紋庫等是未來技術的改進方向[20-22]。