如何利用snmp協議發現大型複雜環境的網絡拓撲(建議開發自動化工具的朋友能夠看一下)

關於網絡拓撲自發現,這項技術已是個很老的課題,早在08年就有前輩提出了相關算法,我這篇文章就是根據前輩們踩的坑,總結凝鍊了利用snmp協議完成網路拓撲自發現的方法,由於snmp都是遵循rfc1213標準創建相應的mib庫信息,而使用命令cli的方式採集路由表、Mac、端口轉發表的方式會遇到異構產品底層命令適配的問題。關於數據的範式化和數據處理、數據展示都將是挑戰。好了,廢話很少說,那就簡單分析一下拓撲發現的過程。
本功能模塊主要是實現網絡環境下網絡拓撲的自適應和自發現算法

主要分爲三部分:網絡

網絡層拓撲發現
鏈路層拓撲發現
主機層拓撲發現
網絡拓撲發現
網絡拓撲發現的主要目的是獲取和維護網絡節點的存在信息和它們之間的鏈接關係信息,並在此基礎上繪製出整個網絡拓撲圖。網絡管理人員在拓撲圖的基礎上對故障節點進行快速定位。
二層網絡拓撲
二層網絡拓撲即OSI參考模型中第二層的網絡拓撲,稱爲鏈路層網絡拓撲。網絡拓撲發現是網絡管理的基本工做,從底層看是交換機之間的鏈接關係。只有物理拓撲才能準確地定位網絡中的故障,精確地測定某個位置的性能和狀態。
三層網絡拓撲
三層網絡拓撲是OSI參考模型中的第三層,它描述的是路由器、子網之間的鏈接關係。
OID
對象標識(Object identifier-OID)爲每個對象分配一個惟一的表示號。
SNMP
SNMP 是用於在 IP 網絡管理網絡節點的一種標準協議。SNMP 使網絡管理員可以管理網絡效能,發現並解決網絡問題以及規劃網絡增加。經過 SNMP 接收隨機消息,網絡管理系統獲知網絡出現問題。ide


基於二/三層網絡拓撲發現方法 (網絡層和鏈路層拓撲發現)

第一步:生成3層網絡層網絡拓撲
本算法採集設備信息,能夠經過SNMP採集或者登陸設備採集,優先選擇SNMP採集(表如何利用snmp協議發現大型複雜環境的網絡拓撲(建議開發自動化工具的朋友能夠看一下)
列出了用SNMP採集所需信息的OID點)。當設備不支持SNMP採集時,登陸設備採集。工具

路由表中的每一個條目都包含ipRouteDest、ipRouteIfIndex、ipRouteNextHop、ipRouteType和ipRouteMask這幾項。其中,ipRouteDest表示路由的目的地址,ipRouteMask表示路由目標地址的子網掩碼,將ipRouteDest和ipRouteMask按位與能夠獲得路由目標地址所在的子網;ipRoutelflndex表示路由本地接口的索引值,三層設備將目的地址爲ipRouteDest的IP包經過該接口轉發;ipRouteType表示了路由的類型,當路由類型值爲3(direct)時,說明三層設備直接鏈接到路由目的地址所在子網,當路由類型值爲4 (indirect)時,說明三層設備不直接鏈接到路由目的地址所在子網,必須再通過其它三層設備,即爲路由表中的ipRouteNextHop,此時三層設備經過本地接口ipRoutelflndex與下一跳三層設備直接鏈接。性能

以cisco 3750 (10.95.32.10)核心交換機爲例:
ipRouteDest OID
1.3.6.1.2.1.4.22 ARP表
如何利用snmp協議發現大型複雜環境的網絡拓撲(建議開發自動化工具的朋友能夠看一下)
1.3.6.1.2.1.4.20 IP地址表
如何利用snmp協議發現大型複雜環境的網絡拓撲(建議開發自動化工具的朋友能夠看一下)
如何利用snmp協議發現大型複雜環境的網絡拓撲(建議開發自動化工具的朋友能夠看一下)
1.3.6.1.2.1.4.24 IP路由表pwa

路由表中的每一個條目都包含ipRouteDest、ipRouteIfIndex、ipRouteNextHop、ipRouteType和ipRouteMask這幾項。其中,ipRouteDest表示路由的目的地址,ipRouteMask表示路由目標地址的子網掩碼,將ipRouteDest和ipRouteMask按位與能夠獲得路由目標地址所在的子網;ipRoutelflndex表示路由本地接口的索引值,三層設備將目的地址爲ipRouteDest的IP包經過該接口轉發;ipRouteType表示了路由的類型,當路由類型值爲3(direct)時,說明三層設備直接鏈接到路由目的地址所在子網,當路由類型值爲4 (indirect)時,說明三層設備不直接鏈接到路由目的地址所在子網,必須再通過其它三層設備,即爲路由表中的ipRouteNextHop,此時三層設備經過本地接口ipRoutelflndex與下一跳三層設備直接鏈接。
如何利用snmp協議發現大型複雜環境的網絡拓撲(建議開發自動化工具的朋友能夠看一下)
第二步:生成2層鏈路層網絡拓撲
經過第一步,計算獲得3層網絡拓撲,全部接口分紅兩大類:
點對點網絡,兩個接口直接互連;
多點對多點網絡,三層在同一網段,須要在這一步獲得互連關係。
2層網絡拓撲的計算,依據設備的MAC地址,路由器檢查ARP表,交換機檢查MAC地址
基於SNMP協議算法採集設備信息,能夠經過SNMP採集或者登陸設備採集,優先選擇SNMP採集。當設備不支持SNMP採集時,登陸設備採集。採集全部設備的接口IP地址、掩碼等信息:3d

舉例接口信息採集:對象

[root@localhost ~]# snmpwalk -v 2c -c 1qaz@WSX@ 100.100.100.1 1.3.6.1.2.1.31.1.1.1
ifName ifDescr ifOperStatus
如何利用snmp協議發現大型複雜環境的網絡拓撲(建議開發自動化工具的朋友能夠看一下)
在個人實際環境中,用戶經過接入交換機接入網絡,接入交換機經過匯聚交換機和路由器相連,所以,若是某臺交換機的地址轉發表中只有一個端口含有其它交換機的mac,那麼這臺交換機必定是接入交換機,那個端口必定是上行端口。能夠經過這個條件將交換機分紅接入交換機和匯聚交換機兩個組,先判斷接入交換機與匯聚交換機的鏈接狀況,在判斷匯聚交換機與匯聚交換機的鏈接狀況,能夠減小對比次數。blog

經過SNMP採集或者登陸設備採集,能夠採集到路由器的ARP表或交換機的MAC地址表。獲得如下表格,含義是某個設備的MAC地址,出如今另外一個設備的某個接口上,示意以下。
如何利用snmp協議發現大型複雜環境的網絡拓撲(建議開發自動化工具的朋友能夠看一下)
如何利用snmp協議發現大型複雜環境的網絡拓撲(建議開發自動化工具的朋友能夠看一下)
從設備2層鏈接關係表獲得直接鏈接關係表,能夠用「去除末端法」。定義:「末端設備」,在設備2層鏈接關係表中,只有一個接口與表中其餘設備相連的設備,稱爲「末端設備」。
定理2:在設備2層鏈接關係表中,若是設備甲是「末端設備」,並且設備乙的某個接口,只與設備甲相連,不與其餘設備相連,則設備乙與設備甲直接相連。
操做方法流程圖:
如何利用snmp協議發現大型複雜環境的網絡拓撲(建議開發自動化工具的朋友能夠看一下)
獲得設備2層直接鏈接關係表
如何利用snmp協議發現大型複雜環境的網絡拓撲(建議開發自動化工具的朋友能夠看一下)索引

相關文章
相關標籤/搜索