千兆位以太網(wǎng)交換機(jī)關(guān)于遠(yuǎn)程網(wǎng)絡(luò)監(jiān)控代理的講解
千兆位以太網(wǎng)交換機(jī)關(guān)于遠(yuǎn)程網(wǎng)絡(luò)監(jiān)控代理的講解,對(duì)于千兆位以太網(wǎng)交換機(jī)RMON代理問(wèn)題,大家都很感興趣。在向大家詳細(xì)介紹如何運(yùn)用遠(yuǎn)程網(wǎng)絡(luò)監(jiān)控代理之前,首先讓大家了解下一般RMON的基本知識(shí),然后比較下面幾種方法的優(yōu)劣。
遠(yuǎn)程網(wǎng)絡(luò)監(jiān)控(RMON)是對(duì)SNMP最重要的增強(qiáng)。本文介紹了在Nucleus嵌入式實(shí)時(shí)操作系統(tǒng)下,一個(gè)千兆位以太網(wǎng)交換機(jī)RMON代理的實(shí)現(xiàn)。在討論了千兆位以太網(wǎng)交換機(jī)網(wǎng)絡(luò)管理軟件的結(jié)構(gòu)基礎(chǔ)上,對(duì)RMON代理的軟硬件平臺(tái)進(jìn)行了簡(jiǎn)單介紹,并對(duì)RMON代理的統(tǒng)計(jì)、歷史、事件、警報(bào)四組功能實(shí)現(xiàn)的任務(wù)流程進(jìn)行詳細(xì)討論。
目前,計(jì)算機(jī)網(wǎng)絡(luò)中使用最廣泛的網(wǎng)絡(luò)管理協(xié)議是簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議SNMP。遠(yuǎn)程網(wǎng)絡(luò)監(jiān)控RMON是對(duì)SNMP最重要的增強(qiáng)。它采用典型的客戶機(jī)/服務(wù)器模型,客戶端為網(wǎng)絡(luò)管理者(管理站),RMON代理則扮演服務(wù)器的角色。管理站對(duì)RMON代理進(jìn)行數(shù)據(jù)收集配置;代理收集本網(wǎng)段的數(shù)據(jù),并將重要信息和事件報(bào)告給管理站。
RMON代理的實(shí)現(xiàn)有兩種方式:
使用一個(gè)具有完整的軟硬件系統(tǒng)的獨(dú)立設(shè)備作為遠(yuǎn)程監(jiān)視器;嵌入到網(wǎng)絡(luò)中的關(guān)鍵設(shè)備如集線器、千兆位以太網(wǎng)交換機(jī)中,稱為嵌入式代理。嵌入式代理作為系統(tǒng)功能的一部分,使用專用于監(jiān)視功能的處理器和內(nèi)存資源。
當(dāng)前計(jì)算機(jī)網(wǎng)絡(luò)的規(guī)模越來(lái)越大,應(yīng)用越來(lái)越廣泛,對(duì)于網(wǎng)絡(luò)可管理性的要求也就越來(lái)越高。網(wǎng)絡(luò)管理者必須對(duì)網(wǎng)絡(luò)的活動(dòng)有全面、及時(shí)的掌握。于是,在網(wǎng)絡(luò)重要節(jié)點(diǎn)布置能夠智能地采集數(shù)據(jù)的RMON代理是非常重要的?,F(xiàn)在越來(lái)越多的網(wǎng)絡(luò)設(shè)備中加入嵌入式RMON代理模塊,用以對(duì)網(wǎng)絡(luò)管理提供強(qiáng)大的支持。以下就千兆位以太網(wǎng)交換機(jī)中的嵌入式RMON代理的設(shè)計(jì)與實(shí)現(xiàn)進(jìn)行討論。
一、系統(tǒng)接口
本文設(shè)計(jì)的嵌入式RMON代理是千兆位以太網(wǎng)交換機(jī)網(wǎng)絡(luò)管理軟件的一個(gè)模塊,它需要自下而上分層次地和以下模塊協(xié)同工作。
◆以太網(wǎng)底層驅(qū)動(dòng)
RMON代理的工作基本上是對(duì)網(wǎng)段上數(shù)據(jù)包的監(jiān)測(cè)。網(wǎng)絡(luò)底層的工作由端口控制芯片完成,通過(guò)底層驅(qū)動(dòng)程序?yàn)樯蠈榆浖峁﹥煞N接口:獲取數(shù)據(jù)包和獲取以太網(wǎng)統(tǒng)計(jì)計(jì)數(shù)。
◆SNMP,UDP,IP
RMON只是對(duì)SNMP的增強(qiáng),一個(gè)基本的SNMP代理及SNMP下的各層協(xié)議都是必不可少的。RMON與SNMP通過(guò)MIB進(jìn)行交互,管理站對(duì)RMON代理的配置和對(duì)代收集的數(shù)據(jù)的獲取都是通過(guò)SNMP完成的。當(dāng)某些異常情況發(fā)生時(shí),代理需要主動(dòng)向管理站報(bào)告,因此SNMP還要提供發(fā)送SNMP陷阱(Trap)消息的接口。
◆管理信息庫(kù)
為實(shí)現(xiàn)RMON功能,管理信息庫(kù)應(yīng)包含MIBII所定義的各個(gè)對(duì)象。RMON所使用的MIB對(duì)象必須是SNMP能夠識(shí)別的,管理信息庫(kù)為SNMP和RMON提供讀寫的接口。
二、底層硬件支持與操作系統(tǒng)
RFC1757定義了RMON的九組功能及相應(yīng)的MIB結(jié)構(gòu)。本文設(shè)計(jì)的嵌入式RMON代理實(shí)現(xiàn)統(tǒng)計(jì)、歷史、警報(bào)和事件四組功能,是利用Galileo Techniology的千兆位以太網(wǎng)交換端口控制芯片GT-48320A,在嵌入式操作系統(tǒng)Nucleus Plus上開發(fā)的。
GT-48320A提供對(duì)RMON這基本四組功能的支持,在它的以太網(wǎng)維護(hù)有一套32位MIB計(jì)數(shù)器,對(duì)經(jīng)過(guò)該端口的以太網(wǎng)漢量進(jìn)行統(tǒng)計(jì)。這些計(jì)數(shù)器在GT-48320A的只讀寄存Port Counter Block中,地址為0x0100-0x0163。#p#
可以根據(jù)地址通過(guò)芯片定義的LW-Wire消息向GT-48320A發(fā)出讀取計(jì)數(shù)器請(qǐng)求,GT-48320A以Block-Write消息將所請(qǐng)求的計(jì)數(shù)器值返回。獲取計(jì)數(shù)器值的具體操作由底層驅(qū)動(dòng)程序?qū)崿F(xiàn)。
GT-48320A提供兩種讀取數(shù)據(jù)模式,通過(guò)芯片寄存器Global-Control的MIBCrMode位(Global-Control<23>)設(shè)定:該位置0時(shí),數(shù)據(jù)被讀取后就被清零;置1時(shí),數(shù)據(jù)被讀取后不清除。考慮到計(jì)數(shù)器容量的限制,我們采用清零方式。這樣,定時(shí)讀取這些計(jì)數(shù)器的值,將它們累積起來(lái),就可以得到實(shí)現(xiàn)統(tǒng)計(jì)、歷史、事件、警報(bào)四組功能所需的數(shù)據(jù)。
Nucleus Plus是專門為嵌入式系統(tǒng)的開發(fā)而設(shè)計(jì)的多任務(wù)實(shí)時(shí)操作系統(tǒng)。除提供具有搶先機(jī)制的任務(wù)調(diào)度外,Nucleus Plus還提供任務(wù)間通信、任務(wù)同步、定時(shí)和內(nèi)存管理。Nucleus Plus通常作為一個(gè)C的庫(kù),在它上面開發(fā)的實(shí)時(shí)應(yīng)用程序與該庫(kù)鏈接,生成的對(duì)象下載到目標(biāo)主機(jī)中成為嵌入式系統(tǒng)。
從軟件開發(fā)的角度來(lái)看,Nucleus Plus減少了任務(wù)的相互依賴,增強(qiáng)了模塊性,縮短了開發(fā)時(shí)間,十分適合作為嵌入式RMON代理的操作系統(tǒng)平臺(tái)。RMON代理的各組功能由若干Nucleus任務(wù)構(gòu)成。各任務(wù)及其需要使用的系統(tǒng)資源,如事件組和消息隊(duì)列等都在應(yīng)用程序初始化時(shí)創(chuàng)建。
三、RMON各組功能的實(shí)現(xiàn)
◆統(tǒng)計(jì)組
統(tǒng)計(jì)組的功能是維護(hù)代理監(jiān)視的每一子網(wǎng)的基本統(tǒng)計(jì)信息,需要定時(shí)獲取端口芯片寄存器的統(tǒng)計(jì)計(jì)數(shù)值。因此,統(tǒng)計(jì)組需用使用一個(gè)定時(shí)器和一個(gè)Nucleus事件組。定時(shí)器周期為讀寄存器的周期。定時(shí)器計(jì)時(shí)到期時(shí),執(zhí)行定時(shí)器完成函數(shù),使用系統(tǒng)函數(shù)NU-Set-Events()向事件組發(fā)送一個(gè)事件,通知統(tǒng)計(jì)任務(wù)開始對(duì)這一周期的數(shù)據(jù)進(jìn)行采集。
統(tǒng)計(jì)組任務(wù)執(zhí)行以下操作:
在任務(wù)初始化時(shí),要將寄存器Global-Control置0,并執(zhí)行一次對(duì)所有計(jì)數(shù)器的讀操作以將它們清零。任務(wù)初始化時(shí)還要?jiǎng)?chuàng)建所需的定時(shí)器,創(chuàng)建定時(shí)器的系統(tǒng)函數(shù)為NU-CreateTimer()。然后循環(huán)執(zhí)行千兆位以太網(wǎng)交換機(jī)以下操作:
◆調(diào)用系統(tǒng)的NU-Retrieve-Events()函數(shù),從事件組接收事件。如果沒有事件,任務(wù)將阻塞于該操作。
◆讀取MIB統(tǒng)計(jì)表每一行的etherStatsDataSource值,獲知要監(jiān)視哪些端口。
◆調(diào)用底層驅(qū)動(dòng)接口函數(shù),讀入所需的被監(jiān)視端口寄存器中MIB計(jì)數(shù)器的值。
◆將數(shù)據(jù)累加寫入MIB相應(yīng)的統(tǒng)計(jì)組變量中。
由于GT-48320A的MIB計(jì)數(shù)器為32位,因此統(tǒng)計(jì)以太網(wǎng)流量的計(jì)數(shù)器只能統(tǒng)計(jì)232字節(jié),即32Gbit。對(duì)于一個(gè)千兆位端口,若端口流量達(dá)到1Gbit/s,該計(jì)數(shù)器在32秒后就會(huì)溢出。因此可以將讀取MIB計(jì)數(shù)器的間隔缺省值取為30秒。
◆歷史組
歷史組的功能是周期性地對(duì)以太網(wǎng)一個(gè)或多個(gè)端口的統(tǒng)計(jì)樣本進(jìn)行采樣,得到各時(shí)間段內(nèi)的網(wǎng)絡(luò)信息,并將這些歷史統(tǒng)計(jì)保存起來(lái)。RFC1757中定義歷史組的MIB,由兩個(gè)表組成:歷史控制表,其每一行定義一個(gè)對(duì)特定端口以特定采樣間隔進(jìn)行采樣的功能;歷史數(shù)據(jù)表,其用于記錄采樣得到的數(shù)據(jù),每一樣本被收集后,儲(chǔ)存于歷史數(shù)據(jù)表新的一行中。
歷史數(shù)據(jù)表采用環(huán)行桶結(jié)構(gòu),當(dāng)已經(jīng)保存的歷史數(shù)據(jù)的行數(shù)達(dá)到***值后,新的數(shù)據(jù)將覆蓋最老的一行。在具體實(shí)現(xiàn)中,管理站通過(guò)SNMP在歷史控制表中設(shè)置所需的歷史采樣功能,RMON代理要做的工作便是根據(jù)歷史控制表完成統(tǒng)計(jì)數(shù)據(jù)的采樣,并將結(jié)果保存于歷史數(shù)據(jù)表中。使用如下數(shù)據(jù)結(jié)構(gòu)的鏈表作為歷史參數(shù)表,保存已定義的每一歷史統(tǒng)計(jì)任務(wù)的有關(guān)信息。
struct HISTORY-TEMP
{
struct HISTORY-TEMP * next;
UNSIGNED history-indes; / * 該歷史序號(hào) * /
UNSIGNED sample-indes; / * 上次采樣序號(hào) * /
UNWIGNED buckets-requested; / * 該歷史請(qǐng)求保存多少行采樣 * /
UNSIGNED time-start; / * 記錄采樣間隔開始時(shí)間(秒) * /
UNSIGNED octets; / * 記錄采樣間隔開始時(shí)的統(tǒng)計(jì)數(shù)據(jù) * /
UNSIGNED pkts;
UNSIGNED broadcastpkts;
UNSIGNED multicastpkts;
UNSIGNED crcerror;
UNSIGNED undersizepkts;
UNSIGNED oversizepkts;
UNSIGNED fragment;
UNSIGNED jabbers;
UNSIGNED collisions;
UNSIGNED timer; / * 該歷史所用定時(shí)器 * /
};#p#
歷史組由千兆位以太網(wǎng)交換機(jī)兩個(gè)任務(wù)組成:歷史控制任務(wù)和歷史監(jiān)視任務(wù)。當(dāng)SNMP代理接受管理站請(qǐng)求執(zhí)行了對(duì)MIB的操作后,產(chǎn)生一個(gè)事件,由該事件激活歷史控制任務(wù),歷史控制任務(wù)完成以下循環(huán)操作:
◆獲取事件。如果沒有事件,阻塞于該操作。
◆檢查控制表是否有新的歷史統(tǒng)計(jì)任務(wù)加入。如果有,需要為該新的歷史統(tǒng)計(jì)任務(wù)進(jìn)行參數(shù)設(shè)置和保存,并建立一個(gè)定時(shí)器。定時(shí)周期為歷史控制表中HistoryControlInterval的值。定時(shí)完了數(shù)向歷史組消息隊(duì)列發(fā)一消息,消息值為該歷史的索引值。
◆檢查歷史控制表已定義的歷史中historyXontrolBucketsRequested是否被管理站修改。發(fā)果有,需要對(duì)環(huán)行桶的大小進(jìn)行調(diào)整。
◆檢查歷史控制表中是否有已定義的歷史統(tǒng)計(jì)被管理站刪除。如果有,按如下順序?qū)υ摎v史統(tǒng)計(jì)進(jìn)行刪除:刪除歷史數(shù)據(jù)表中相應(yīng)的數(shù)據(jù)行,刪除定時(shí)器,刪除參數(shù)表中相應(yīng)的節(jié)點(diǎn)。
歷史組監(jiān)視任務(wù)執(zhí)行以下循環(huán)操作:
◆從消息隊(duì)列接收定時(shí)器的消息,如果沒有消息,阻塞于該操作。接收消息的系統(tǒng)函數(shù)為NUReceive-From-Queue()。
◆從消息內(nèi)容獲知要監(jiān)視的端口,從該端口讀取統(tǒng)計(jì)組中所需的十項(xiàng)數(shù)據(jù),與參數(shù)表保存的上一次讀取的數(shù)據(jù)相減得到差值,并由下式計(jì)算etherHistoryUtilization:Utilization=Pkts*(9.6+6.4)+(Octets*.8)/Interval*10,000其中Interval為一個(gè)采樣周期(秒數(shù))。
◆將以上結(jié)果寫到歷史數(shù)據(jù)表的相應(yīng)位置,然后用本次讀到的統(tǒng)計(jì)數(shù)據(jù)替換參數(shù)表中的原有數(shù)據(jù),供下一周期使用。讀取當(dāng)前時(shí)間,將原時(shí)間記錄time-strart替換。
◆事件組
由事件組決定當(dāng)監(jiān)測(cè)變量超限時(shí),是采用記錄日志,還是產(chǎn)生SNMP陷阱消息。該組與警報(bào)組一起實(shí)現(xiàn),沒有專門的事件組任務(wù)。
◆警報(bào)組
利用警報(bào)組和事件組,可以實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)的預(yù)警管理。網(wǎng)絡(luò)管理者可以根據(jù)網(wǎng)絡(luò)的應(yīng)用需要對(duì)網(wǎng)絡(luò)中比較敏感的參數(shù)設(shè)置門限,例如利用率、出錯(cuò)率等。當(dāng)門限被越過(guò)時(shí),代理就會(huì)將情況記錄下來(lái),或向注冊(cè)的管理站發(fā)送一個(gè)SNMP陷阱(trap)消息,通知管理站,網(wǎng)絡(luò)某項(xiàng)參數(shù)出現(xiàn)異常,需要進(jìn)一步的處理。
RFC1757中定義警報(bào)組的MIB是由一個(gè)警報(bào)表組成。管理站對(duì)一個(gè)報(bào)警任務(wù)的定義,就通過(guò)設(shè)置該表完成。警報(bào)組的工作就是周期性檢查管理站指定的參數(shù),將它們與給定的門限比較。比較的方式有兩種:用絕對(duì)值進(jìn)行比較,或用差值進(jìn)行比較。如果超過(guò)了門限,則會(huì)產(chǎn)生一個(gè)事件,并根據(jù)事件組的設(shè)定決定進(jìn)行日志記錄還是向管理站報(bào)告。
警報(bào)組也需要使用一個(gè)鏈表作為狀態(tài)參數(shù)表,用于保存一些中間結(jié)果。其數(shù)據(jù)結(jié)構(gòu)如下:
struct ALARM_TEMP
{
struct ALARM_TEMP * next;
UNSIGNED alarm_index; / * 該警報(bào)序號(hào) * /
UNSIGNED samlpe_type; / * 以絕對(duì)值(0)比較還是以差值(1)比較 * /
UNSIGNED alarm_status; / * 警報(bào)所處狀態(tài):上升(1)或下降(2)。初值為0 * /
UNSIGNED sample0; / * 上次采樣值,用于計(jì)算差值。初值為0 * /
NU_TIMER timer; / * 該警報(bào)所用定時(shí)器 * /
};
警報(bào)組由兩個(gè)任務(wù)組成:一個(gè)警報(bào)控制任務(wù),一個(gè)警報(bào)監(jiān)視任務(wù)。當(dāng)SNMP代理執(zhí)行了對(duì)MIB的操作后,會(huì)產(chǎn)生一個(gè)事件,由該事件激活警報(bào)控制任務(wù)。#p#
千兆位以太網(wǎng)交換機(jī)警報(bào)控制任務(wù)執(zhí)行以下操作:
◆獲取事件。如果沒有事件,阻塞于該操作。
◆通過(guò)狀態(tài)參數(shù)表與警報(bào)表比較,檢查是否有新的警報(bào)任務(wù)中入。若有,要對(duì)這個(gè)新的警報(bào)任務(wù)進(jìn)行初始化,首先獲取該警報(bào)的監(jiān)視對(duì)象alarm Variable,檢查其標(biāo)識(shí)符是否存在于MIB中,并且其值是否由ASN.1的INTEGER類型表示,否則無(wú)法進(jìn)行監(jiān)視。然后在警報(bào)狀態(tài)參數(shù)表中為新警報(bào)增加一個(gè)節(jié)點(diǎn),并為該警報(bào)創(chuàng)建一個(gè)定時(shí)器:
◆若alarmSampleType值為1,則定時(shí)間隔為設(shè)定的采樣間隔alarmInterval;若alarmSampleType值為2,則定時(shí)間隔為設(shè)定的采樣間隔alarmInterval/2。定時(shí)到期函數(shù)向警報(bào)組消息隊(duì)列發(fā)一消息,消息值為該警報(bào)的索引值alarmIndex。***讀取MIB中被監(jiān)視對(duì)象的值,將其保存到alarmValue中,并檢查該當(dāng)前值是否產(chǎn)生警報(bào)。
◆檢查是否有已定義的警報(bào)被刪除。若有,刪除相應(yīng)的定時(shí)器,然后刪除警報(bào)狀態(tài)參數(shù)表中相應(yīng)的節(jié)點(diǎn)。
千兆位以太網(wǎng)交換機(jī)警報(bào)監(jiān)視任務(wù)執(zhí)行以下循環(huán):
◆從警報(bào)消息隊(duì)列接收定時(shí)器的消息,從消息中得到警報(bào)索引;
◆由索引在警報(bào)表中得到監(jiān)視的端口及監(jiān)視的對(duì)象標(biāo)識(shí)符,由該標(biāo)識(shí)符讀取MIB中的值sample;
◆檢查是否產(chǎn)生警報(bào);
◆將此次讀到的值保存到alarmValue中。
下面介紹如何檢查千兆位以太網(wǎng)交換機(jī)是否產(chǎn)生了警報(bào)機(jī)制:
由MIB中警報(bào)組的對(duì)象alarmStartupAlarm和alarm-status的值共同決定能產(chǎn)生什么警報(bào)。alarmStartupAlarm為由管理站設(shè)定的警報(bào)類型,在監(jiān)視過(guò)程中不變。值為1時(shí),允許上升警報(bào);為2時(shí),允許下降警報(bào);為0時(shí),兩種警報(bào)都允許。
alarm-status指示警報(bào)所處狀態(tài),初值為0,兩種警報(bào)都允許產(chǎn)生。當(dāng)產(chǎn)生一個(gè)上升警報(bào)時(shí),將alarm-status值設(shè)為2,只允許下降警報(bào);當(dāng)產(chǎn)生一個(gè)下降警報(bào)時(shí),將alarm-status值設(shè)為1,只允許上升警報(bào)。這樣是為了避免因?yàn)槎秳?dòng)而使同樣的警報(bào)反復(fù)發(fā)生。
由alarmSampleType決定是以采樣絕對(duì)值還是以差值來(lái)與閥值比較:如果使用采樣絕對(duì)值,在只允許上升警報(bào)時(shí),將采樣值sample與MIB中上升警報(bào)門限alarmRisingThreshold比較,若大于門限,產(chǎn)生上升警報(bào);只允許下降警報(bào)時(shí),將采樣值與下降警報(bào)門限alarmFallingThreshold比較,若小于門限,產(chǎn)生下降警報(bào);兩種警報(bào)都允許時(shí),兩種比較都要進(jìn)行。
如果使用采樣差值,由sample-samlpe0得到差值。再按與上面同樣方法進(jìn)行比較。比較完成后,將當(dāng)前的alarmValue值賦給參數(shù)表中的sample0。當(dāng)檢查到一個(gè)警報(bào)發(fā)生時(shí),根據(jù)警報(bào)表中的事件索引在事件組MIB中找到相應(yīng)事件的定義,決定進(jìn)行日志的記錄還是發(fā)送SNMP trap消息。
四、結(jié)束語(yǔ)
在交換式環(huán)境下,為了能夠連續(xù)監(jiān)視流量,需要在每個(gè)交換端口上嵌入RMON的基本四組(統(tǒng)計(jì)、歷史、警報(bào)和事件組)功能。有了這關(guān)鍵的四組RMON功能,對(duì)網(wǎng)絡(luò)連續(xù)實(shí)時(shí)的監(jiān)視、歷史流量統(tǒng)計(jì)以及警報(bào)和預(yù)警功能就都可以實(shí)現(xiàn)了。由于對(duì)流量的統(tǒng)計(jì)計(jì)數(shù)已經(jīng)可以由ASIC實(shí)現(xiàn),將RMON基本的四組功能嵌入千兆位以太網(wǎng)交換機(jī),僅占用千兆位以太網(wǎng)交換機(jī)中很小的資源。
而RMON其他的功能組(如數(shù)據(jù)包的過(guò)濾和捕獲)需要更高的CPU的內(nèi)存資源。將這樣的功能組放到一個(gè)功能更強(qiáng)大,但成本更高的外置式可移動(dòng)RMON監(jiān)視器上,可以獲得更高的性價(jià)比。本文介紹的千兆位以太網(wǎng)交換機(jī)嵌入式RMON代理,實(shí)現(xiàn)RMON的基本四組功能。
當(dāng)然在有需求及系統(tǒng)資源允許,底層硬件支持的情況下,將RMON所有的九組功能都嵌入千兆位以太網(wǎng)交換機(jī),也是可以實(shí)現(xiàn)的。并且RMON技術(shù)也在不斷發(fā)展完善中,RMONII以及SMON技術(shù)的出現(xiàn)都大大加強(qiáng)了RMON所提供的網(wǎng)絡(luò)監(jiān)視功能。設(shè)計(jì)者應(yīng)根據(jù)不同的網(wǎng)絡(luò)應(yīng)用的需要,選擇將RMON合適的功能嵌入網(wǎng)絡(luò)設(shè)備中。