丁青,范磬亞,俞海平,張義東,吉翔
隨著校園網(wǎng)支撐的業(yè)務(wù)越來(lái)越廣泛,網(wǎng)絡(luò)負(fù)荷變得越來(lái)越重,網(wǎng)絡(luò)在運(yùn)行過(guò)程中經(jīng)常會(huì)出現(xiàn)不可預(yù)知的突發(fā)故障。如果不能及時(shí)獲知消息、排除故障,有可能會(huì)造成網(wǎng)絡(luò)性能變差甚至引發(fā)網(wǎng)絡(luò)大面積癱瘓。校園網(wǎng)的骨干和中心是核心通信設(shè)備與提供核心業(yè)務(wù)的服務(wù)器[1],它們是校園網(wǎng)正常運(yùn)轉(zhuǎn)的基礎(chǔ)。只要能確保它們的正常運(yùn)行,就能夠保證整個(gè)網(wǎng)絡(luò)不出大的問(wèn)題。
而隨著移動(dòng)通信技術(shù)的迅速發(fā)展,作為移動(dòng)通信的一種重要增值業(yè)務(wù)的SMS(短消息服務(wù))也得到了迅速的發(fā)展。在校園信息化的建設(shè)過(guò)程中,短信功能的應(yīng)用逐步扮演著越來(lái)越重要的作用,積極地推動(dòng)著校園信息化的快速發(fā)展。基于這樣的思想,我們自主開(kāi)發(fā)了一套校園網(wǎng)自動(dòng)監(jiān)控報(bào)警系統(tǒng)。這套系統(tǒng)對(duì)網(wǎng)絡(luò)中的核心設(shè)備和服務(wù)器加以實(shí)時(shí)監(jiān)控,如果發(fā)現(xiàn)運(yùn)行故障,立即通過(guò)短消息方式向網(wǎng)絡(luò)管理員報(bào)警,網(wǎng)絡(luò)管理員收到報(bào)警后及時(shí)采取措施排除故障,從而確保網(wǎng)絡(luò)通暢和數(shù)據(jù)安全[2]。
圖1 總體結(jié)構(gòu)
校園網(wǎng)自動(dòng)監(jiān)控報(bào)警系統(tǒng)的總體結(jié)構(gòu)如圖1所示,整個(gè)系統(tǒng)按功能劃分,分為設(shè)備監(jiān)控模塊、短消息收發(fā)模塊和系統(tǒng)集成模塊。設(shè)備監(jiān)控模塊根據(jù)相關(guān)網(wǎng)絡(luò)管理協(xié)議實(shí)時(shí)監(jiān)控連接到校園網(wǎng)的所有路由器、交換機(jī)、服務(wù)器以及 UPS等關(guān)鍵設(shè)備。短消息收發(fā)模塊通過(guò)RS232連接GSM模塊,實(shí)現(xiàn)短消息報(bào)警功能,一旦發(fā)現(xiàn)網(wǎng)絡(luò)故障,則立即將報(bào)警信息通過(guò)GPRS網(wǎng)絡(luò)發(fā)送到網(wǎng)管員手機(jī)。系統(tǒng)集成模塊則是系統(tǒng)頂層模塊,每隔一定的時(shí)間,通過(guò)調(diào)用設(shè)備監(jiān)控模塊輪詢網(wǎng)絡(luò)設(shè)備,如果發(fā)現(xiàn)設(shè)備故障,則調(diào)用短消息收發(fā)模塊向網(wǎng)管員報(bào)警,另外由于采用B/S架構(gòu),網(wǎng)管員桌面可以在校園網(wǎng)任意授權(quán)節(jié)點(diǎn)連接系統(tǒng)所在服務(wù)器,通過(guò)瀏覽器查看設(shè)備狀態(tài)并對(duì)系統(tǒng)進(jìn)行相關(guān)配置。
按軟硬件劃分,該系統(tǒng)分為軟件和硬件兩部分。軟件部分整體采用.NET技術(shù)來(lái)實(shí)現(xiàn),后臺(tái)數(shù)據(jù)庫(kù)為SQL Server,軟件開(kāi)發(fā)工具采用了Visual Studio.Net平臺(tái),軟件運(yùn)行環(huán)境為 Windows 2003 Server。硬件部分選用的 GSM 模塊是Wavecom的Q2304A,支持AT指令集收發(fā)短消息。
系統(tǒng)由三大功能模塊組成,分為設(shè)備監(jiān)控模塊、短消息收發(fā)模塊、系統(tǒng)集成模塊,它們都基于微軟公司的.NET Framework 來(lái)實(shí)現(xiàn)。
網(wǎng)絡(luò)設(shè)備的監(jiān)控主要依據(jù)相關(guān)的網(wǎng)絡(luò)管理協(xié)議來(lái)進(jìn)行,常用的有因特網(wǎng)報(bào)文管理協(xié)議(ICMP)和簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(SNMP)。ICMP是IP層的標(biāo)準(zhǔn)協(xié)議,它允許主機(jī)或路由器報(bào)告差錯(cuò)情況和提供有關(guān)異常情況的報(bào)告[4]。目前的設(shè)備監(jiān)控模塊實(shí)現(xiàn)了最基本的連通性檢測(cè),主要采用基于ICMP的Ping服務(wù)來(lái)實(shí)現(xiàn)。
基于面向?qū)ο蟮脑O(shè)計(jì)方法,設(shè)備監(jiān)控模塊被定義成一個(gè)類(lèi)名為DevMon的類(lèi),它所包含的成員方法主要是靜態(tài)的基于各種網(wǎng)絡(luò)管理協(xié)議的檢測(cè)函數(shù)。連通性檢測(cè)的函數(shù)定義為public static Boolean ICMP_PING(string DevIpAddr),關(guān)鍵代碼如下:
首先新生成Ping類(lèi)對(duì)象PingSender,然后設(shè)置Ping服務(wù)相關(guān)參數(shù)(禁止數(shù)據(jù)包分段、生成包含32個(gè)字節(jié)發(fā)送數(shù)據(jù)的緩沖區(qū)和設(shè)置超時(shí)時(shí)間為480毫秒),接著調(diào)用同步方法Send向目標(biāo)IP地址發(fā)送ICMP回聲報(bào)文,最后根據(jù)應(yīng)答結(jié)果來(lái)決定返回值為真或假。
GSM模塊能夠支持所有GSM短消息通訊功能,主要包括中心號(hào)碼設(shè)置、消息模式配置、發(fā)送、接收和刪除等,上位機(jī)則通過(guò)發(fā)送相應(yīng)的AT指令來(lái)控制GSM模塊進(jìn)行相關(guān)操作[5]。短消息收發(fā)模塊同樣被設(shè)計(jì)成一個(gè)類(lèi)名為GsmSMS的類(lèi),它通過(guò)對(duì)AT指令進(jìn)行封裝實(shí)現(xiàn)了短消息通訊相關(guān)的主要功能。
2.2.1 UML圖
圖2 GsmSMS類(lèi)的UML圖
GsmSMS類(lèi)的UML圖如圖2所示,這里列出了最主要的成員變量和成員函數(shù)。私有成員變量 rs232是 SerialPort類(lèi)對(duì)象,SerialPort借助rs232可以方便的實(shí)現(xiàn)串口相關(guān)操作。公有的成員函數(shù)一共有五個(gè):GsmInit用于初始化GSM 模塊,GsmSendSMS用于發(fā)送短消息,GsmReadSMS用于閱讀短消息,GsmSetSMSC用于設(shè)置短消息中心號(hào)碼,GsmDeleteSMS用于刪除短消息。
2.2.2 成員函數(shù)的實(shí)現(xiàn)
成員函數(shù)的實(shí)現(xiàn)都依據(jù)相關(guān)的AT指令[6],如表1所示。
表1 相關(guān)AT指令
以 GSM 模塊初始化(GsmInit)和發(fā)送短消息(GsmSendSMS)為例,介紹 GsmSMS類(lèi)成員函數(shù)的具體實(shí)現(xiàn)。
圖3 GsmInit和GsmSendSMS的流程圖
GsmInit的其程序流程圖如圖3中(a)所示。首先根據(jù)輸入?yún)?shù)(串口名、波特率、奇偶校驗(yàn)、數(shù)據(jù)長(zhǎng)度和停止位)來(lái)創(chuàng)建SerialPort類(lèi)對(duì)象,接著調(diào)用SerialPort類(lèi)方法Open()打開(kāi)串口,然后通過(guò)串口向GSM模塊發(fā)送“AT”查詢模塊的狀態(tài),如果模塊處于活動(dòng)狀態(tài),則進(jìn)一步發(fā)送“AT+CGMF=1”配置短消息為文本模式,如果配置成功,則初始化成功并返回TRUE。
GsmSendSMS的程序流程圖如圖3中(b)所示。首先利用發(fā)送短消息 AT指令發(fā)送對(duì)方號(hào)碼,接收到“>”提示符后,再發(fā)送短消息內(nèi)容,然后等待直到返回包含“ERROR”或“CMGS”的響應(yīng),如果返回“CMGS”則表示發(fā)送成功,如果返回“ERROR”則表示發(fā)送失敗。
系統(tǒng)集成模塊是整個(gè)系統(tǒng)的運(yùn)轉(zhuǎn)調(diào)度中心,通過(guò)該中心實(shí)現(xiàn)了對(duì)網(wǎng)絡(luò)的實(shí)時(shí)監(jiān)控。首先是系統(tǒng)初始化:初始化GSM模塊,連接后臺(tái)數(shù)據(jù)庫(kù)獲知監(jiān)控設(shè)備列表以及網(wǎng)管員名單,并根據(jù)輸入?yún)?shù)配置運(yùn)行參數(shù)。然后進(jìn)行定時(shí)批量監(jiān)控,定時(shí)對(duì)位于監(jiān)控設(shè)備列表上的每個(gè)設(shè)備調(diào)用設(shè)備監(jiān)控模塊加以檢測(cè)并記錄結(jié)果。最后,如果發(fā)現(xiàn)設(shè)備故障,則根據(jù)一定的報(bào)警策略向網(wǎng)管員手機(jī)發(fā)送報(bào)警信息。
2.3.1 UML圖
系統(tǒng)集成模塊相關(guān)的UML圖如圖4所示。
圖4 MonAlarm類(lèi)的UML圖
其中MonDev結(jié)構(gòu)用于保存設(shè)備信息和狀態(tài),ID、Type、Location和 IPAddr分別對(duì)應(yīng)監(jiān)控設(shè)備的名稱(chēng)、類(lèi)型、位置和IP地址,直接來(lái)源于數(shù)據(jù)庫(kù);Status則表明設(shè)備是否正常工作,AlarmFlag則標(biāo)志是否已經(jīng)報(bào)警,AlarmCount則記錄設(shè)備報(bào)警次數(shù)。
MonAlarm類(lèi)實(shí)現(xiàn)整個(gè)系統(tǒng)集成,其成員變量一共有6個(gè):mdlist為所有受監(jiān)控設(shè)備對(duì)應(yīng)的 MonDev結(jié)構(gòu)列表,devalarm_limit為單個(gè)設(shè)備報(bào)警的次數(shù)限制,allalarm_limit為所有報(bào)警的次數(shù)限制,allalarmcount則是所有報(bào)警計(jì)數(shù)值,montimer是基于.NET的 Timer類(lèi)的監(jiān)控定時(shí)器,sms_agent則是GsmSMS類(lèi)對(duì)象。
MonAlarm成員函數(shù)一共包括5個(gè)。公有 的Init 用于執(zhí)行系統(tǒng)初始化,通過(guò)sms_agent調(diào)用GsmInit初始化GSM模塊;連接數(shù)據(jù)庫(kù)生成 mdlist并對(duì) Status、AlarmFlag和AlarmCount進(jìn)行初始化,分別設(shè)置成True、False和0;此外,初始化allalarmcount為0 ,并根據(jù)輸入?yún)?shù)配置用于限制報(bào)警次數(shù)的 devalarm_limit和 allalarm_limit。SetTimer用于配置監(jiān)控定時(shí)器,參數(shù)interval表示秒為單位定時(shí)間隔,參數(shù)enable決定是否啟動(dòng)或停止監(jiān)控定時(shí)器。MonAll實(shí)施監(jiān)控批處理,針對(duì)mdlist中每個(gè)設(shè)備調(diào)用DevMon類(lèi)的監(jiān)控函數(shù),并根據(jù)結(jié)果更新Status。SMSAlarm則在實(shí)施監(jiān)控之后根據(jù)mdlist中的狀態(tài)信息,再依據(jù)一定的報(bào)警策略決定是否通過(guò)sms_agent來(lái)發(fā)送報(bào)警信息。OnTimedEvent則是定時(shí)器事件函數(shù),包含整個(gè)監(jiān)控報(bào)警流程,先調(diào)用 MonAll,然后再調(diào)用SMSAlarm。需要說(shuō)明的是,MonAlarm類(lèi)的mdlist公有成員變量,它能夠被外部直接訪問(wèn),從而可以方便的在Web頁(yè)中顯示所有監(jiān)控情況。
2.3.2 系統(tǒng)報(bào)警策略
短消息報(bào)警能夠提高管理效率,但也會(huì)帶來(lái)一些成本開(kāi)銷(xiāo)。因此,在保證報(bào)警有效性的情況下,如何設(shè)計(jì)報(bào)警策略來(lái)盡可能的降低成本,是系統(tǒng)很需要考慮的問(wèn)題。首先要避免重復(fù)報(bào)警,只有當(dāng)監(jiān)控到設(shè)備從正常狀態(tài)(Status=True)變?yōu)榉钦顟B(tài)(Status=False)時(shí),才發(fā)送短消息報(bào)警。其次要控制設(shè)備的報(bào)警次數(shù),對(duì)單個(gè)設(shè)備的報(bào)警次數(shù) AlarmCount需要加以限制,避免設(shè)備出現(xiàn)時(shí)好時(shí)壞的情況時(shí)反復(fù)報(bào)警 ;此外,對(duì)系統(tǒng)總共的報(bào)警次數(shù) allalarmcount也應(yīng)該加以限制,避免由于系統(tǒng)所在服務(wù)器本身和網(wǎng)絡(luò)斷開(kāi)而大量報(bào)警的情況。
上述報(bào)警策略集成在成員函數(shù)SMSAlarm中,實(shí)現(xiàn)流程圖如圖5所示。另外,由于系統(tǒng)對(duì)報(bào)警次加了限制,每報(bào)警一次,設(shè)備和系統(tǒng)所允許的報(bào)警次數(shù)都會(huì)各減少一次,因而在網(wǎng)管員收到報(bào)警并手動(dòng)排除故障之后,需要再次調(diào)用Init執(zhí)行系統(tǒng)初始化。
圖5 報(bào)警策略流程圖
本文介紹的校園網(wǎng)自動(dòng)監(jiān)控報(bào)警系統(tǒng)目前已在本院網(wǎng)絡(luò)中心投入運(yùn)行,為網(wǎng)管員發(fā)現(xiàn)、排除網(wǎng)絡(luò)故障和確保網(wǎng)絡(luò)正常運(yùn)行發(fā)揮了重要的作用。下一步的工作,主要是考慮采用更為專(zhuān)業(yè)的網(wǎng)管協(xié)議來(lái)監(jiān)控網(wǎng)絡(luò)設(shè)備,特別是對(duì)于重要的服務(wù)器,除了基本的連通性檢測(cè),對(duì)于流量、服務(wù)、安全等方面的監(jiān)控也非常重要,通過(guò)加強(qiáng)對(duì)各種安全隱患的提前預(yù)警,進(jìn)而做到防患于未然。
[1]何發(fā)鎂等.嵌入式網(wǎng)絡(luò)管理報(bào)警系統(tǒng)的設(shè)計(jì)[J].計(jì)算機(jī)工程,2007,(20):101-103.
[2]張杰等.基于嵌入式系統(tǒng)的網(wǎng)絡(luò)故障檢測(cè)報(bào)警系統(tǒng)[J].內(nèi)蒙古大學(xué)學(xué)報(bào)(自然科學(xué)版),2009,(3):356-359.
[3]金旭亮.編程的奧秘——.NET軟件技術(shù)學(xué)習(xí)與實(shí)踐[M].北京:電子工業(yè)出版社,2006-1 .
[4]謝希仁.計(jì)算機(jī)網(wǎng)絡(luò)教程[M].北京:人民郵電出版社.2006-5.
[5]謝春祥等.基于 GSM/GPRS的終端式短信平臺(tái)開(kāi)發(fā)[J].計(jì)算機(jī)工程和設(shè)計(jì),2007,(4):1680-1682.
[6]郭輝.基于GSM SMS的短信平臺(tái)及其應(yīng)用系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].南京:東南大學(xué),2006:15-16.