SNMP:简单网络管理协议(一)
1.引言
基于TCP/IP的網絡管理包含兩個部分:網絡管理站(也叫管理進程,manager)和被管的網絡單元(也叫被管設備)。被管的設備種類繁多,例如:路由器、X終端、終端服務器和打印機等。這些被管設備的共同點就是都運行TCP/IP協議。被管設備端和關聯相關的軟件叫做代理程序(agent)或代理進程。管理站一般都是帶有色彩監視器的工作站,可以顯示所有被管理設備的狀態(例如連接是否掉線、各種連接上的流量狀況等)。
管理進程和代理進程之間的通信可以有兩種方式。一種是管理進程向代理進程發出請求,詢問一個具體的參數值(例如:你產生了多少個不可達的ICMP端口?)。另外一種方式是代理進程主動向管理進程報告有某些重要的事件發生(例如:一個連接口掉線了)。當然,管理進程除了可以向代理進程詢問某些參數值以外,它還可以按要求改變代理進程的參數值(例如:把默認的IP TTL值改為64)。
基于TCP/IP的網絡管理包含3個組成部分:
1)一個管理信息庫MIB(Management Information Base)。管理信息庫包含所有代理進程的所有可被查詢和修改的參數。RFC 1213 [McCloghrie and Rose 1991]定義了第二版的MIB,叫做MIB-II。
2)關于MIB的一套共用的結構和表示符號。叫做管理信息結構SMI(Structure of Management Information)。這個在RFC 1155[Rose and McCloghrie]中定義。例如:SMI定義計數器是一個非負整數,它的計數范圍是0~4 294 967 295,當達到最大值時,又從0開始計數。
3)管理進程和代理進程之間的通信協議,叫做簡單網絡管理協議SNMP(Simple Network Management Protocol)。在RFC 1157[Case et a1. 1990]中定義。SNMP包括數據報交換的格式等。盡管可以在運輸層采用各種各樣的協議,但是在SNMP中,用的最多的協議還是UDP。
上面提到的RFC所定義的SNMP叫做SNMP v1,或者就叫做SNMP。到1993年為止,又有一些新的關于SNMP的RFC發表。在這些RFC中定義的SNMP叫做第二版SNMP(SNMP v2)。
2.協議
關于管理進程和代理進程之間的交互信息,SNMP定義了5種報文:
1)get-request操作:從代理進程處提取一個或多個參數值。
2)get-next-request操作:從代理進程處提取一個或多個參數的下一個參數值 (關于"下一個(next)"的含義將在后面介紹)。
3)set-request操作:設置代理進程的一個或多個參數值。
4)get-response操作:返回的一個或多個參數值。這個操作是由代理進程發出的。它是前面3中操作的響應操作。
5)trap操作:代理進程主動發出的報文,通知管理進程有某些事情發生。
前面的3個操作是由管理進程向代理進程發出的。后面兩個是代理進程發給管理進程的(為簡化起見,前面3個操作今后叫做get、get-next和set操作)。圖1描述了這5種操作。
圖1
這些操作中的前4種操作是簡單的請求應答方式,而且在SNMP中往往使用UDP協議,所以可能發生管理進程和代理進程之間數據包丟失的情況。因此一定要有超時和重傳機制。
管理進程發出的前面3種操作采用UDP的161端口。代理進程發出Trap操作采用UDP的162端口。由于收發采用了不同的端口號,所以一個系統可以同時為管理進程和代理進程
圖2是封裝成UDP數據報的5種操作的SNMP報文格式。
圖2 SNMP報文的格式
在圖中,我們僅僅對IP和UDP的首部長度進行了標注。這是由于:SNMP報文的編碼采用了ASN.1和BER,這就使得報文的長度取決于變量的類型和值。關于ASN.1和BER的內容將在后面介紹。在這里介紹各個字段的內容和作用。
圖3顯示各種PDU對應的值(PDU即協議數據單元,也就是分組)。
圖3 SNMP報文中的PDU類型
共同體字段是一個字符串。這是管理進程和代理進程之間的口令,是明文格式。默認的值是public。
對于get、get-next和set操作,請求標識由管理進程設置,然后由代理進程在get-response中返回。這種類型的字段我們在其他UDP應用中曾經見過。這個字段的作用是使客戶進程(在目前情況下是管理進程)能夠將服務器進程(即代理進程)發出的響應和客戶進程發出的查詢進行匹配。這個字段允許管理進程對一個或多個代理進程發出多個請求,并且從返回的眾多應答中進行分類。
差錯狀態字段是一個整數,它是由代理進程標注的,指明有差錯發生。圖4是參數值、名稱和描述之間的對應關系。
圖4 SNMP差錯狀態的值
差錯索引字段是一個整數偏移量,指明當有差錯發生時,差錯發生在哪個參數。它是由代理進程標注的,并且只有在發生noSuchName、readOnly和badValue差錯時才進行標注。
在get、get-next和set的請求數據報中,包含變量名稱和變量值的一張表。對于get和get-next操作,變量值部分被忽略,也就是不需要填寫。
對于trap操作符(PDU類型是4),SNMP報文格式有所變化。
3.管理信息結構
?SNMP中,數據類型并不多。在本節,我們就討論這些數據類型,而不關心這些數據類型在實際中是如何編碼的。
- INTEGER。一個變量雖然定義為整型,但也有多種形式。有些整型變量沒有范圍限制,有些整型變量定義為特定的值(例如,IP的轉發標志就只有允許轉發時的1或者不允許轉發時的2這兩種),有些整型變量定義為一個特定的范圍(例如,UDP和TCP的端口號就從0到65535)。
- OCTER STRING 0或多個8 bit字節,每個字節值在0~255之間。對于這種數據類型和下一種數據類型的BER編碼,字符串的字節個數要超過字符串本身的長度。這些字符串不是以NULL結尾的字符串。
- OBJECT IDENTIFIER 將在下一節中介紹。
- NULL。代表相關的變量沒有值。例如,在get和get-next操作中,變量的值就是NULL,因為這些值還有待到代理進程處去取。
- IpAddress。4字節長度的OCTER STRING,以網絡序表示的IP地址。每個字節代表IP地址的一個字段。
- PhysAddress。OCTER STRING類型,代表物理地址(例如以太網物理地址為6字節長度)。
- Counter。非負的整數,可從0遞增到232-1(4 294 976 295)。達到最大值后歸0。
- Gauge。非負的整數,取之范圍為從0到4 294 976 295(或增或減)。達到最大值后鎖定,直到復位。例如,MIB中的tcpCurrEstab就是類型的變量的一個例子,它代表目前在ESTABLISHED或CLOSE_WAIT狀態的TCP連接數。
- TimeTicks。時間計數器,以0.01秒為單位遞增,但是不同的變量可以有不同的遞增幅度。所以在定義這種類型的變量的時候,必須指定遞增幅度。例如,MIB中的sysUpTime變量就是這種類型的變量,代表代理進程從啟動開始的時間長度,以多少個百分之一秒的數目來表示。
- SEQUENCE。這一數據類型與C程序設計語言中的"structure"類似。一個SEQUENCE包括0個或多個元素,每一個元素又是另一個ASN.1數據類型。例如,MIB中的UdpEntry就是這種類型的變量。它代表在代理進程側目前"激活"的UDP數量("激活"表示目前被應用程序所用)。在這個變量中包含兩個元素:
- SEQUENDE OF。這是一個向量的定義,其所有元素具有相同的類型。如果每一個元素都具有簡單的數據類型,例如是整數類型,那么我們就得到一個簡單的向量(一個一維向量)。但是我們將看到,SNMP在使用這個數據類型時,其向量中的每一個元素是一個SEQUENCE(結構)。因而可以將它看成為一個二維數組或表。
總結
以上是生活随笔為你收集整理的SNMP:简单网络管理协议(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu五笔输入法安装_打造最强Wi
- 下一篇: HMM,MEMM,CRF模型的比较