国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 網絡通信 > 正文

千兆位以太網交換機嵌入式RMON代理的設計與實現

2019-11-03 10:16:58
字體:
來源:轉載
供稿:網友
梁曉江 黃本雄 黃載祿 楊立峰 華中科技大學電信系
  摘要:遠程網絡監控(RMON)是對SNMP最重要的增強。本文介紹了在Nucleus嵌入式實時操作系統下,一個千兆位交換機RMON代理的實現。在討論了交換機網絡管理軟件的結構基礎上,對RMON代理的軟硬件平臺進行了簡單介紹,并對RMON代理的統計、歷史、事件、警報四組功能實現的任務流程進行詳細討論。

  關鍵詞:網絡管理 遠程網絡監控 嵌入式代理

  目前,計算機網絡中使用最廣泛的網絡管理協議是簡單網絡管理協議SNMP。遠程網絡監控RMON是對SNMP最重要的增強。它采用典型的客戶機/服務器模型,客戶端為網絡管理者(管理站),RMON代理則扮演服務器的角色。管理站對RMON代理進行數據收集配置;代理收集本網段的數據,并將重要信息和事件報告給管理站。

  RMON代理的實現有兩種方式:

  1、使用一個具有完整的軟硬件系統的獨立設備作為遠程監視器;

  2、嵌入到網絡中的關鍵設備如集線器、交換機中,稱為嵌入式代理。嵌入式代理作為系統功能的一部分,使用專用于監視功能的處理器和內存資源。

  當前計算機網絡的規模越來越大,應用越來越廣泛,對于網絡可管理性的要求也就越來越高。網絡管理者必須對網絡的活動有全面、及時的掌握。于是,在網絡重要節點布置能夠智能地采集數據的RMON代理是非常重要的。現在越來越多的網絡設備中加入嵌入式RMON代理模塊,用以對網絡管理提供強大的支持。

  以下就千兆位以太網交換機中的嵌入式RMON代理的設計與實現進行討論。

  一、系統接口

  本文設計的嵌入式RMON代理是千兆位交換機網絡管理軟件的一個模塊,它需要自下而上分層次地和以下模塊協同工作。

  1、以太網底層驅動

  RMON代理的工作基本上是對網段上數據包的監測。網絡底層的工作由端口控制芯片完成,通過底層驅動程序為上層軟件提供兩種接口:獲取數據包和獲取以太網統計計數。

  2、SNMP,UDP,ip

  RMON只是對SNMP的增強,一個基本的SNMP代理及SNMP下的各層協議都是必不可少的。RMON與SNMP通過MIB進行交互,管理站對RMON代理的配置和對代收集的數據的獲取都是通過SNMP完成的。當某些異常情況發生時,代理需要主動向管理站報告,因此SNMP還要提供發送SNMP陷阱(Trap)消息的接口。

  3、管理信息庫

  為實現RMON功能,管理信息庫應包含MIBII所定義的各個對象。RMON所使用的MIB對象必須是SNMP能夠識別的,管理信息庫為SNMP和RMON提供讀寫的接口。

  二、底層硬件支持與操作系統

  RFC1757定義了RMON的九組功能及相應的MIB結構。本文設計的嵌入式RMON代理實現統計、歷史、警報和事件四組功能,是利用Galileo Techniology的千兆位以太網交換端口控制芯片GT-48320A,在嵌入式操作系統Nucleus Plus上開發的。

  GT-48320A提供對RMON這基本四組功能的支持,在它的以太網維護有一套32位MIB計數器,對經過該端口的以太網漢量進行統計。這些計數器在GT-48320A的只讀寄存器PortCounterBlock中,地址為0x0100-0x0163。可以根據地址通過芯片定義的LW-Wire消息向GT-48320A發出讀取計數器請求,GT-48320A以Block-Write消息將所請求的計數器值返回。獲取計數器值的具體操作由底層驅動程序實現。GT-48320A提供兩種讀取數據模式,通過芯片寄存器Global-Control的MIBCrMode位(Global-Control<23>)設定:該位置0時,數據被讀取后就被清零;置1時,數據被讀取后不清除。考慮到計數器容量的限制,我們采用清零方式。這樣,定時讀取這些計數器的值,將它們累積起來,就可以得到實現統計、歷史、事件、警報四組功能所需的數據。

  Nucleus Plus是專門為嵌入式系統的開發而設計的多任務實時操作系統。除提供具有搶先機制的任務調度外,Nucleus Plus還提供任務間通信、任務同步、定時和內存管理。Nucleus Plus通常作為一個C的庫,在它上面開發的實時應用程序與該庫鏈接,生成的對象下載到目標主機中成為嵌入式系統。從軟件開發的角度來看,Nucleus Plus減少了任務的相互依賴,增強了模塊性,縮短了開發時間,十分適合作為嵌入式RMON代理的操作系統平臺。

  RMON代理的各組功能由若干Nucleus任務構成。各任務及其需要使用的系統資源,如事件組和消息隊列等都在應用程序初始化時創建。

  三、RMON各組功能的實現

  1、統計組

  統計組的功能是維護代理監視的每一子網的基本統計信息,需要定時獲取端口芯片寄存器的統計計數值。因此,統計組需用使用一個定時器和一個Nucleus事件組。定時器周期為讀寄存器的周期。定時器計時到期時,執行定時器完成函數,使用系統函數NU-Set-Events()向事件組發送一個事件,通知統計任務開始對這一周期的數據進行采集。

  統計組任務執行以下操作:

  在任務初始化時,要將寄存器Global-Control置0,并執行一次對所有計數器的讀操作以將它們清零。任務初始化時還要創建所需的定時器,創建定時器的系統函數為NU-CreateTimer()。然后循環執行以下操作:

  (1)調用系統的NU-Retrieve-Events()函數,從事件組接收事件。如果沒有事件,任務將阻塞于該操作。

  (2)讀取MIB統計表每一行的etherStatsDataSource值,獲知要監視哪些端口。

  (3)調用底層驅動接口函數,讀入所需的被監視端口寄存器中MIB計數器的值。

  (4)將數據累加寫入MIB相應的統計組變量中。

  由于GT-48320A的MIB計數器為32位,因此統計以太網流量的計數器只能統計232字節,即32Gbit。對于一個千兆位端口,若端口流量達到1Gbit/s,該計數器在32秒后就會溢出。因此可以將讀取MIB計數器的間隔缺省值取為30秒。

  2、歷史組

  歷史組的功能是周期性地對以太網一個或多個端口的統計樣本進行采樣,得到各時間段內的網絡信息,并將這些歷史統計保存起來。

  RFC1757中定義歷史組的MIB,由兩個表組成:歷史控制表,其每一行定義一個對特定端口以特定采樣間隔進行采樣的功能;歷史數據表,其用于記錄采樣得到的數據,每一樣本被收集后,儲存于歷史數據表新的一行中。歷史數據表采用環行桶結構,當已經保存的歷史數據的行數達到最大值后,新的數據將覆蓋最老的一行。  在具體實現中,管理站通過SNMP在歷史控制表中設置所需的歷史采樣功能,RMON代理要做的工作便是根據歷史控制表完成統計數據的采樣,并將結果保存于歷史數據表中。

  使用如下數據結構的鏈表作為歷史參數表,保存已定義的每一歷史統計任務的有關信息。

struct HISTORY-TEMP
{
struct HISTORY-TEMP * next;
UNSIGNED history-indes; / * 該歷史序號 * /
UNSIGNED sample-indes; / * 上次采樣序號 * /
UNWIGNED buckets-requested; / * 該歷史請求保存多少行采樣 * /
UNSIGNED time-start; / * 記錄采樣間隔開始時間(秒) * /
UNSIGNED octets; / * 記錄采樣間隔開始時的統計數據 * /
UNSIGNED pkts;
UNSIGNED broadcastpkts;
UNSIGNED multicastpkts;
UNSIGNED crcerror;
UNSIGNED undersizepkts;
UNSIGNED oversizepkts;
UNSIGNED fragment;
UNSIGNED jabbers;
UNSIGNED collisions;
UNSIGNED timer; / * 該歷史所用定時器 * /
};
  歷史組由兩個任務組成:歷史控制任務和歷史監視任務。當SNMP代理接受管理站請求執行了對MIB的操作后,產生一個事件,由該事件激活歷史控制任務,歷史控制任務完成以下循環操作:

  (1)獲取事件。如果沒有事件,阻塞于該操作。

  (2)檢查控制表是否有新的歷史統計任務加入。如果有,需要為該新的歷史統計任務進行參數設置和保存,并建立一個定時器。定時周期為歷史控制表中HistoryControlInterval的值。定時完了數向歷史組消息隊列發一消息,消息值為該歷史的索引值。

  (3)檢查歷史控制表已定義的歷史中historyXontrolBucketsRequested是否被管理站修改。發果有,需要對環行桶的大小進行調整。

  (4)檢查歷史控制表中是否有已定義的歷史統計被管理站刪除。如果有,按如下順序對該歷史統計進行刪除:刪除歷史數據表中相應的數據行,刪除定時器,刪除參數表中相應的節點。

  歷史組監視任務執行以下循環操作:

  (1)從消息隊列接收定時器的消息,如果沒有消息,阻塞于該操作。接收消息的系統函數為NUReceive-From-Queue()。

  (2)從消息內容獲知要監視的端口,從該端口讀取統計組中所需的十項數據,與參數表保存的上一次讀取的數據相減得到差值,并由下式計算etherHistoryUtilization:

  Utilization=Pkts*(9.6+6.4)+(Octets*.8)/Interval*10,000

  其中Interval為一個采樣周期(秒數)。

  (3)將以上結果寫到歷史數據表的相應位置,然后用本次讀到的統計數據替換參數表中的原有數據,供下一周期使用。讀取當前時間,將原時間記錄time-strart替換。

  3、事件組

  由事件組決定當監測變量超限時,是采用記錄日志,還是產生SNMP陷阱消息。該組與警報組一起實現,沒有專門的事件組任務。

  4、警報組

  利用警報組和事件組,可以實現對網絡的預警管理。網絡管理者可以根據網絡的應用需要對網絡中比較敏感的參數設置門限,例如利用率、出錯率等。當門限被越過時,代理就會將情況記錄下來,或向注冊的管理站發送一個SNMP陷阱(trap)消息,通知管理站,網絡某項參數出現異常,需要進一步的處理。

  RFC1757中定義警報組的MIB是由一個警報表組成。管理站對一個報警任務的定義,就通過設置該表完成。警報組的工作就是周期性檢查管理站指定的參數,將它們與給定的門限比較。比較的方式有兩種:用絕對值進行比較,或用差值進行比較。如果超過了門限,則會產生一個事件,并根據事件組的設定決定進行日志記錄還是向管理站報告。

  警報組也需要使用一個鏈表作為狀態參數表,用于保存一些中間結果。其數據結構如下:

struct ALARM_TEMP
{
struct ALARM_TEMP * next;
UNSIGNED alarm_index; / * 該警報序號 * /
UNSIGNED samlpe_type; / * 以絕對值(0)比較還是以差值(1)比較 * /
UNSIGNED alarm_status; / * 警報所處狀態:上升(1)或下降(2)。初值為0 * /
UNSIGNED sample0; / * 上次采樣值,用于計算差值。初值為0 * /
NU_TIMER timer; / * 該警報所用定時器 * /
};

  警報組由兩個任務組成:一個警報控制任務,一個警報監視任務。

  當SNMP代理執行了對MIB的操作后,會產生一個事件,由該事件激活警報控制任務。

  警報控制任務執行以下操作:

  (1)獲取事件。如果沒有事件,阻塞于該操作。

  (2)通過狀態參數表與警報表比較,檢查是否有新的警報任務中入。若有,要對這個新的警報任務進行初始化,首先獲取該警報的監視對象alarm Variable,檢查其標識符是否存在于MIB中,并且其值是否由ASN.1的INTEGER類型表示,否則無法進行監視。然后在警報狀態參數表中為新警報增加一個節點,并為該警報創建一個定時器:若alarmSampleType值為1,則定時間隔為設定的采樣間隔alarmInterval;若alarmSampleType值為2,則定時間隔為設定的采樣間隔alarmInterval/2。定時到期函數向警報組消息隊列發一消息,消息值為該警報的索引值alarmIndex。最后讀取MIB中被監視對象的值,將其保存到alarmValue中,并檢查該當前值是否產生警報。

  (3)檢查是否有已定義的警報被刪除。若有,刪除相應的定時器,然后刪除警報狀態參數表中相應的節點。

  警報監視任務執行以下循環:

  (1)從警報消息隊列接收定時器的消息,從消息中得到警報索引;

  (2)由索引在警報表中得到監視的端口及監視的對象標識符,由該標識符讀取MIB中的值sample;

  (3)檢查是否產生警報;

  (4)將此次讀到的值保存到alarmValue中。

  下面介紹如何檢查是否產生了警報機制:

  (1)由MIB中警報組的對象alarmStartupAlarm和alarm-status的值共同決定能產生什么警報。

  * alarmStartupAlarm為由管理站設定的警報類型,在監視過程中不變。值為1時,允許上升警報;為2時,允許下降警報;為0時,兩種警報都允許。

  * alarm-status指示警報所處狀態,初值為0,兩種警報都允許產生。當產生一個上升警報時,將alarm-status值設為2,只允許下降警報;當產生一個下降警報時,將alarm-status值設為1,只允許上升警報。這樣是為了避免因為抖動而使同樣的警報反復發生。

  (2)由alarmSampleType決定是以采樣絕對值還是以差值來與閥值比較:

  * 如果使用采樣絕對值,在只允許上升警報時,將采樣值sample與MIB中上升警報門限alarmRisingThreshold比較,若大于門限,產生上升警報;只允許下降警報時,將采樣值與下降警報門限alarmFallingThreshold比較,若小于門限,產生下降警報;兩種警報都允許時,兩種比較都要進行。

  * 如果使用采樣差值,由sample-samlpe0得到差值。再按與上面同樣方法進行比較。比較完成后,將當前的alarmValue值賦給參數表中的sample0。

  當檢查到一個警報發生時,根據警報表中的事件索引在事件組MIB中找到相應事件的定義,決定進行日志的記錄還是發送SNMP trap消息。

  四、結束語

  在交換式環境下,為了能夠連續監視流量,需要在每個交換端口上嵌入RMON的基本四組(統計、歷史、警報和事件組)功能。有了這關鍵的四組RMON功能,對網絡連續實時的監視、歷史流量統計以及警報和預警功能就都可以實現了。由于對流量的統計計數已經可以由ASIC實現,將RMON基本的四組功能嵌入交換機,僅占用交換機中很小的資源。而RMON其他的功能組(如數據包的過濾和捕獲)需要更高的CPU的內存資源。將這樣的功能組放到一個功能更強大,但成本更高的外置式可移動RMON監視器上,可以獲得更高的性價比。本文介紹的以太網交換機嵌入式RMON代理,實現RMON的基本四組功能。當然在有需求及系統資源允許,底層硬件支持的情況下,將RMON所有的九組功能都嵌入交換機,也是可以實現的。并且RMON技術也在不斷發展完善中,RMONII以及SMON技術的出現都大大加強了RMON所提供的網絡監視功能。設計者應根據不同的網絡應用的需要,選擇將RMON合適的功能嵌入網絡設備中。

  摘自《數據通信》2000年第84期
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 牡丹江市| 石景山区| 象州县| 无锡市| 金寨县| 鹰潭市| 团风县| 彩票| 荣昌县| 越西县| 鹤岗市| 德州市| 玉龙| 清苑县| 高密市| 农安县| 高安市| 吴江市| 聂荣县| 灵丘县| 呼和浩特市| 上饶县| 陇南市| 普兰县| 崇仁县| 临泽县| 谷城县| 南川市| 枣阳市| 邹平县| 法库县| 景洪市| 龙井市| 介休市| 德令哈市| 黄大仙区| 镇巴县| 漾濞| 治县。| 洛浦县| 炉霍县|