基于SNMP的網(wǎng)絡(luò )監控系統研究與設計
簡(jiǎn)單網(wǎng)絡(luò )管理協(xié)議SNMP(Simple Network Management Protocol)是為網(wǎng)絡(luò )管理系統提供的底層網(wǎng)絡(luò )管理的框架。其應用范圍非常廣泛,諸多種類(lèi)的網(wǎng)絡(luò )設備、軟件和系統中都有所采用。SNMP協(xié)議發(fā)展到目前的第3版,已經(jīng)成為一個(gè)非常成熟的網(wǎng)絡(luò )管理協(xié)議[1]。不過(guò)由于每個(gè)設備的支持程序有所不同,所以面向SNMP的成熟網(wǎng)絡(luò )管理框架依然非常少見(jiàn)[2]。在SNMP的支持方面,Cisco是走在最前沿的[3],除了完整地支持RFC1213中MIB-2的定義外,還在部分設備中支持RFC2819和RFC2021中的RMON。基于Cisco的主流性,開(kāi)發(fā)“可擴展”的基于SNMP的網(wǎng)絡(luò )管理框架變得非?,F實(shí)。
本文引用地址:http://dyxdggzs.com/article/170546.htm1 開(kāi)發(fā)平臺與架構的選擇
.NET平臺的C#語(yǔ)言有著(zhù)豐富的語(yǔ)言特性,例如Lambda表達式(在A(yíng)uto-Topology控件及軟件框架中已多次使用)可以顯著(zhù)地提升開(kāi)發(fā)效率,而且支持C#的官方開(kāi)發(fā)環(huán)境Visual Studio是公認的更加有助于團隊協(xié)作的集成開(kāi)發(fā)環(huán)境。再者,C#中匿名對象、對象初始化器、閉包支持LINQ等利于DSL表現的特性,加之良好的異步編程支持,使C#成為了首選語(yǔ)言,自然,首選的平臺則為.NET。
軟件必須面對的兩個(gè)基本問(wèn)題是“通用性”與“可擴展性”。所謂通用性,就是在絕大多數的網(wǎng)絡(luò )環(huán)境中都能夠使用的基本功能;所謂可擴展性,就是在保證通用的前提下,充分發(fā)揮特有設備特別功能的能力。這使得通用框架的設計難度加大。
如何使網(wǎng)絡(luò )管理任務(wù)充分簡(jiǎn)化是需要重點(diǎn)考慮的,軟件的工作方式將會(huì )影響操作的行為,C/S結構或者純粹的單體軟件無(wú)疑有著(zhù)更為強大的圖形展現能力,而B(niǎo)/S結構則在伸縮性與跨平臺方面有著(zhù)更為良好的表現。一個(gè)較為折衷并且有經(jīng)濟效益的選擇,就是在框架級別實(shí)現通用與跨平臺,在表現層分離為不同的解決方案。最終,軟件采用了普通軟件的工作方式。
雖然可以自主開(kāi)發(fā)SNMP底層的通訊類(lèi)庫來(lái)支持整個(gè)項目,但考慮到開(kāi)發(fā)周期等因素,還是尋求一款更為優(yōu)秀的開(kāi)源組件來(lái)承擔基礎通訊。有兩款開(kāi)源組件可供選擇:SnmpSharpNet和SharpSnmpLib。在仔細研究了這兩款組件后發(fā)現,SharpSnmpLib更新頻率更高,而且代碼更加利于維護,于是選擇SharpSnmpLib來(lái)支持開(kāi)發(fā)。
2 系統分析
2.1 重點(diǎn)問(wèn)題
由于SNMP協(xié)議在不同的設備上支持的情況不同,所以要求軟件的一些通用功能兼容大部分設備,這是很有挑戰的。常見(jiàn)的網(wǎng)絡(luò )管理任務(wù)基本都建立在以拓撲圖為藍本的擴展之上,所以無(wú)論設備如何不同、協(xié)議支持情況有多復雜,自動(dòng)網(wǎng)絡(luò )拓撲發(fā)現功能是一個(gè)不能缺少的核心功能。如何在兼容常見(jiàn)設備的基礎上實(shí)現擴展功能成為研究的重點(diǎn)問(wèn)題。
2.1.1 與現有的大部分硬件設備保持兼容
與其說(shuō)實(shí)現兼容,倒不如理解為只使用大部分硬件都能支持的功能來(lái)實(shí)現。一個(gè)顯而易見(jiàn)的解決方案就是只使用RFC1213中定義的MIB-2功能組。MIB-2中定義了網(wǎng)絡(luò )管理中經(jīng)常使用的對象,并且得到了絕大多數設備的支持。如果只使用MIB-2中定義的功能來(lái)支撐軟件的核心功能,那么軟件與硬件的兼容性問(wèn)題自然也會(huì )少很多。
2.1.2 通過(guò)SNMP的方式得到網(wǎng)絡(luò )拓撲
SNMP協(xié)議的相關(guān)功能中沒(méi)有直接獲取拓撲結構的對象,在一些私有MIB中(例如Cisco中關(guān)于CDP的相關(guān)對象)有這樣直接的功能,但是對網(wǎng)絡(luò )環(huán)境與設備要求苛刻(CDP協(xié)議只在純Cisco網(wǎng)絡(luò )中有用,雖然有部分非Cisco開(kāi)始支持CDP,但是數量很少)[4],所以這不是一個(gè)通用的解決方案。
為了保持設備和網(wǎng)絡(luò )的兼容性,前面提到應該采用“保守”的對象來(lái)實(shí)現核心功能,所以拓撲圖的自動(dòng)發(fā)現只能從MIB-2中查找相應的解決方案。網(wǎng)絡(luò )拓撲,顧名思義就是網(wǎng)絡(luò )設備之間的邏輯關(guān)系,那么反映到網(wǎng)絡(luò )技術(shù)中,最為直接的對應就是路由表。但是路由表中只有網(wǎng)絡(luò )設備間的關(guān)系,支持SNMP的PC信息卻不在路由表中。如何解決支持SNMP的PC發(fā)現呢?一個(gè)方案就是查找網(wǎng)絡(luò )設備中的“地址轉換表”,這其中有PC的IP信息,通過(guò)對這些PC逐一進(jìn)行SNMP測試,就可完整地支持整個(gè)SNMP網(wǎng)絡(luò )[5]。另外,需要知道設備自身接口的IP,這在MIB-2的IP功能組(1.3.6.1.2.1.4)中都有定義。
2.2 難點(diǎn)問(wèn)題
2.2.1 拓撲圖的布局
拓撲圖的機制確定之后,另一個(gè)難題就是如何將各個(gè)設備以及相關(guān)線(xiàn)路布置在屏幕上。由于設備之間的唯一關(guān)系就是相互間的鏈路,沒(méi)有與物理結構相關(guān)的數據可以獲得,所以要想完全通過(guò)軟件繪制出與物理結構相同或相似的拓撲圖是非常困難的,可以參考的相關(guān)資料和論文非常少[6]。
拓撲圖的分布是個(gè)學(xué)術(shù)難題,環(huán)狀權值分布僅作為一種理論嘗試,為了今后有更好的理論支撐,可以靈活地修改布局算法,軟件在開(kāi)發(fā)過(guò)程中采用“策略模式”(Strategy)將布局算法抽象出來(lái),易于替換。
2.2.2 映射領(lǐng)域模型到存儲模型
領(lǐng)域模型記錄了一個(gè)系統中的關(guān)鍵概念和詞匯表,顯示出了系統中的主要實(shí)體之間的關(guān)系,并確定了它們的重要方法和屬性。對于一個(gè)SNMP應用系統來(lái)說(shuō),主要的領(lǐng)域模型就是SNMP實(shí)體。另外一個(gè)擴展功能就是對網(wǎng)絡(luò )設備的“管理”,這涉及到資產(chǎn)評估、設備統計、維修管理等相關(guān)的應用,換句話(huà)講,如何將軟件獲取到的信息與現實(shí)中的設備對應起來(lái),是軟件需要解決的一個(gè)方面。
3 總體描述及框架設計
3.1 系統核心
系統實(shí)現所涉及的核心問(wèn)題分別如下:
(1)如何獲取和繪制拓撲結構圖,并合理地調整拓撲樣式;
(2)同步引擎的合理調度,以及信息存儲結構;
(3)功能的合理分類(lèi),以及對相關(guān)OID的分析、組織、建模;
(4)基礎構建塊的選擇。
由于系統采用了分層開(kāi)發(fā),以及可擴展性等多方面的考慮,軟件在邏輯上分為4層——持久層、基礎層、業(yè)務(wù)層、表示層,基本的工作模式如圖1所示。

3.2 存儲模型
存儲模型為“設備管理”以及相關(guān)的擴展應用提供持久化的機制,并為統計、分析等要求查詢(xún)對比歷史數據的需求提供基礎。
對于數據庫的選擇,從成本上考慮,有Microsoft SQL Server Express、Microsoft SQL CE、MongoDB、NoSQL可供選擇,而從部署上考慮有MongoDB、部分NoSQL、Microsoft SQL CE可選擇,最后從性能上考慮,采用Microsoft SQL CE來(lái)支持存儲模型。
經(jīng)過(guò)持久后的數據可以在相對固定的時(shí)間內有效,在此基礎上,進(jìn)行統計、跟蹤、分析等功能就會(huì )迅速許多,同時(shí),網(wǎng)絡(luò )的負荷也會(huì )明顯降低。
3.3 領(lǐng)域邏輯設計
系統與SNMP網(wǎng)絡(luò )交互的主要邏輯依賴(lài)于SNMP協(xié)議所傳輸的SNMP對象數據,SNMP對象又依賴(lài)于相關(guān)的MIB來(lái)描述其特性與結構。軟件所需要的領(lǐng)域邏輯主要集中在對SNMP實(shí)體的操作上,但是SNMP的操作是對程序不友好的。也就是說(shuō),無(wú)法通過(guò)流暢的API來(lái)操作SNMP使之為軟件所用。所以需要設計一種領(lǐng)域邏輯,將SNMP的特定領(lǐng)域轉化為程序友好的領(lǐng)域??紤]圖2所示的領(lǐng)域轉化。

SNMP的操作原語(yǔ)被轉化為對應的編程概念,使SNMP的領(lǐng)域完整地轉化為程序設計的領(lǐng)域。這為AOP編程以及存儲模型的擴展奠定了基礎。
評論