摘要 本文提出并描述了一種利用ICMP協(xié)議對網(wǎng)絡(luò)傳輸層進(jìn)行實時監(jiān)控的方法。它的應(yīng)用能幫助用戶了解網(wǎng)絡(luò)運行狀態(tài)并及時發(fā)現(xiàn)傳輸層出現(xiàn)的故障。文中對這種監(jiān)控系統(tǒng)從設(shè)計到驗證、實現(xiàn)進(jìn)行了詳細(xì)闡述。目前該系統(tǒng)已經(jīng)實現(xiàn),并在工程應(yīng)用中取得了良好的效果。
一、概述
在電信級設(shè)備功能日益完善,組網(wǎng)日趨復(fù)雜的今天,對設(shè)備的管理監(jiān)控已經(jīng)成為保障設(shè)備穩(wěn)定、正常運轉(zhuǎn)的必要手段。其中,對底層通信網(wǎng)絡(luò)的監(jiān)控是整個監(jiān)控管理系統(tǒng)的核心和基礎(chǔ)。
以前眾多企業(yè)級的通信核心網(wǎng)設(shè)備因為沒有完善的監(jiān)控管理,缺乏告警及系統(tǒng)運行狀態(tài)的相關(guān)日志信息,致使維護(hù)人員無法準(zhǔn)確掌握設(shè)備運行狀態(tài),設(shè)備運轉(zhuǎn)達(dá)不到用戶所必須的穩(wěn)定性及安全性要求。尤其當(dāng)網(wǎng)絡(luò)物理硬件出現(xiàn)故障造成網(wǎng)絡(luò)中斷時,如果不能及時發(fā)現(xiàn)并定位,不僅會造成用戶長時間通信中斷,而且會讓我們廠商的研發(fā)和工程人員無謂浪費時間去逐步查找軟件問題。針對這種現(xiàn)象,我們提出一種網(wǎng)絡(luò)狀態(tài)監(jiān)測的解決方案。
這種監(jiān)測方法主要是基于ICMP協(xié)議開發(fā)的,基本原理類似Windows自帶的Ping功能。Ping的目的是為了測試網(wǎng)絡(luò)中的另一臺主機是否可達(dá)。該程序給主機發(fā)送一份ICMP回顯請求報文,并等待返回ICMP回顯應(yīng)答。通常Ping是對兩個TCP/IP系統(tǒng)連通性進(jìn)行測試的基本工具。它只利用ICMP回顯請求和回顯應(yīng)答報文,無須經(jīng)過傳輸層(TCP/UDP),從而將問題定位到IP層以下,避免了傳輸層和應(yīng)用層的問題干擾。Ping服務(wù)一般在內(nèi)核中實現(xiàn)ICMP的功能。
由于Ping具有上述特點,其統(tǒng)計結(jié)果信息可以被利用顯示底層傳輸網(wǎng)絡(luò)的狀態(tài)。關(guān)鍵的統(tǒng)計數(shù)據(jù)有:
●報文抵達(dá)序列,由ICMP序列號(ICMP-seq)顯示;
●每個報文往返所用時間,單位為ms(毫秒);
●報文丟失百分比,它在ping命令輸出的總結(jié)行顯示。
其中,序列號用于標(biāo)識每一個響應(yīng)包的先后順序,用于檢驗網(wǎng)絡(luò)傳輸是否會重復(fù)或失序;往返時間RTT可以顯示出網(wǎng)絡(luò)傳輸狀態(tài)的好壞;而報文丟失百分比則是對網(wǎng)絡(luò)傳輸質(zhì)量的統(tǒng)計評估。
基于上述特性,我們提出一種多方向網(wǎng)絡(luò)狀態(tài)監(jiān)測的方法,并簡要說明其實現(xiàn)原理。
二、網(wǎng)絡(luò)狀態(tài)監(jiān)測實現(xiàn)原理
TCP/IP三層網(wǎng)絡(luò)作為應(yīng)用層傳輸數(shù)據(jù)的基礎(chǔ),尤其是電信級交換數(shù)據(jù)的傳輸基礎(chǔ),無論從安全性還是可靠性上都有非常高的要求,因此,網(wǎng)絡(luò)狀態(tài)監(jiān)控已經(jīng)成為目前眾多設(shè)備提供商的研究重點之一。
如果僅僅使用Windows或者Linux系統(tǒng)自帶的Ping功能作為狀態(tài)監(jiān)控手段,我們只能實現(xiàn)單一的一臺服務(wù)器到另一臺服務(wù)器的通信監(jiān)測。如果該服務(wù)器與多個其它服務(wù)器同時建立TCP/IP連接,就必須通過多次重復(fù)使用ping命令才能達(dá)到同時監(jiān)控每條鏈路方向的目的。對于復(fù)雜的電信核心網(wǎng)來說,單一的點對點監(jiān)控已經(jīng)無法滿足其發(fā)展需求,我們必須找出一種單臺服務(wù)器可同時監(jiān)控多臺(幾十甚至幾百臺)服務(wù)器的跨平臺網(wǎng)絡(luò)狀態(tài)監(jiān)測方法,以滿足集中監(jiān)控整個核心網(wǎng)絡(luò)的目的。
基于上述原因,利用ping的原理開發(fā)出一種用于多點通信狀態(tài)監(jiān)測的系統(tǒng),具體實現(xiàn)機制如下:
監(jiān)控系統(tǒng)模塊通過指定接口函數(shù)接收待監(jiān)測的客戶端服務(wù)器IP地址,將該客戶端的地址記錄到內(nèi)部統(tǒng)計結(jié)構(gòu)列表中,并在記錄時判定該地址與已保存地址的重復(fù)性(重復(fù)的地址將不會被二次記錄),然后,通過定時器周期向所有客戶端地址方向發(fā)送ICMP探測包,對其鏈路狀態(tài)進(jìn)行監(jiān)控。監(jiān)控系統(tǒng)的基本流程如圖1所示。

圖1 監(jiān)控系統(tǒng)的基本流程
監(jiān)測過程中,分別對每一被控鏈路方向的收發(fā)ICMP探測消息進(jìn)行統(tǒng)計:當(dāng)收到響應(yīng)的時延小于用戶指定閥值的時候,記錄該消息的接收時間、序列號,以及接收ICMP響應(yīng)的RTT往返時間,否則做丟包處理。通常情況下,由于電信級設(shè)備的高要求性,我們認(rèn)為響應(yīng)時間大于1s的網(wǎng)絡(luò)是不可用網(wǎng)絡(luò),屬于嚴(yán)重堵塞或中斷狀態(tài),必須告警并盡快查明恢復(fù)。正常通信時,網(wǎng)內(nèi)響應(yīng)時間應(yīng)小于10ms,網(wǎng)間小于100ms才是具有高可靠性的傳輸網(wǎng)絡(luò)。發(fā)送ICMP探測包的周期應(yīng)該由用戶根據(jù)安全需要自行設(shè)定。
每發(fā)送10包ICMP探測消息后,應(yīng)該對各被控方向的整體網(wǎng)絡(luò)狀況進(jìn)行一次統(tǒng)計,內(nèi)容包括收到響應(yīng)的數(shù)量、時延及丟包率等。將所有的統(tǒng)計數(shù)據(jù)全部記錄在指定目錄下的log日志文件中,日志文件的大小在大于一個閥值時應(yīng)該保存為備份文件,然后重新記錄。通過日志在本機中查看服務(wù)器在一個周期時間(例如一周)內(nèi)的網(wǎng)絡(luò)通信狀況,便于維護(hù)人員及時發(fā)現(xiàn)并提前避免傳輸層的問題。
這里需要設(shè)置一個周期上報線程,每隔一個用戶指定的時間周期,通過計算,將網(wǎng)絡(luò)狀態(tài)統(tǒng)計數(shù)據(jù)主動上報到操作維護(hù)臺。上報內(nèi)容包括被監(jiān)控端的IP地址,RTT往返時間和丟包率等。此外,該線程還對每個被監(jiān)測客戶端的收發(fā)消息進(jìn)行差值統(tǒng)計,一旦發(fā)現(xiàn)丟包立即通過接口函數(shù)上報告警至維護(hù)臺。告警內(nèi)容包含監(jiān)控客戶端的IP地址和告警級別。
需要注意的是,由于采用多方向連續(xù)ICMP監(jiān),所以,對于ICMP響應(yīng)消息一定要進(jìn)行合理的區(qū)分,以避免各個監(jiān)控方向的統(tǒng)計混亂。由于傳輸網(wǎng)絡(luò)具有不確定性,并不能保證每一包到達(dá)的先后順序,此時通過IP地址、序列號和消息pid號區(qū)分響應(yīng)消息就顯得尤為重要。另外,為了使用發(fā)送接收超時設(shè)置,必須設(shè)定socket為SO_RCVTIMEO和SO_SNDTIMEO方式,否則一旦某一監(jiān)測方向出現(xiàn)網(wǎng)絡(luò)超時中斷問題,程序?qū)⒚媾R被懸掛死鎖的危險。
當(dāng)返回ICMP回顯應(yīng)答時,要保存消息序列號和TTL生存時間,并計算探測消息往返時間。ICMP消息序列號計數(shù)從0開始,每發(fā)送一次新的回顯請求,序列號加1。程序記錄返回的每個分組的消息序列號,供查看是否有分組丟失、失序或重復(fù),并通過在ICMP報文數(shù)據(jù)中存放發(fā)送請求的時間值來計算往返時間。當(dāng)應(yīng)答返回時,用當(dāng)前時間減去存放在ICMP報文中的消息發(fā)起時間,即往返時間。
基于ICMP的網(wǎng)絡(luò)監(jiān)測方法,優(yōu)點是具有平臺無關(guān)性。無論服務(wù)器、普通計算機或者電信交換機,只要是支持TCP/IP協(xié)議的操作系統(tǒng),都可以被列為監(jiān)控對象。即此監(jiān)控方式不受被控端所使用的操作系統(tǒng)和操作平臺限制。這樣不僅提供了極強的平臺通用性,還大大減少了開發(fā)和維護(hù)所需成本。
三、試驗數(shù)據(jù)分析
選擇在一個相對穩(wěn)定的局域網(wǎng)(192.168.1.網(wǎng)段)內(nèi)搭建實驗環(huán)境,這樣可以在測定監(jiān)控系統(tǒng)運行穩(wěn)定性的同時,通過斷開、連接網(wǎng)線的操作,實時模擬測試各種異常情況的發(fā)生。這里只給出基本的測試數(shù)據(jù)。
簡單環(huán)境構(gòu)造圖示于圖2。

圖2 實時模擬測試環(huán)境
其中,以1.171作為監(jiān)控的服務(wù)器,160、208、211三臺主機作為被監(jiān)控的客戶端。當(dāng)服務(wù)器分別收到三個被控端的IP地址,就會以60秒為周期分別對三臺服務(wù)器進(jìn)行實時監(jiān)控;每間隔10分鐘做一次統(tǒng)計寫日志操作(該時間周期用戶可調(diào))。
正常情況下,日志會每隔10分鐘記錄一次收發(fā)總包數(shù)和丟包率。為了測試超時中斷情況,拔掉192.168.1.160的網(wǎng)線模擬網(wǎng)絡(luò)中斷,再查看日志。
此時,日志文件會記錄下每次響應(yīng)超時的狀況,并在該次探測失敗時上報告警消息至維護(hù)臺,然后,統(tǒng)計數(shù)據(jù)時算出當(dāng)前1.160服務(wù)器的丟包率。監(jiān)控系統(tǒng)運行時,其它方向的統(tǒng)計信息并未因該方向丟包而受到影響,各個客戶端的統(tǒng)計信息是相互獨立的。另外,也應(yīng)該對網(wǎng)內(nèi)響應(yīng)時間超過100ms的數(shù)據(jù)包記錄統(tǒng)計(100ms指代網(wǎng)絡(luò)延時過長的閥值),以供查看整個網(wǎng)絡(luò)是否處于超負(fù)荷工作狀態(tài)。
在記錄當(dāng)前時間、IP地址和序列號的同時,具體響應(yīng)時間也被詳細(xì)列出,以供維護(hù)人員定位故障時間和故障的嚴(yán)重程度。
該監(jiān)控系統(tǒng)已經(jīng)在Windows、Linux、Unix、Vxworks等系統(tǒng)平臺上進(jìn)行過穩(wěn)定性測試,可正常使用。筆者針對測試過程中遇到的一些問題做如下總結(jié),以供參考。
在發(fā)送端上,往返時間的計算結(jié)果有時可能為0 ms。這是因為程序所在的某些服務(wù)器CPU時間精度最低只能到10ms級,低于10ms的時間精度無法取得,只能以數(shù)字0代替。
測試發(fā)現(xiàn),通常第1個響應(yīng)消息的往返時間值要比其他的大。這是由于目的端的硬件地址不在ARP高速緩存中的緣故。在發(fā)送第一個回顯請求之前要發(fā)送一個ARP請求并接收ARP應(yīng)答,這需要花費幾毫秒甚至幾十毫秒的時間。
在網(wǎng)絡(luò)運行中,正常工作狀態(tài)是:響應(yīng)時間趨近于0,報文丟失很少或沒有,并且報文按序抵達(dá)。如果報文丟失較多而響應(yīng)時間低或報文亂序抵達(dá),說明網(wǎng)絡(luò)硬件可能出錯。在以太網(wǎng)中,可能是線纜終端故障,線纜分段故障或中繼器故障。首先檢查線纜終端,它很容易出故障,尤其是終端器放在用戶可碰到的工作區(qū)中;然后看中繼器的工作狀態(tài),長時間使用的中繼器出問題的幾率也比較高。
如果在廣域網(wǎng)上進(jìn)行測試,則上述報文丟失較多而響應(yīng)時間低的現(xiàn)象可能屬于正常范圍。由于TCP/IP適用于不可靠網(wǎng)絡(luò),某些廣域網(wǎng)的報文丟失率可能較高。但是若對于安全級別要求較高的電信級網(wǎng)絡(luò)而言,上述現(xiàn)象一定表明出現(xiàn)網(wǎng)絡(luò)故障,需要馬上進(jìn)行問題排查。
四、應(yīng)用情況及其缺陷
現(xiàn)階段,該監(jiān)控方法已經(jīng)應(yīng)用于大唐電信SCDMA多組組網(wǎng)中,為核心交換網(wǎng)絡(luò)的底層傳輸系統(tǒng)提供監(jiān)控,在工程應(yīng)用中獲得了良好的效果。在給已開發(fā)的網(wǎng)絡(luò)管理系統(tǒng)項目中也使用了該監(jiān)控方法,對整個網(wǎng)絡(luò)的底層通信狀態(tài)進(jìn)行監(jiān)控。應(yīng)用前景及可擴展性都較好。
但是,該方法也存在一定的弊端。如果不能Ping到某臺主機,那么,就不能Telnet或FTP到那臺主機,即網(wǎng)絡(luò)可能存在問題。隨著Internet安全意識的增強,出現(xiàn)了提供訪問控制清單的路由器和防火墻。一臺主機的可達(dá)性可能不只取決于IP層是否可達(dá),還取決于使用何種協(xié)議及端口號。監(jiān)測程序的運行結(jié)果可能顯示某臺主機不可達(dá),但可以用Telnet遠(yuǎn)程登錄到該臺主機的25號端口(郵件服務(wù)器)。即此方法不適用于有防火墻和限制IP功能的網(wǎng)絡(luò)。要使用該模塊,必須關(guān)閉服務(wù)器上相應(yīng)的防火墻功能。
五、結(jié)束語
網(wǎng)絡(luò)傳輸層是整個現(xiàn)在通信系統(tǒng)的基礎(chǔ)和核心,其好壞直接影響到上層應(yīng)用程序?qū)崿F(xiàn)的質(zhì)量。利用ICMP協(xié)議開發(fā)的這種監(jiān)測方法提供了對底層傳輸物理設(shè)備(包括網(wǎng)卡、hub、路由器或者網(wǎng)線等物理設(shè)備)的實時監(jiān)測。并能滿足多服務(wù)器跨平臺的復(fù)雜組網(wǎng)監(jiān)控需求。
通過使用該監(jiān)測系統(tǒng),在網(wǎng)絡(luò)出現(xiàn)問題時,能迅速定位故障,以檢修或更換相應(yīng)的硬件設(shè)備,并通過配合其他診斷方法的使用查找詳細(xì)故障原因,從而大大減少了網(wǎng)絡(luò)故障排查時間,為設(shè)備維護(hù)減少了人力和物力的投入。
今后,可以通過給該系統(tǒng)擴展類似Windows系統(tǒng)下的tracert功能,使該監(jiān)控系統(tǒng)應(yīng)用于不同網(wǎng)段的高等級分級監(jiān)測,這樣將有助于更詳細(xì)地監(jiān)控整個商業(yè)運行網(wǎng)絡(luò)的狀態(tài),精確定位網(wǎng)絡(luò)故障。這種擴展有待于研究和開發(fā)。