1. 程式人生 > >網路拓撲發現演算法的分析

網路拓撲發現演算法的分析

摘 要: 介紹了幾種常見的網路拓撲發現工具,從負載、速度、準確性及適用範圍幾個方面對各工具的執行效果進行了對比;分類歸納了常用的網路拓撲發現的方法;分析了利用這些方法實現的七種拓撲發現演算法,並針對每種演算法詳細列出了其優缺點。給出了對網路拓撲發現演算法進行評價的標準及其量化的表示形式。
  關鍵詞: 拓撲發現 演算法 SNMP ICMP


  近年來,由於計算機網路的迅速發展,有效的網路管理得到了越來越多的重視,而獲得最新的網路拓撲結構對於網路管理至關重要。因為網路具有動態特性,並且網路規模日益增大,利用人工維護網路的拓撲圖幾乎不可能。因此,網路拓撲自動發現技術的研究廣泛開展起來。Cornell大學的CNRG研究組、美國南加州大學USC(University of Southern California)的SCAN研究組和Internet資料分析合作組織CAIDA(Cooperative Association for Internet Data Analysis)等都在該領域進行了大量的研究工作,並取得了很多成果。網路拓撲發現涉及到網路體系結構的各個層次,可以利用很多協議設計不同的演算法。各種演算法的效能差距很大,各有所長。判斷一種演算法優劣的指標主要是:負載、速度和準確性等,具體說就是一個演算法在不過多增加網路負載的前提下,儘量提高收斂速度和準確性。以前的網路拓撲發現演算法主要集中精力在發現網路的邏輯拓撲(基於第三層的),這些演算法忽略了第二層的網路裝置(交換機或網橋)的連線。即使提供了第二層的網路拓撲發現,也是針對具體的網路裝置,不具有通用性。近年來,出現了一些通用的基於第二層的網路拓撲發現演算法。

1 拓撲發現的常用工具
1.1 ARP協議

  每個支援地址解析協議ARP(Address Resolution Protocol)的網路裝置中都維護著一張ARP表,該表中記錄了該裝置所連線的乙太網中網路裝置的IP地址和MAC地址的對應關係。根據ARP表的這個特點,可以從一臺已知的路由器或交換機的ARP表發現其連線的乙太網中其他網路裝置,再從這些新發現的裝置中區分出路由器和交換機,並繼續根據這些裝置的ARP表進行網路裝置發現。依此類推,就得到了整個網路的拓撲結構。
1.2 SNMP協議
  利用簡單網路管理協議SNMP(Simple Network Management Protocol),一個管理工作站可以遠端管理所有支援這種協議的網路裝置,包括監視網路狀態、修改網路裝置配置和接收網路事件警告等。SNMP協議利用管理資訊庫MIB(Management Information Base)管理網路裝置的配置和狀態資訊,每個支援SNMP的被管理裝置都維護了一些MIB庫。其中,最常用的是MIBII(RFC-1213)和Bridge-MIB(RFC-1493)。
1.3 ICMP協議

  在網路拓撲發現中主要利用了Internet控制訊息協議ICMP(Internet Control Message Protocol)的echo(迴應)請求、echo應答和超時這三種報文。拓撲發現中常用的工具Ping就是利用ICMP的echo報文發現網路的連通性,而Traceroute則是利用ICMP超時報文發現網路中兩節點間的路徑。Mercator演算法就是利用啟發式規則和限制跳數的Traceroute進行拓撲發現[1]
1.4 DNS Zone Transfer
  域名伺服器DNS(Domain Name Service)中儲存了域內的主機名和IP地址的對應關係列表。“zone transfer”命令可以使DNS伺服器返回域內所有域名的列表,所以DNS Zone Transfer可被用來發現域內的主機和路由器。
1.5 其他拓撲發現工具
  利用路由資訊協議RIP(Routing Information Protocol)、開放最短路徑優先協議OSPF(Open Shortest Path First)或邊界閘道器協議BGP(Border Gateway Protocol)可以獲得路由裝置中儲存的路由資訊。利用該資訊發現新的路由裝置並判斷裝置之間的連線關係。從而發現整個網路的拓撲結構。CNRG提出的拓撲發現演算法和CAIDA的Skitter演算法都利用了BGP協議。表1列出了上述方法在執行效果(負載、速度、準確性和適用範圍)上的對比。


2 網路拓撲發現常用方法
2.1 基於第三層的拓撲發現常用方法

  第三層的網路拓撲發現方法著重於發現路由裝置間的邏輯連線關係。它發現的拓撲結構並不表示網路中裝置的真正連線關係,而是“IP資料報轉發”意義上的連線關係。下文介紹了三種基於第三層的拓撲發現的啟發式規則:
  規則1:利用廣播Ping進行子網猜測。
  給定一個IP地址,可利用本規則猜測該地址所屬的子網掩碼:
  for(MskLen=31;MskLen>7;MskLen--) {//構造主機號全為0或全為1的廣播地址
  BrdcstAddrs=CnstructBrdcstAddr(MskLen);//ping構造的廣播地址
  ResultCount=BrdcstPing(BrdcstAddrs);//若每個廣播地址都獲得了回覆,演算法結束,返回當前猜測的子網掩碼長度
  if(ResultCount>=2)
  return MskLen;
  }
  本規則的基本思想是遞減猜測子網掩碼的長度,對每個猜測的子網掩碼構造廣播ping地址,如果主機對構造的廣播地址有迴應則說明猜測的子網掩碼是正確的[2]
  規則2:利用一組地址進行子網猜測。
  假設知道地址集A中的IP地址同屬於一個子網,可利用本規則猜測這組地址所屬的子網地址。
  ①計算A的按位與BitwiseAND{A}和它的按位或BitwiseOR{A};
  ②逐位對比BitwiseAND{A}和BitwiseOR{A},找出第一個不相同的位;
  ③將步驟②中找到的位和其後的各位設定為0,猜測子網掩碼;
  ④將步驟③中的結果分別與BitwiseAND{A}進行按位與,算出子網號。
  本規則的基本思想是:對比地址集A的按位與和按位或的結果,找出第一個不相同的位,則子網掩碼在該位一定為0即該位及其後的各位都只能是主機號,而不可能是子網號。從而判斷出子網掩碼的長度,而子網地址則可通過BitwiseAND{A}與子網掩碼做按位與運算得出[2]


  啟發式規則2在乙太網上的應用示例如圖1所示。以圖1為例執行本規則,因這組地址的前三個欄位相同,故不失一般性,只對第四個欄位進行運算:
  ①BitwiseAND{A}=10000000,BitwiseOR{A}= 10111111;
  ②BitwiseAND{A}與BitwiseOR{A}在第三位不同;
  ③子網掩碼的最後一個位元組一定為ab000000(ab為11,10或00);
  ④將ab000000與10000000(BitwiseAND{A})進行按位與,結果形如c0000000(c為1或0)。
  規則3:猜測域內的有效地址。
  本規則可被用來推測已知的子網地址空間中有效的IP地址。其演算法描述如下。
  while(AliveIPList Not NULL) {
    this=getIP(AliveIPList);//獲得this後的N個地址,存入臨時地址集
    GetFollowingIPs(this,N);//this的最後一個位元組為1、65、129或193
    if(GetLastByte(this)=1 or 65 or 129 or 193)//選取與this具有相同字首的N個地址,存入臨時地址集
    GetIPsWithSamePrefix(this,N);
  }
  N的選擇非常重要,若N過大,則能夠獲得所有的有效地址,但也會包含一些無效地址;若N太小,則發現的大部分地址是有效的,但同時也會遺漏一些有效地址[2]
2.2 基於第二層的拓撲發現常用方法
  基於第二層的拓撲發現方法著重於發現網路裝置埠間的物理連線。基於第二層的拓撲發現常用的2種方法如下。
  (1)利用生成樹協議
  乙太網中的交換機和網橋都維護了一個地址轉發表,其中為每個埠儲存了其轉發過的資料幀的源MAC地址,若地址轉發表是完備的,則可利用生成樹協議推匯出如下三條定理,用來判斷兩個埠間的連線關係:
  定理中的Si表示交換機i;Sij表示交換機i的第j個介面;Aij表示與Sij相關的地址轉發表中的MAC地址的集合,即Aij中的MAC地址都是從Sij收到的資料幀的原地址;Uijkl 表示Aij∪Akl
  ①假設Sij和Skl是不同的介面,如果Aij和Akl的交集不為空,則Sij與Skl沒有直連[3]
  ②假設t是至少包含兩臺交換機Sp和Sq的子網,如果Aij和Akl的交集為空並且Uijkl包含且僅包含Sp和Sq中的一個,則Sij與Skl沒有直連[3]
  ③假設Aij和Akl的交集為空,且Aij和Apt的交集為空,如果Uijkl=Uijpt並且Si和Sk屬於同一個子網而Sp屬於不同的子網,則Sij與Skl沒有直連[3]
  (2)利用埠的流量統計
  通過對網路裝置的各個埠的流量資料進行統計,並結合其他的第二層網路拓撲發現方法,可判斷出埠間的直連關係。
3 網路拓撲發現的常用演算法
3.1 基於SNMP和Ping的演算法
  演算法的主要步驟是將探測源模擬成一個網管站與SNMP Agent通訊,先取得探測源的預設閘道器,存入待探測佇列ToDoList。依次取出ToDoList中的IP,獲得該IP的MIB庫中的ipRouteTable中的資料。當ipRouteType= indirect時,可以利用ipRouteNextHop獲得路由器-路由器的連線,並將ipRouteDest存入ToDoList;當ipRouteType = direct時,利用ipRouteDest可以獲得當前路由器連線的子網。然後Ping子網內的每個IP地址,析取ICMP迴應報文的IP地址,確定出子網內活動主機的資訊。當ToDoList所有IP均被處理後,生成網路拓撲結構圖。
3.2 基於廣播Ping和DNS Zone Transfer的演算法
  演算法的主要步驟是首先利用DNS Zone Transfer獲得域內裝置的IP地址並存入臨時地址集,然後依次從臨時地址集中取出地址,進行以下操作,直到臨時地址集為空:利用Ping判斷該地址是否有效,若有效則將該地址存入有效地址集,並且利用廣播Ping猜測該地址所在的子網地址。Ping該子網的廣播地址,將有回覆的IP歸入該子網,並且加入到臨時地址集。
3.3 基於Traceroute和DNS Zone Transfer的演算法
  演算法的主要步驟是首先利用DNS Zone Transfer獲得域內裝置的IP地址並存入臨時地址集,然後依次從臨時地址集中取出地址存入this_addr,進行以下步驟,直到臨時地址集為空:利用Ping判斷該地址是否有效,若有效則將該地址存入有效地址集。Traceroute this_addr,判斷出this_addr連線的路由器地址,然後利用啟發式規則2猜測this_addr所屬的子網地址。
3.4 基於Ping和Traceroute的演算法
  演算法的主要步驟是首先隨機選取域內形式為*.1的地址並將它們存入臨時地址集,然後依次從臨時地址集中取出地址存入this_addr,進行以下步驟,直到臨時地址集為空:利用Ping判斷該地址是否有效,若有效則將該地址存入有效地址集並且根據啟發式規則3將更多的地址加入臨時地址集。Traceroute this_addr,判斷出this_addr連線的路由器地址,然後利用啟發式規則2猜測this_addr所屬的子網地址。
3.5 基於SNMP和ARP的演算法
  演算法的主要步驟是將探測源模擬成一個網管站與SNMP Agent通訊,先取得探測源的預設閘道器,存入待探測佇列ToDoList。依次取出ToDoList中的IP,獲得該IP的MIB庫中ipRouteTable資料,當ipRouteType=direct時,利用ipRouteDest可以獲得當前路由器連線的子網;當ipRouteType=indirect時,可以利用ipRouteNextHop獲得路由器-路由器的連線,並將ipRouteDest存入ToDoList。獲得ifToMediaNetAddress中的IP,判斷其屬於哪個子網。當ToDoList所有IP均被處理後,生成網路拓撲結構圖。本演算法與基於SNMP和Ping的演算法的區別在於利用ARP表獲得子網中的活動IP,因此提高了演算法的速度,減輕了負載,但是卻可能漏掉一些活動IP。
3.6 基於OSPF和Ping的演算法
  演算法的主要步驟是先利用OSPF或RIP協議生成的路由資訊獲得路由裝置以及子網間的連線關係,然後利用Ping獲得子網中的活動主機的資訊。
3.7 基於BGP和Traceroute的演算法
  演算法的主要步驟是先利用BGP路由資訊區分出Internet上的各個域,利用Ping獲得每個域中的活動主機,Traceroute這些活動主機,利用路徑資訊結合BGP路由資訊生成Internet主幹網的拓撲資訊。本演算法主要用於發現Internet主幹網的拓撲資訊。
  表2對以上演算法的優缺點進行了總結。


4 網路拓撲發現演算法的評價方法
  (1)速度。可用演算法執行所花費的時間來衡量。演算法執行的時間分為兩部分:採集資訊生成拓撲結構的時間;將生成的表示拓撲關係的資料結構以圖形化的形式顯示出來的時間。
  (2)負載。因為一個演算法中對網路造成的負載可能由多個部分引起,如在基於SNMP的演算法中,給網路引入的負載包括獲得拓撲資訊的SNMP資料包和為判斷一個地址是否有效所引入的ICMP報文(利用Ping引入的)。考慮到大部分拓撲發現演算法中都會用到基於ICMP的工具(Ping、Traceroute),並且由ICMP所引入的負載遠遠大於其他因素引入的負載,所以可以用一個演算法用到的所有ICMP報文在網路中所經歷的總跳數(hop)代表該演算法對網路造成的負載[2]。按照這個定義,對於Ping,假設對每個節點Ping 2次,則要判斷一個H跳處的裝置是否有效所需要引入的負載是4H;對於Traceroute,假設對每個路由器傳送兩個探測包,這樣對於一個在h(1≤h≤H)跳處的裝置,所引入的負載是4h,則要Traceroute一個H跳處的裝置所引入的負載是1到H的算術級數的4倍。
  
  (3)完整性。可用演算法發現的網路裝置數量佔實際網路中裝置數量的百分比表示。
  (4)準確性。可用演算法面對多個可選的拓撲結構的可能性來表示。
  本文從協議、規則、演算法及評價標準幾個方面對網路拓撲發現技術進行了介紹,提出了量化評價網路拓撲發現演算法的方法。為初步接觸網路拓撲發現的人員提供了全面、詳細的參考,同時也為產生新的網路拓撲發現演算法提供基礎研究。
參考文獻
1 施 鋒,吳秋峰.網路多層拓撲發現演算法的分析[J].網路資訊科技,2004;23(3):30~32
2 Siamwalla R,Sharma R,Keshav S.Discovering Internet topol-ogy[C].In:Proceedings of IEEE INFOCOM,1999
3 Breitbhart Y,Garofalakis M,Martin C et al.Topology discov-ery in IP heterogeneous networks[C].In:Proceedings of IEEE INFOCOM,2000
4 王志剛,王汝傳,王紹棣等.網路拓撲發現演算法的研究[J].通訊學報,2004;25(8):36~43
5 熊 坤,寇曉蕤,範元書等.網路拓撲發現演算法定性分析[J].計算機工程與應用,2004;(14):136~137
6 Lowekamp B,Hallaron D R,Gross T R.Topology discovery for large ethernet networks[C].In:Proceedings of SIGCOMM,2001
7 Bejerano Y,Breitbart Y,Garofalakis M et al.Physical discov-ery for large multi-subnet networks[C].In:Proceedings of IEEE INFOCOM,2003

相關推薦

網路發現演算法分析

摘 要: 介紹了幾種常見的網路拓撲發現工具,從負載、速度、準確性及適用範圍幾個方面對各工具的執行效果進行了對比;分類歸納了常用的網路拓撲發現的方法;分析了利用這些方法實現的七種拓撲發現演算法,並針對每種演算法詳細列出了其優缺點。給出了對網路拓撲發現演算法進行評價的標準及其量化的表示形式。  關鍵詞: 拓撲發現

發現1

.com src 協助 vmware tco 拓撲 例如 自動搜索 網絡圖 自動探索您的網絡並繪制拓樸圖 了解網絡環境內的實體聯機狀態、設備類型,以及各種有IP地址的系統設定等信息。 能以可視化的圖表快速找出網絡運作問題,並能自動產生拓撲圖。 自動維護服務器

MTOP2015雙11整體網路

MTOP2015雙11整體網路拓撲 2015年雙11, mtop遷移到accs,進行了去中心化改造,並承接了部分pc的活動業務,形成了下面的結構圖。 一、AServer/WJAS AServer/WJAS都是nginx的定製版本. WJAS是2014年的閘道器技術

基於 Echarts實現簡單網路

option = { title: { text: '簡單網路拓撲' }, tooltip: {}, animationDurationUpdate: 1500, animationEasingUpdate: 'quintic

docker overlay網路及服務註冊問題

跨主機docker網路有多種方案,如overlay、flannel、calico、weave等,其中overlay是docker原生的跨主機網路方案。最近使用overlay方案部署容器叢集,在進行服務註冊時遇到問題,需要手動建立veth裝置解決。   1. overlay網路拓撲 over

前端開發框架總結之利用Jtopo實現網路功能(四)

                     前端開發框架總結之利用Jtopo實現網路拓撲功能(四) 上文我們講了拓撲容器相關的互動設計和實現思路以及一些關鍵技術細節。至此,我們已經覆蓋了結

前端開發框架總結之利用Jtopo實現網路功能(三)

                     前端開發框架總結之利用Jtopo實現網路拓撲功能(三) 上文我們講了一些拓撲連線、拓撲文字節點相關的互動設計和實現思路以及一些關鍵技術細節。本文

前端開發框架總結之利用Jtopo實現網路功能(二)

                    前端開發框架總結之利用Jtopo實現網路拓撲功能(二) 上文我們講了一些拓撲結點生成的實際場景設計和實現思路以及一些關鍵技術細節。本文我們繼續我們的拓撲管理

前端開發框架總結之利用Jtopo實現網路功能(一)

                      前端開發框架總結之利用Jtopo實現網路拓撲功能(一) 前言:     前段時間由於專案需要實現一個網路裝置拓撲管理的

怎樣在迅捷畫圖網站中二次編輯網路流程圖模板

  現在除了可以自己繪製流程圖之外,還有一種很便捷的方法是套用模板進行編輯使用,直接將模板裡面的內容換成自己需要的內容即可,稱為二次編輯使用,那在迅捷畫圖中怎樣二次編輯網路拓撲流程圖模板呢?操作方法如下所示。   工具/原料:  迅捷畫圖軟體,能上網的電腦並帶有瀏覽器   操作方法介紹:  1.進入迅捷畫

家庭網路架構

家庭網 當我們家庭想要接網線時,運營商的人會在離你最近的一個站點,拉一根光纖到你家。然後光纖插到調變解調器(俗稱的貓)的一端,貓的另一端連線我們的路由器。於是我們的路由器就具有連線外網的功能了。我們的桌上型電腦通過網線和路由器相連,我們的智慧手機等其他的移動終端通過路由器的WIFI和外網相

HCNA————第一課 經典三層網路,OSI七層參考模型

網路技術成長之路 經典三層網路拓撲分為3層,從下到上依次為接入層,匯聚層,核心層,外接一個路由連公網。如下圖。1. 接入層一般放在接入層的裝置效能都比較差,但是要求埠多(因為要連多臺終端裝置,比如PC)。接入層一般放接入交換機。比如傻瓜交換機(插上線就能用的交換機)。2.匯聚層放在匯聚層的裝置因為要承載多臺

三十六、HDFS的寫資料流程及網路概念

                                            HDFS的寫資料流程及網路拓撲概念 1、HDFS的寫資料流程 1)客戶端向namenode請求上傳檔案,nam

計算機網路結構 以下關於星型網路結構的描述正確的是______。 (多選題 )

全文轉自百度,自己總結方便自己以後查詢! 常見型別:  星型拓撲  匯流排拓撲 ▪ 環型拓撲 ▪ 樹型拓撲 ▪ 混合型拓 ▪ 網型拓撲 簡單介紹的: 星型 優點:可靠性高,方便管理,易於擴充套件,傳輸效率高 缺點:線路利用率低,中心節點需要

某企業社交應用網路架構圖

如有想了解更多軟體,系統 IT,企業資訊化 資訊,請關注我的微信訂閱號: 作者:Petter Liu 出處:http://www.cnblogs.com/wintersun/ 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位

複雜網路社群結構發現演算法-基於python networkx clique滲透演算法

前言     最近因為業務資料分析的需要,看社群發現相關的東東稍多些,剛剛寫過一篇基於igraph C library的方法(http://blog.csdn.net/a_step_further/article/details/51176973),然後想用kcliqu

基於HTML5和WebGL的3D網路結構圖

現在,3D模型已經用於各種不同的領域。在醫療行業使用它們製作器官的精確模型;電影行業將它們用於活動的人物、物體以及現實電影;視訊遊戲產業將它們作為計算機與視訊遊戲中的資源;在科學領域將它們作為化合物的精確模型;建築業將它們用來展示提議的建築物或者風景表現;工程界將它們用於

複雜網路社群結構發現演算法-基於igraph 標籤傳播演算法

【前言】       繼續我們本系列對複雜網路社群結構的方法探索,之前已經嘗試過spark上標籤傳播演算法、igraph 中隨機遊走演算法、networkx中的clique滲透演算法(見筆者相關文章),但一直侷限於無向、無權重圖的分析。本次,向前邁一步,引入權重。選用了

關於使用PADS Layout和Router編輯網路的總結

最近在使用PADS進行圖紙的繪製和PCB layout工作。今天遇到一個網路結構編輯的問題。基本如下圖所示:          一開始懷疑是該NET的route規則有問題,於是修改rule下router的拓撲策略,改為序列,但是沒有效果。在route下,F3佈線不奏效, 依

排序演算法實現可執行

#include <stdio.h> #include <stdlib.h> #define STACK_INIT_SIZE 100 #define STACKINCREMENT  10 #define MAX 20 typedef int Vert