摘 要:物理拓?fù)浒l(fā)現(xiàn)對于網(wǎng)絡(luò)管理及性能分析具有重要的作用。給出生成樹協(xié)議與地址轉(zhuǎn)發(fā)表相結(jié)合的到主機(jī)的物理拓?fù)浒l(fā)現(xiàn)算法。并針對大部分網(wǎng)絡(luò)設(shè)備是CISCO產(chǎn)品的網(wǎng)絡(luò),提出運(yùn)用CDP協(xié)議和子網(wǎng)內(nèi)ping技術(shù)相結(jié)合的開發(fā)方法。此方法既提高開發(fā)效率又增強(qiáng)了拓?fù)浒l(fā)現(xiàn)的完整性,為進(jìn)一步的網(wǎng)絡(luò)管理提供詳細(xì)的可視化物理拓?fù)浣Y(jié)構(gòu)。
關(guān)鍵詞:物理拓?fù)浒l(fā)現(xiàn);生成樹協(xié)議;地址轉(zhuǎn)發(fā)表;CDP
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼: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 引 言
為了提高局域網(wǎng)的性能,以交換機(jī)互聯(lián)和集群技術(shù)為支撐的交換式局域網(wǎng)\\已經(jīng)成為當(dāng)前局域網(wǎng)互連技術(shù)的主流,物理拓?fù)浣Y(jié)構(gòu)也已成為局域網(wǎng)拓?fù)浒l(fā)現(xiàn)結(jié)構(gòu)的骨干,其目標(biāo)是建立網(wǎng)絡(luò)內(nèi)各種設(shè)備之間的物理連接關(guān)系,從而為快速、高效的網(wǎng)絡(luò)管理提供基礎(chǔ)。
對物理拓?fù)浒l(fā)現(xiàn)而言,雖然IETF于2000年推出物理拓?fù)銶IB(Management Information Base)\\,試圖解決網(wǎng)絡(luò)層以下拓?fù)浣Y(jié)構(gòu)的發(fā)現(xiàn)問題,但是由于沒有確定獲取這些MIB對象的機(jī)制,因此有待更多的研究。目前最常用是利用地址轉(zhuǎn)發(fā)表和生成樹協(xié)議(Spanning Tree Protocol)的方法來獲取物理拓?fù)湫畔?,另外很多廠商開發(fā)了基于數(shù)據(jù)鏈路層的鄰居發(fā)現(xiàn)協(xié)議,如CISCO的CDP(Cisco Discovery Protocol)協(xié)議等,在特定設(shè)備環(huán)境下可以快速高效地進(jìn)行物理拓?fù)浒l(fā)現(xiàn)系統(tǒng)的開發(fā)。
本文結(jié)合地址轉(zhuǎn)發(fā)表和生成樹協(xié)議的特點(diǎn),給出以生成樹協(xié)議為主,地址轉(zhuǎn)發(fā)表為輔的到主機(jī)層次的局域網(wǎng)物理拓?fù)浒l(fā)現(xiàn)算法。并根據(jù)自身局域網(wǎng)的特點(diǎn),選取CDP協(xié)議,運(yùn)用SNMP++軟件包,借助Visual C++ 6.0開發(fā)工具,進(jìn)行主干網(wǎng)物理拓?fù)浒l(fā)現(xiàn)系統(tǒng)的快速開發(fā),并結(jié)合子網(wǎng)內(nèi)ping技術(shù),達(dá)到主機(jī)層次的拓?fù)浒l(fā)現(xiàn),為進(jìn)一步的網(wǎng)絡(luò)管理提供了詳細(xì)的可視化物理拓?fù)浣Y(jié)構(gòu)。
2 物理拓?fù)浒l(fā)現(xiàn)算法的研究
2.1 生成樹協(xié)議與地址轉(zhuǎn)發(fā)表相結(jié)合的算法
目前對于物理拓?fù)浒l(fā)現(xiàn)最常用的辦法是讀取地址轉(zhuǎn)發(fā)表信息,通過分析,找出端口與MAC地址的映射。有冗余連接的網(wǎng)絡(luò)則使用生成樹協(xié)議(Spanning Tree Protocol),使所有位于生成樹葉節(jié)點(diǎn)位置的交換機(jī)僅含有單個網(wǎng)段的端口信息,而它的上一級交換機(jī),則會包含下連交換機(jī)的所有MAC信息,配合根端口、根網(wǎng)橋MAC地址等,獲得拓?fù)渌枰男畔ⅰ?/p>
結(jié)合地址轉(zhuǎn)發(fā)表和生成樹協(xié)議的特點(diǎn),下面分別給出了交換機(jī)與交換機(jī)之間,交換機(jī)與路由器之間以及交換機(jī)與主機(jī)之間的連接關(guān)系的確立。
2.1.1 交換機(jī)與交換機(jī)的連接關(guān)系
SNMP BRIDGE MIBⅡ\\提供實(shí)現(xiàn)生成樹協(xié)議所需的交換機(jī)的MIB變量。算法主要涉及到的MIB變量見表1。
算法的描述如下:
(1) 深度優(yōu)先遍歷管理域中所有設(shè)備,讀取MIB變量sysServices及ipForwarding,若sysServices=2^(2-1)=2并且ipForwarding=2,則判斷該設(shè)備為交換機(jī),將其加入交換機(jī)集合中;
(2) 廣度優(yōu)先遍歷交換機(jī)集合中的每一臺交換機(jī),讀取MIB變量dotldStpDesignatedRoot(指定根網(wǎng)橋),將值相同的歸于同一類,由生成樹協(xié)議可知,它們處于同一交換域。然后在每一個交換域里,找出各交換機(jī)之間的關(guān)系;
(3) 遍歷交換域中每一臺交換機(jī),讀取變量dotldStpRootPort的值,得到其根端口號;
(4) 讀取dotldStpPortDesignatedBridge的值查找根端口對應(yīng)的指定網(wǎng)橋;
(5) 讀取變量dotldStpPortDesignatedPort的值,查找與根端口對應(yīng)的指定端口,從而得到交換機(jī)與交換機(jī)的連接關(guān)系。
2.1.2 交換機(jī)與路由器的連接關(guān)系
(1) 在深度優(yōu)先遍歷管理域中所有設(shè)備讀取sysServices時,若sysServices=2^(3-1)=4,則判斷該設(shè)備為路由器,將其加入路由器集合中;
(2) 讀取路由器ifPhysAddress,獲得所有路由器MAC地址;
(3) 讀取所有交換機(jī)端口地址轉(zhuǎn)發(fā)表dotldTpFdbAddress;
(4) 根據(jù)路由器R與交換機(jī)Si的端口Sij直接連接的充要條件是Sij是直連端口,且Sij的地址轉(zhuǎn)發(fā)表中包含路由器R的MAC地址,判斷交換機(jī)和路由器的連接關(guān)系。
2.1.3 交換機(jī)與主機(jī)之間的連接關(guān)系
(1) 在深度優(yōu)先遍歷管理域中所有設(shè)備讀取sysServices時,若sysServices=2^(4-1)+2 ^(7- 1)=72,則判斷該設(shè)備為主機(jī),將其加入主機(jī)集合中;
(2) 讀取交換機(jī)dotldTpFdbAddress中關(guān)于各端口的地址轉(zhuǎn)發(fā)表,經(jīng)交換機(jī)進(jìn)行數(shù)據(jù)幀轉(zhuǎn)發(fā)和過濾得到端口接入設(shè)備物理地址表;
(3) 讀取交換機(jī)的ipNetMediaTable表中保存所有該設(shè)備轉(zhuǎn)發(fā)數(shù)據(jù)包的MAC地址;
(4) 從上述2表可以導(dǎo)出端口接入設(shè)備信息表。該表包括端口號、IP地址和物理地址,從而得到交換機(jī)與主機(jī)之間的連接關(guān)系。
2.2 基于CDP的算法研究
本文基于網(wǎng)絡(luò)中大部分設(shè)備為CISCO設(shè)備的特點(diǎn),運(yùn)用CDP協(xié)議(Cisco Discovery Protocol)進(jìn)行拓?fù)浒l(fā)現(xiàn),它的特點(diǎn)是發(fā)現(xiàn)和本設(shè)備直接連接的網(wǎng)絡(luò)設(shè)備,并保存相關(guān)設(shè)備的一些基本信息。
CISCOCDPMIB文件中定義了被管理對象,包含所有可以從命令行得到的關(guān)于CDP的信息。在這個MIB文件中,定義了一個表,表示設(shè)備的CDP鄰居所有信息。運(yùn)行期間,表的每一個行實(shí)例表示一臺鄰居設(shè)備。下面列出幾個關(guān)鍵的被管理對象,見表2。
網(wǎng)絡(luò)中的每一條物理連接,兩端的設(shè)備保存有2條獨(dú)立的CDP條目。而確定一個物理連接,
只要一條信息就夠了。約定:任意一個節(jié)點(diǎn),只保存它的父節(jié)點(diǎn)的連接信息,不保存它的子節(jié)點(diǎn)的連接信息,掃描過程如圖1。
3 拓?fù)浒l(fā)現(xiàn)系統(tǒng)的設(shè)計(jì)
因?yàn)楸揪钟蚓W(wǎng)中大部分網(wǎng)絡(luò)設(shè)備是CISCO產(chǎn)品,利用CDP協(xié)議,運(yùn)用SNMP++軟件包,借助Visual C++ 6.0開發(fā)工具,進(jìn)行主干網(wǎng)物理拓?fù)浒l(fā)現(xiàn)系統(tǒng)的快速開發(fā)。
根據(jù)系統(tǒng)實(shí)現(xiàn)的功能,將整個系統(tǒng)分為5個部分:界面、拓?fù)湫畔⒌牟杉?、拓?fù)湫畔⒌奶幚?、拓?fù)鋱D形的繪制以及圖形修正。
3.1 拓?fù)湫畔⒌牟杉?/p>
本模塊首先實(shí)現(xiàn)一個新類MySnmp,利用它完成大部分SNMP操作,其中SNMP++的VC++實(shí)現(xiàn)流程如圖2所示,同時定義幾個主要的數(shù)組與函數(shù),它們的名稱與功能如下:
CStringArray Oid;//保存OID的數(shù)組
CStringArray Value;//保存值的數(shù)組
CString err;//定義錯誤字符串
CString GetOid(int index);//獲得指定索引處的OID的字符串
CString GetValue(int index);//獲得指定索引處的值的字符串
Void clear();//清除數(shù)組
3.2 拓?fù)湫畔⒌奶幚?/p>
該模塊為算法的主要實(shí)現(xiàn)模塊,其中有一個重要的節(jié)點(diǎn)結(jié)構(gòu)體:
struct NodeData
{
CString ip;//節(jié)點(diǎn)的IP地址;
CString sysDescr;//節(jié)點(diǎn)描述;
bool link;//表示節(jié)點(diǎn)是否已有連接關(guān)系;
int level;//表示節(jié)點(diǎn)在網(wǎng)絡(luò)拓?fù)渲兴幍膶哟危?/p>
int position;//表示節(jié)點(diǎn)相對于其他兄弟節(jié)點(diǎn)的位置;
int type;//表示節(jié)點(diǎn)的類型,交換機(jī)或者路由器;
CMyImage *pImage;//指向圖形控件的指針,用于可視化顯示;
};
每條CDP條目處理后分配一個NodeData結(jié)構(gòu)類型變量,在Tree Control中增加一個表示該設(shè)備的節(jié)點(diǎn),節(jié)點(diǎn)data屬性指向NodeData結(jié)構(gòu)類型變量,同時在數(shù)組中保存該節(jié)點(diǎn)的句柄。在和新增加節(jié)點(diǎn)關(guān)聯(lián)的NodeData結(jié)構(gòu)類型變量中,將本次被掃描設(shè)備作為一個鄰居設(shè)備,保存到它的物理連接信息,這樣,每次新增加的節(jié)點(diǎn)保存到它父節(jié)點(diǎn)的連接信息,而父節(jié)點(diǎn)中不保存到子節(jié)點(diǎn)的連接信息,這樣便獲得各個節(jié)點(diǎn)的連接關(guān)系,為后面的圖形化顯示提供依據(jù)。
3.3 拓?fù)鋱D形的繪制
拓?fù)鋱D形不僅能夠靜態(tài)顯示,而且允許設(shè)備的移動,因此在頭文件中需要定義幾個主要變量:
bool move;//控制是否移動的邏輯變量;
int init_x,init_y;//保存原始坐標(biāo)位置,設(shè)備移動時使用;
CPoint Pos;//坐標(biāo)位置信息,繪制連接線時使用;
CString ip;//表示網(wǎng)絡(luò)設(shè)備的IP地址;
HTREEITEM HSelf;//表示設(shè)備在生成樹中節(jié)點(diǎn)的句柄;
同時定義OnPaint( )函數(shù),在設(shè)備圖標(biāo)被拖動、顯示窗體被移動后,重新繪制各個圖形控件之間的連接線,以保持正確的圖形。
3.4 圖形修正
獲取的網(wǎng)絡(luò)拓?fù)湫畔⒖赡艽嬖谄?,如設(shè)備遺漏和設(shè)備重復(fù),因此圖形修正可以通過增加設(shè)備和合并設(shè)備來完成,其流程如圖3所示。
4 主干網(wǎng)系統(tǒng)實(shí)現(xiàn)情況
使用Visual C++ 6.0開發(fā)工具,進(jìn)行的主干網(wǎng)物理拓?fù)浒l(fā)現(xiàn)系統(tǒng)的實(shí)現(xiàn)情況如圖4所示,左邊為樹狀關(guān)系列表,右邊為圖形化顯示。該主干網(wǎng)物理拓?fù)浒l(fā)現(xiàn)系統(tǒng)實(shí)現(xiàn)了對本校園局域網(wǎng)內(nèi)所有主干網(wǎng)絡(luò)設(shè)備的拓?fù)浒l(fā)現(xiàn)。
5 子網(wǎng)內(nèi)ping功能的研究與實(shí)現(xiàn)
上述系統(tǒng)實(shí)現(xiàn)了對網(wǎng)絡(luò)主干設(shè)備的物理拓?fù)浒l(fā)現(xiàn),在此基礎(chǔ)上結(jié)合ICMP協(xié)議的ping功能,可以實(shí)現(xiàn)主機(jī)的檢測,以加強(qiáng)網(wǎng)絡(luò)拓?fù)涞耐暾浴?/p>
對網(wǎng)絡(luò)中骨干設(shè)備在適當(dāng)?shù)臅r機(jī)進(jìn)行子網(wǎng)搜索,以獲取子網(wǎng)內(nèi)其他活動設(shè)備的地址、類型及狀態(tài)等信息。最直接有效的方法便是群ping某網(wǎng)段,以獲得該網(wǎng)段的主機(jī)信息。使用異步過程調(diào)用技術(shù)[4](APC)并基于微軟庫函數(shù)IcmpSendEcho2的實(shí)現(xiàn)方式流程圖如圖5所示。
某子網(wǎng)段的群ping結(jié)果圖6所示。
6 結(jié) 語
物理網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)對于網(wǎng)絡(luò)管理以及網(wǎng)絡(luò)性能分析具有重要的作用,本文給出以生成樹協(xié)議為主,地址轉(zhuǎn)發(fā)表為輔的到主機(jī)的局域網(wǎng)物理拓?fù)浒l(fā)現(xiàn)算法,并根據(jù)自身局域網(wǎng)的特點(diǎn),選取CDP協(xié)議完成自身局域網(wǎng)拓?fù)浒l(fā)現(xiàn)系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn),且結(jié)合子網(wǎng)內(nèi)ping功能,實(shí)現(xiàn)了到主機(jī)層次的檢測,使網(wǎng)絡(luò)拓?fù)涞耐暾源蟠蠹訌?qiáng),為進(jìn)一步的網(wǎng)絡(luò)管理提供了詳細(xì)的可視化物理拓?fù)浣Y(jié)構(gòu)。
參 考 文 獻(xiàn)
[1]Andrew S Tanenbaum.計(jì)算機(jī)網(wǎng)絡(luò)[M].3版.熊桂喜,譯.北京:清華大學(xué)出版社,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網(wǎng)絡(luò)的物理拓?fù)渥詣影l(fā)現(xiàn)算法[J].小型微型計(jì)算機(jī)系統(tǒng),2006,27(1):1721.
作者簡介 崔婧昱 女,1983年出生,碩士研究生。研究方向?yàn)榫W(wǎng)絡(luò)與數(shù)據(jù)庫。