摘 要:物理拓撲發現對于網絡管理及性能分析具有重要的作用。給出生成樹協議與地址轉發表相結合的到主機的物理拓撲發現算法。并針對大部分網絡設備是CISCO產品的網絡,提出運用CDP協議和子網內ping技術相結合的開發方法。此方法既提高開發效率又增強了拓撲發現的完整性,為進一步的網絡管理提供詳細的可視化物理拓撲結構。
關鍵詞:物理拓撲發現;生成樹協議;地址轉發表;CDP
中圖分類號:TP393 文獻標識碼:B 文章編號:1004373X(2008)1809703
Research and Design of Physical Topology Discovery System in Switched LAN
CUI Jingyu,DONG Xiaoguo
(College of Information Science and Technology,Beijing University of Chemical Technology,Beijing,100029,China)
Abstract:Physical topology discovery for network management and performance analysis has an important role to play.This paper proposes hostlevel algorithm combining Spanning Tree Protocol(STP) and Address Forwarding Table(AFT).For the environment mainly networked by CISCO equipments,this paper introduces a development method combining CDP and subnet ping technology.This method not only improves the efficiency of development but also enhances the integrity of topology discovery,for further network management provides detailed visual physical topology.
Keywords:physical topology discovery;spanning tree protocol;address forwarding table;CDP
1 引 言
為了提高局域網的性能,以交換機互聯和集群技術為支撐的交換式局域網\\已經成為當前局域網互連技術的主流,物理拓撲結構也已成為局域網拓撲發現結構的骨干,其目標是建立網絡內各種設備之間的物理連接關系,從而為快速、高效的網絡管理提供基礎。
對物理拓撲發現而言,雖然IETF于2000年推出物理拓撲MIB(Management Information Base)\\,試圖解決網絡層以下拓撲結構的發現問題,但是由于沒有確定獲取這些MIB對象的機制,因此有待更多的研究。目前最常用是利用地址轉發表和生成樹協議(Spanning Tree Protocol)的方法來獲取物理拓撲信息,另外很多廠商開發了基于數據鏈路層的鄰居發現協議,如CISCO的CDP(Cisco Discovery Protocol)協議等,在特定設備環境下可以快速高效地進行物理拓撲發現系統的開發。
本文結合地址轉發表和生成樹協議的特點,給出以生成樹協議為主,地址轉發表為輔的到主機層次的局域網物理拓撲發現算法。并根據自身局域網的特點,選取CDP協議,運用SNMP++軟件包,借助Visual C++ 6.0開發工具,進行主干網物理拓撲發現系統的快速開發,并結合子網內ping技術,達到主機層次的拓撲發現,為進一步的網絡管理提供了詳細的可視化物理拓撲結構。
2 物理拓撲發現算法的研究
2.1 生成樹協議與地址轉發表相結合的算法
目前對于物理拓撲發現最常用的辦法是讀取地址轉發表信息,通過分析,找出端口與MAC地址的映射。有冗余連接的網絡則使用生成樹協議(Spanning Tree Protocol),使所有位于生成樹葉節點位置的交換機僅含有單個網段的端口信息,而它的上一級交換機,則會包含下連交換機的所有MAC信息,配合根端口、根網橋MAC地址等,獲得拓撲所需要的信息。
結合地址轉發表和生成樹協議的特點,下面分別給出了交換機與交換機之間,交換機與路由器之間以及交換機與主機之間的連接關系的確立。
2.1.1 交換機與交換機的連接關系
SNMP BRIDGE MIBⅡ\\提供實現生成樹協議所需的交換機的MIB變量。算法主要涉及到的MIB變量見表1。

算法的描述如下:
(1) 深度優先遍歷管理域中所有設備,讀取MIB變量sysServices及ipForwarding,若sysServices=2^(2-1)=2并且ipForwarding=2,則判斷該設備為交換機,將其加入交換機集合中;
(2) 廣度優先遍歷交換機集合中的每一臺交換機,讀取MIB變量dotldStpDesignatedRoot(指定根網橋),將值相同的歸于同一類,由生成樹協議可知,它們處于同一交換域。然后在每一個交換域里,找出各交換機之間的關系;
(3) 遍歷交換域中每一臺交換機,讀取變量dotldStpRootPort的值,得到其根端口號;
(4) 讀取dotldStpPortDesignatedBridge的值查找根端口對應的指定網橋;
(5) 讀取變量dotldStpPortDesignatedPort的值,查找與根端口對應的指定端口,從而得到交換機與交換機的連接關系。
2.1.2 交換機與路由器的連接關系
(1) 在深度優先遍歷管理域中所有設備讀取sysServices時,若sysServices=2^(3-1)=4,則判斷該設備為路由器,將其加入路由器集合中;
(2) 讀取路由器ifPhysAddress,獲得所有路由器MAC地址;
(3) 讀取所有交換機端口地址轉發表dotldTpFdbAddress;
(4) 根據路由器R與交換機Si的端口Sij直接連接的充要條件是Sij是直連端口,且Sij的地址轉發表中包含路由器R的MAC地址,判斷交換機和路由器的連接關系。
2.1.3 交換機與主機之間的連接關系
(1) 在深度優先遍歷管理域中所有設備讀取sysServices時,若sysServices=2^(4-1)+2 ^(7- 1)=72,則判斷該設備為主機,將其加入主機集合中;
(2) 讀取交換機dotldTpFdbAddress中關于各端口的地址轉發表,經交換機進行數據幀轉發和過濾得到端口接入設備物理地址表;
(3) 讀取交換機的ipNetMediaTable表中保存所有該設備轉發數據包的MAC地址;
(4) 從上述2表可以導出端口接入設備信息表。該表包括端口號、IP地址和物理地址,從而得到交換機與主機之間的連接關系。
2.2 基于CDP的算法研究
本文基于網絡中大部分設備為CISCO設備的特點,運用CDP協議(Cisco Discovery Protocol)進行拓撲發現,它的特點是發現和本設備直接連接的網絡設備,并保存相關設備的一些基本信息。
CISCOCDPMIB文件中定義了被管理對象,包含所有可以從命令行得到的關于CDP的信息。在這個MIB文件中,定義了一個表,表示設備的CDP鄰居所有信息。運行期間,表的每一個行實例表示一臺鄰居設備。下面列出幾個關鍵的被管理對象,見表2。

網絡中的每一條物理連接,兩端的設備保存有2條獨立的CDP條目。而確定一個物理連接,
只要一條信息就夠了。約定:任意一個節點,只保存它的父節點的連接信息,不保存它的子節點的連接信息,掃描過程如圖1。

3 拓撲發現系統的設計
因為本局域網中大部分網絡設備是CISCO產品,利用CDP協議,運用SNMP++軟件包,借助Visual C++ 6.0開發工具,進行主干網物理拓撲發現系統的快速開發。
根據系統實現的功能,將整個系統分為5個部分:界面、拓撲信息的采集、拓撲信息的處理、拓撲圖形的繪制以及圖形修正。
3.1 拓撲信息的采集
本模塊首先實現一個新類MySnmp,利用它完成大部分SNMP操作,其中SNMP++的VC++實現流程如圖2所示,同時定義幾個主要的數組與函數,它們的名稱與功能如下:
CStringArray Oid;//保存OID的數組
CStringArray Value;//保存值的數組
CString err;//定義錯誤字符串
CString GetOid(int index);//獲得指定索引處的OID的字符串
CString GetValue(int index);//獲得指定索引處的值的字符串
Void clear();//清除數組

3.2 拓撲信息的處理
該模塊為算法的主要實現模塊,其中有一個重要的節點結構體:
struct NodeData
{
CString ip;//節點的IP地址;
CString sysDescr;//節點描述;
bool link;//表示節點是否已有連接關系;
int level;//表示節點在網絡拓撲中所處的層次;
int position;//表示節點相對于其他兄弟節點的位置;
int type;//表示節點的類型,交換機或者路由器;
CMyImage *pImage;//指向圖形控件的指針,用于可視化顯示;
};
每條CDP條目處理后分配一個NodeData結構類型變量,在Tree Control中增加一個表示該設備的節點,節點data屬性指向NodeData結構類型變量,同時在數組中保存該節點的句柄。在和新增加節點關聯的NodeData結構類型變量中,將本次被掃描設備作為一個鄰居設備,保存到它的物理連接信息,這樣,每次新增加的節點保存到它父節點的連接信息,而父節點中不保存到子節點的連接信息,這樣便獲得各個節點的連接關系,為后面的圖形化顯示提供依據。
3.3 拓撲圖形的繪制
拓撲圖形不僅能夠靜態顯示,而且允許設備的移動,因此在頭文件中需要定義幾個主要變量:
bool move;//控制是否移動的邏輯變量;
int init_x,init_y;//保存原始坐標位置,設備移動時使用;
CPoint Pos;//坐標位置信息,繪制連接線時使用;
CString ip;//表示網絡設備的IP地址;
HTREEITEM HSelf;//表示設備在生成樹中節點的句柄;
同時定義OnPaint( )函數,在設備圖標被拖動、顯示窗體被移動后,重新繪制各個圖形控件之間的連接線,以保持正確的圖形。
3.4 圖形修正
獲取的網絡拓撲信息可能存在偏差,如設備遺漏和設備重復,因此圖形修正可以通過增加設備和合并設備來完成,其流程如圖3所示。

4 主干網系統實現情況
使用Visual C++ 6.0開發工具,進行的主干網物理拓撲發現系統的實現情況如圖4所示,左邊為樹狀關系列表,右邊為圖形化顯示。該主干網物理拓撲發現系統實現了對本校園局域網內所有主干網絡設備的拓撲發現。

5 子網內ping功能的研究與實現
上述系統實現了對網絡主干設備的物理拓撲發現,在此基礎上結合ICMP協議的ping功能,可以實現主機的檢測,以加強網絡拓撲的完整性。
對網絡中骨干設備在適當的時機進行子網搜索,以獲取子網內其他活動設備的地址、類型及狀態等信息。最直接有效的方法便是群ping某網段,以獲得該網段的主機信息。使用異步過程調用技術[4](APC)并基于微軟庫函數IcmpSendEcho2的實現方式流程圖如圖5所示。
某子網段的群ping結果圖6所示。

6 結 語
物理網絡拓撲發現對于網絡管理以及網絡性能分析具有重要的作用,本文給出以生成樹協議為主,地址轉發表為輔的到主機的局域網物理拓撲發現算法,并根據自身局域網的特點,選取CDP協議完成自身局域網拓撲發現系統的設計和實現,且結合子網內ping功能,實現了到主機層次的檢測,使網絡拓撲的完整性大大加強,為進一步的網絡管理提供了詳細的可視化物理拓撲結構。
參 考 文 獻
[1]Andrew S Tanenbaum.計算機網絡[M].3版.熊桂喜,譯.北京:清華大學出版社,1998.
[2]Bierman A,Jones K.RFC 2922.Physical Topology MIB [S].2000.
[3]Decker E,Langille P.Definitions of Managed Objects for Bridges[S].RFC 1493,1993.
[4]鄭洪方,王玉峰,王光興,等.基于IP網絡的物理拓撲自動發現算法[J].小型微型計算機系統,2006,27(1):1721.
作者簡介 崔婧昱 女,1983年出生,碩士研究生。研究方向為網絡與數據庫。