摘 要: SNMP協(xié)議被廣泛用于網(wǎng)絡(luò)設(shè)備的監(jiān)控中,,面向SNMP的成熟網(wǎng)絡(luò)管理框架依然非常少見(jiàn),。以軟件的通用性和實(shí)用性為出發(fā)點(diǎn),兼顧軟件的可擴(kuò)展性,設(shè)計(jì)了具有管理產(chǎn)品所具有的網(wǎng)絡(luò)信息捕獲功能,,且可利用插件式的機(jī)制擴(kuò)展系統(tǒng)應(yīng)用范圍,。提出了自動(dòng)拓?fù)?/a>布局算法,以自動(dòng)拓?fù)浒l(fā)現(xiàn)為核心,,充分簡(jiǎn)化基本的網(wǎng)絡(luò)管理任務(wù),,識(shí)別大部分網(wǎng)絡(luò)設(shè)備??紤]在Linux平臺(tái)及x64架構(gòu)下的兼容性,最后成功編譯與部署,,模擬和真實(shí)的測(cè)試表明,,系統(tǒng)具有很好的執(zhí)行性能。
關(guān)鍵詞: 簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議,;自動(dòng)拓?fù)?;布局算法;存?chǔ)模型
簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議SNMP(Simple Network Management Protocol)是為網(wǎng)絡(luò)管理系統(tǒng)提供的底層網(wǎng)絡(luò)管理的框架,。其應(yīng)用范圍非常廣泛,,諸多種類(lèi)的網(wǎng)絡(luò)設(shè)備、軟件和系統(tǒng)中都有所采用,。SNMP協(xié)議發(fā)展到目前的第3版,,已經(jīng)成為一個(gè)非常成熟的網(wǎng)絡(luò)管理協(xié)議[1]。不過(guò)由于每個(gè)設(shè)備的支持程序有所不同,,所以面向SNMP的成熟網(wǎng)絡(luò)管理框架依然非常少見(jiàn)[2],。在SNMP的支持方面,Cisco是走在最前沿的[3],,除了完整地支持RFC1213中MIB-2的定義外,,還在部分設(shè)備中支持RFC2819和RFC2021中的RMON?;贑isco的主流性,,開(kāi)發(fā)“可擴(kuò)展”的基于SNMP的網(wǎng)絡(luò)管理框架變得非常現(xiàn)實(shí),。
1 開(kāi)發(fā)平臺(tái)與架構(gòu)的選擇
.NET平臺(tái)的C#語(yǔ)言有著豐富的語(yǔ)言特性,,例如Lambda表達(dá)式(在Auto-Topology控件及軟件框架中已多次使用)可以顯著地提升開(kāi)發(fā)效率,而且支持C#的官方開(kāi)發(fā)環(huán)境Visual Studio是公認(rèn)的更加有助于團(tuán)隊(duì)協(xié)作的集成開(kāi)發(fā)環(huán)境,。再者,,C#中匿名對(duì)象、對(duì)象初始化器,、閉包支持LINQ等利于DSL表現(xiàn)的特性,,加之良好的異步編程支持,使C#成為了首選語(yǔ)言,自然,,首選的平臺(tái)則為.NET,。
軟件必須面對(duì)的兩個(gè)基本問(wèn)題是“通用性”與“可擴(kuò)展性”。所謂通用性,,就是在絕大多數(shù)的網(wǎng)絡(luò)環(huán)境中都能夠使用的基本功能,;所謂可擴(kuò)展性,就是在保證通用的前提下,,充分發(fā)揮特有設(shè)備特別功能的能力,。這使得通用框架的設(shè)計(jì)難度加大。
如何使網(wǎng)絡(luò)管理任務(wù)充分簡(jiǎn)化是需要重點(diǎn)考慮的,,軟件的工作方式將會(huì)影響操作的行為,,C/S結(jié)構(gòu)或者純粹的單體軟件無(wú)疑有著更為強(qiáng)大的圖形展現(xiàn)能力,而B(niǎo)/S結(jié)構(gòu)則在伸縮性與跨平臺(tái)方面有著更為良好的表現(xiàn),。一個(gè)較為折衷并且有經(jīng)濟(jì)效益的選擇,,就是在框架級(jí)別實(shí)現(xiàn)通用與跨平臺(tái),在表現(xiàn)層分離為不同的解決方案,。最終,,軟件采用了普通軟件的工作方式。
雖然可以自主開(kāi)發(fā)SNMP底層的通訊類(lèi)庫(kù)來(lái)支持整個(gè)項(xiàng)目,,但考慮到開(kāi)發(fā)周期等因素,,還是尋求一款更為優(yōu)秀的開(kāi)源組件來(lái)承擔(dān)基礎(chǔ)通訊。有兩款開(kāi)源組件可供選擇:SnmpSharpNet和SharpSnmpLib,。在仔細(xì)研究了這兩款組件后發(fā)現(xiàn),,SharpSnmpLib更新頻率更高,而且代碼更加利于維護(hù),,于是選擇SharpSnmpLib來(lái)支持開(kāi)發(fā),。
2 系統(tǒng)分析
2.1 重點(diǎn)問(wèn)題
由于SNMP協(xié)議在不同的設(shè)備上支持的情況不同,所以要求軟件的一些通用功能兼容大部分設(shè)備,,這是很有挑戰(zhàn)的,。常見(jiàn)的網(wǎng)絡(luò)管理任務(wù)基本都建立在以拓?fù)鋱D為藍(lán)本的擴(kuò)展之上,所以無(wú)論設(shè)備如何不同,、協(xié)議支持情況有多復(fù)雜,,自動(dòng)網(wǎng)絡(luò)拓?fù)浒l(fā)現(xiàn)功能是一個(gè)不能缺少的核心功能。如何在兼容常見(jiàn)設(shè)備的基礎(chǔ)上實(shí)現(xiàn)擴(kuò)展功能成為研究的重點(diǎn)問(wèn)題,。
2.1.1 與現(xiàn)有的大部分硬件設(shè)備保持兼容
與其說(shuō)實(shí)現(xiàn)兼容,,倒不如理解為只使用大部分硬件都能支持的功能來(lái)實(shí)現(xiàn)。一個(gè)顯而易見(jiàn)的解決方案就是只使用RFC1213中定義的MIB-2功能組,。MIB-2中定義了網(wǎng)絡(luò)管理中經(jīng)常使用的對(duì)象,,并且得到了絕大多數(shù)設(shè)備的支持,。如果只使用MIB-2中定義的功能來(lái)支撐軟件的核心功能,那么軟件與硬件的兼容性問(wèn)題自然也會(huì)少很多,。
2.1.2 通過(guò)SNMP的方式得到網(wǎng)絡(luò)拓?fù)?/strong>
SNMP協(xié)議的相關(guān)功能中沒(méi)有直接獲取拓?fù)浣Y(jié)構(gòu)的對(duì)象,,在一些私有MIB中(例如Cisco中關(guān)于CDP的相關(guān)對(duì)象)有這樣直接的功能,但是對(duì)網(wǎng)絡(luò)環(huán)境與設(shè)備要求苛刻(CDP協(xié)議只在純Cisco網(wǎng)絡(luò)中有用,,雖然有部分非Cisco開(kāi)始支持CDP,,但是數(shù)量很少)[4],所以這不是一個(gè)通用的解決方案,。
為了保持設(shè)備和網(wǎng)絡(luò)的兼容性,,前面提到應(yīng)該采用“保守”的對(duì)象來(lái)實(shí)現(xiàn)核心功能,所以拓?fù)鋱D的自動(dòng)發(fā)現(xiàn)只能從MIB-2中查找相應(yīng)的解決方案,。網(wǎng)絡(luò)拓?fù)?,顧名思義就是網(wǎng)絡(luò)設(shè)備之間的邏輯關(guān)系,那么反映到網(wǎng)絡(luò)技術(shù)中,,最為直接的對(duì)應(yīng)就是路由表,。但是路由表中只有網(wǎng)絡(luò)設(shè)備間的關(guān)系,,支持SNMP的PC信息卻不在路由表中,。如何解決支持SNMP的PC發(fā)現(xiàn)呢?一個(gè)方案就是查找網(wǎng)絡(luò)設(shè)備中的“地址轉(zhuǎn)換表”,,這其中有PC的IP信息,,通過(guò)對(duì)這些PC逐一進(jìn)行SNMP測(cè)試,就可完整地支持整個(gè)SNMP網(wǎng)絡(luò)[5],。另外,,需要知道設(shè)備自身接口的IP,這在MIB-2的IP功能組(1.3.6.1.2.1.4)中都有定義,。
2.2 難點(diǎn)問(wèn)題
2.2.1 拓?fù)鋱D的布局
拓?fù)鋱D的機(jī)制確定之后,,另一個(gè)難題就是如何將各個(gè)設(shè)備以及相關(guān)線路布置在屏幕上。由于設(shè)備之間的唯一關(guān)系就是相互間的鏈路,,沒(méi)有與物理結(jié)構(gòu)相關(guān)的數(shù)據(jù)可以獲得,,所以要想完全通過(guò)軟件繪制出與物理結(jié)構(gòu)相同或相似的拓?fù)鋱D是非常困難的,可以參考的相關(guān)資料和論文非常少[6],。
拓?fù)鋱D的分布是個(gè)學(xué)術(shù)難題,,環(huán)狀權(quán)值分布僅作為一種理論嘗試,為了今后有更好的理論支撐,,可以靈活地修改布局算法,,軟件在開(kāi)發(fā)過(guò)程中采用“策略模式”(Strategy)將布局算法抽象出來(lái),易于替換,。
2.2.2 映射領(lǐng)域模型到存儲(chǔ)模型
領(lǐng)域模型記錄了一個(gè)系統(tǒng)中的關(guān)鍵概念和詞匯表,,顯示出了系統(tǒng)中的主要實(shí)體之間的關(guān)系,并確定了它們的重要方法和屬性。對(duì)于一個(gè)SNMP應(yīng)用系統(tǒng)來(lái)說(shuō),,主要的領(lǐng)域模型就是SNMP實(shí)體,。另外一個(gè)擴(kuò)展功能就是對(duì)網(wǎng)絡(luò)設(shè)備的“管理”,這涉及到資產(chǎn)評(píng)估,、設(shè)備統(tǒng)計(jì),、維修管理等相關(guān)的應(yīng)用,換句話講,,如何將軟件獲取到的信息與現(xiàn)實(shí)中的設(shè)備對(duì)應(yīng)起來(lái),,是軟件需要解決的一個(gè)方面。
3 總體描述及框架設(shè)計(jì)
3.1 系統(tǒng)核心
系統(tǒng)實(shí)現(xiàn)所涉及的核心問(wèn)題分別如下:
(1)如何獲取和繪制拓?fù)浣Y(jié)構(gòu)圖,,并合理地調(diào)整拓?fù)錁邮剑?br />
(2)同步引擎的合理調(diào)度,,以及信息存儲(chǔ)結(jié)構(gòu);
(3)功能的合理分類(lèi),,以及對(duì)相關(guān)OID的分析,、組織、建模,;
(4)基礎(chǔ)構(gòu)建塊的選擇,。
由于系統(tǒng)采用了分層開(kāi)發(fā),以及可擴(kuò)展性等多方面的考慮,,軟件在邏輯上分為4層——持久層,、基礎(chǔ)層、業(yè)務(wù)層,、表示層,,基本的工作模式如圖1所示。
3.2 存儲(chǔ)模型
存儲(chǔ)模型為“設(shè)備管理”以及相關(guān)的擴(kuò)展應(yīng)用提供持久化的機(jī)制,,并為統(tǒng)計(jì),、分析等要求查詢(xún)對(duì)比歷史數(shù)據(jù)的需求提供基礎(chǔ)。
對(duì)于數(shù)據(jù)庫(kù)的選擇,,從成本上考慮,,有Microsoft SQL Server Express、Microsoft SQL CE,、MongoDB,、NoSQL可供選擇,而從部署上考慮有MongoDB,、部分NoSQL,、Microsoft SQL CE可選擇,最后從性能上考慮,,采用Microsoft SQL CE來(lái)支持存儲(chǔ)模型,。
經(jīng)過(guò)持久后的數(shù)據(jù)可以在相對(duì)固定的時(shí)間內(nèi)有效,,在此基礎(chǔ)上,進(jìn)行統(tǒng)計(jì),、跟蹤,、分析等功能就會(huì)迅速許多,同時(shí),,網(wǎng)絡(luò)的負(fù)荷也會(huì)明顯降低,。
3.3 領(lǐng)域邏輯設(shè)計(jì)
系統(tǒng)與SNMP網(wǎng)絡(luò)交互的主要邏輯依賴(lài)于SNMP協(xié)議所傳輸?shù)腟NMP對(duì)象數(shù)據(jù),SNMP對(duì)象又依賴(lài)于相關(guān)的MIB來(lái)描述其特性與結(jié)構(gòu),。軟件所需要的領(lǐng)域邏輯主要集中在對(duì)SNMP實(shí)體的操作上,,但是SNMP的操作是對(duì)程序不友好的。也就是說(shuō),,無(wú)法通過(guò)流暢的API來(lái)操作SNMP使之為軟件所用,。所以需要設(shè)計(jì)一種領(lǐng)域邏輯,將SNMP的特定領(lǐng)域轉(zhuǎn)化為程序友好的領(lǐng)域,??紤]圖2所示的領(lǐng)域轉(zhuǎn)化。
SNMP的操作原語(yǔ)被轉(zhuǎn)化為對(duì)應(yīng)的編程概念,,使SNMP的領(lǐng)域完整地轉(zhuǎn)化為程序設(shè)計(jì)的領(lǐng)域,。這為AOP編程以及存儲(chǔ)模型的擴(kuò)展奠定了基礎(chǔ)。
4 系統(tǒng)實(shí)現(xiàn)
4.1 環(huán)狀權(quán)值分布
拓?fù)鋱D的排序算法被叫“環(huán)狀權(quán)值分布”,,主要是因?yàn)橐肓嗽O(shè)備在網(wǎng)絡(luò)中 “權(quán)重”的概念,。由于布局的主要目的是讓主要設(shè)備能夠分布且合理定位在屏幕上,,所以拓?fù)洳季值乃惴ㄊ紫仁钦页瞿切?ldquo;權(quán)重”最高的設(shè)備,,并依此排序進(jìn)行設(shè)備定位。算法主要的步驟有:
(1)設(shè)備按“權(quán)重”排序,。系統(tǒng)主要面向的是路由及交換設(shè)備,,所以對(duì)拓?fù)鋱D最為敏感的信息就是“路由”信息。如果一個(gè)設(shè)備核心的路由數(shù)量高于其他的設(shè)備,,則該設(shè)備就是所謂的“核心設(shè)備”,。
(2)最高權(quán)重優(yōu)先定位。步驟(1)已經(jīng)確定了最為核心的設(shè)備以及按“權(quán)值”排序后的設(shè)備分組,。最為核心的設(shè)備是第一組,,它們將以屏幕正中央為圓心,均勻分布在某個(gè)半徑的圓圈上,。半徑的確定取決于要定位的設(shè)備數(shù)量,,數(shù)量越多半徑值越大。當(dāng)這些設(shè)備定位結(jié)束時(shí),,也就確定了此設(shè)備在屏幕中心點(diǎn)的角度(∠θ),,此角度將作為下個(gè)步驟定位的依據(jù),。
(3)“衛(wèi)星”設(shè)備布局。與核心設(shè)備相聯(lián)接的設(shè)備都?xì)w類(lèi)為該核心設(shè)備的衛(wèi)星設(shè)備,, “衛(wèi)星”設(shè)備的具體分布算法如下:
假定有n個(gè)核心設(shè)備,,那么每個(gè)核心設(shè)備的衛(wèi)星設(shè)備只可以分布在360/n的扇形范圍內(nèi),如圖3所示,。
圖3中有3個(gè)核心設(shè)備,,被分為A、B,、C三個(gè)扇形區(qū)域,,以R2為例,它的3個(gè)衛(wèi)星設(shè)備就分布在B區(qū)域,,且在B扇形內(nèi)根據(jù)∠θ均勻分布,,半徑會(huì)以衛(wèi)星設(shè)備的數(shù)量作相應(yīng)的修正。
(4)繪制鏈路連線,。核心設(shè)備區(qū)域的連線允許交錯(cuò),,因?yàn)檫@部分的連線幾乎不太可能做到不交叉。由于分布是基于環(huán)的,,所以連線即便有交錯(cuò),,問(wèn)題也不會(huì)很?chē)?yán)重。衛(wèi)星設(shè)備的連線主要是對(duì)上一個(gè)設(shè)備的,,這種情況下可以直連,,如果衛(wèi)星設(shè)備之間有連線,則可對(duì)衛(wèi)星設(shè)備的布局會(huì)做一些小調(diào)整,,盡量不出現(xiàn)連線的過(guò)度交叉,。
此時(shí)如果發(fā)現(xiàn)x設(shè)備與z設(shè)備間有連線,就會(huì)根據(jù)屏幕上的空間對(duì)x或z的位置做一些小的調(diào)整,,以讓x與z的連線分布得更為合理,。
4.2 MIB模塊的實(shí)現(xiàn)
為命名方便,基于簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議的網(wǎng)絡(luò)監(jiān)控系統(tǒng)簡(jiǎn)稱(chēng)為SNMS,。根據(jù)MIB的命名方式,,在1.3.6.1.4.1節(jié)點(diǎn)下自定義了一個(gè)名為T(mén)ute(888)的節(jié)點(diǎn),在該節(jié)點(diǎn)下定義SNMS(1)節(jié)點(diǎn),。
定義了MIB中的對(duì)象標(biāo)識(shí)符以后,,就需要對(duì)軟件只能夠涉及到的、需要管理的對(duì)象進(jìn)行劃分,,在此,,將SNMS這個(gè)系統(tǒng)分為system、user和file三部分,,分別定義為system(1),、user(2)和file(3),,如圖4所示。
4.3 Trap模塊的實(shí)現(xiàn)
為了使軟件在設(shè)備出現(xiàn)事件時(shí)能得到通知,,在SNMP這個(gè)背景下就意味著需要一種能夠接收Trap的機(jī)制,。設(shè)備在自己所能夠支持的事件范圍內(nèi),通過(guò)定義不同含義的Trap報(bào)文,,按照設(shè)備自身所配置的接收對(duì)象將Trap發(fā)送出去,。
4.3.1 統(tǒng)一偵聽(tīng)Trap版本
SNMP協(xié)議不同的版本對(duì)應(yīng)著不同的Trap格式。然而對(duì)SNMS自身來(lái)說(shuō),,這些Trap的版本并沒(méi)有什么意義,,軟件所需要的僅僅是必要的標(biāo)識(shí)和對(duì)應(yīng)標(biāo)識(shí)的意義。所以需要一種機(jī)制將這些版本的Trap進(jìn)行統(tǒng)一,。
軟件采用的方式是使用中間層來(lái)代理,。使用TrapMonitor來(lái)偵聽(tīng)所有版本的Trap,通過(guò)不同的處理最終觸
發(fā)TrapComing事件,,并將處理之后生成的TrapInfoEventArgs傳入,,供訂閱者使用。
4.3.2 Trap信息翻譯
Trap包含的信息成百上千,,若都由軟件來(lái)解析其信息將是一件非常耗時(shí)且龐大的工程,。況且由于SNMP自身的可擴(kuò)展性,軟件無(wú)法預(yù)測(cè)其后出現(xiàn)的新Trap定義,,所以考慮這樣一種機(jī)制:對(duì)Trap進(jìn)行建模,,將其核心抽象為一種可擴(kuò)展可配置的模式。
這種機(jī)制使得軟件可以輕松適應(yīng)不同的場(chǎng)景,,而且部署起來(lái)也很方便,。軟件自身也集成了Trap信息的配置功能,可以避免手動(dòng)接觸XML文件,。
4.3.3 Trap過(guò)濾
如何過(guò)濾出有用的Trap信息非常關(guān)鍵,,這是由系統(tǒng)的“管理”性質(zhì)決定的,。系統(tǒng)決定采用一種類(lèi)似于網(wǎng)絡(luò)ACL的做法,,提出了白名單和黑名單的過(guò)濾模式。類(lèi)似于Trap信息翻譯,,系統(tǒng)也采用了基于XML的做法,,將過(guò)濾規(guī)則保存在更加靈活部署的XML文件中。這里白名單是指所有Trap到達(dá)后只顯示名單中規(guī)則匹配的Trap,;黑名單是指所有Trap到達(dá)后不顯示規(guī)則匹配的Trap,。
5 測(cè)試及部署
最終的測(cè)試環(huán)境選用了最為常用的網(wǎng)絡(luò)設(shè)備——中型路由式數(shù)據(jù)交換網(wǎng)絡(luò)。環(huán)境使用5臺(tái)Cisco 7200路由器與7臺(tái)Cisco 3640交換機(jī)搭建,,并配置了相關(guān)的路由協(xié)議,,最后開(kāi)啟SNMP功能和Trap功能,。
系統(tǒng)對(duì)“中型路由式數(shù)據(jù)交換網(wǎng)絡(luò)”環(huán)境進(jìn)行拓?fù)浒l(fā)現(xiàn),測(cè)試效果如圖5所示,。
圖6是在一個(gè)真實(shí)網(wǎng)絡(luò)環(huán)境中進(jìn)行系統(tǒng)測(cè)試得到的網(wǎng)絡(luò)拓?fù)洹?/p>
作為基于SNMP的上層應(yīng)用軟件系統(tǒng),,軟件除了實(shí)現(xiàn)核心的拓?fù)浒l(fā)現(xiàn)機(jī)制與拓?fù)洳季滞猓€不斷地完善軟件框架,,使其能適應(yīng)不同的上層開(kāi)發(fā),。軟件理想的演進(jìn)路線是做成一個(gè)基于SNMP的基礎(chǔ)框架,在此框架之上可以不斷地?cái)U(kuò)充應(yīng)用,。由于SNMP協(xié)議本身的成熟性,,這種需求的框架有著很大的潛力。
參考文獻(xiàn)
[1] SHIVA S J,,DAMODAR P,,VISHAL K S.SNMP over SIP for Network management[J].IEEE/IFIP Network Operations and Management Sym- posium,2004,,1(19-23):881-882.
[2] Liu Jianqing,,Liu Gongyong.Research and Implementation of SNMP-Based Network Management System[C].Proceedings of the 4th International Conference on Intelligent Networks and Intelligent Systems, Kunming:IEEE Computer Press,2011:129-132.
[3] CLEMM A.網(wǎng)絡(luò)管理技術(shù)架構(gòu)[M].詹文軍,,杜曉峰,,劉玉鵬,譯.北京:人民郵電出版社,,2008.
[4] 武孟軍,,徐龔,任相臣.Visual C++開(kāi)發(fā)基于SNMP的網(wǎng)絡(luò)管理軟件(第2版)[M].北京:人民郵電出版社,,2009.
[5] PANDEY S,,CHOI M J,LEE S J,,et al.IP Network topology discovery using SNMP[C].International Conference on Information Networking,,Chiang Mai:IEEE Computer Press,2009:1-5.
[6] 陳哲,,羅軍勇,,王清賢.網(wǎng)絡(luò)拓?fù)渥詣?dòng)布局技術(shù)的研究與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2006,,22(9):100-101,,163.