
TCP/IP 網絡管理框架
SNMP 管理 TCP/IP 協議的運行,與 TCP/IP 協議運行有關的信息按照 SNMP 定義的管理信息結構存儲在管理信息庫中。Internet 中的網絡管理信息存儲在管理信息庫 MIB(Management Information Base)中。SNMP 總體架構由兩部分組成:一部分是管理信息庫結構的定義,另一部分是訪問管理信息庫的協議規范。
第一部分是 MIB 樹,各個代理中的管理數據由樹葉上的對象組成,樹的中間節點的作用是對管理對象進行分類。例如,與某一協議實體有關的全部信息位於指定的子樹上。樹結構為每個葉子節點指定唯一的路徑標識符,這個標識符是從樹根開始把各個數字串連起來形成的。
另一部分是 SNMP 協議支持的服務原語,這些原語用於管理站和代理之間的通信,以便查詢和改變管理信息庫中的內容。Get 操作用於檢索數據,Set 操作用於改變數據,GetNext 操作提供掃描MIB樹和連續檢索數據的方法,而 Trap 操作則提供從代理進程到管理站的異步報告機制。為了使管理站能夠及時而有效地對被管理設備進行監控,同時又不過分增加網絡的通信負載,必須使用陷入(Trap)制導的輪詢過程。過程為管理站啟動時,或每隔一定時間用 Get 操作輪詢一遍所有代理獲取某些關鍵的信息。得到基本數據后管理站就停止輪詢,轉而由代理進程負責在必要時向管理站報告異常事件。
Internet 最初的網絡管理框架由四個文件定義,RFC1155 定義了管理信息結構(SMI),規定了管理對象的語法和語義。RFC1212 說明了定義 MIB 模塊的方法,RFC1213 定義了 MIB-2 管理對象的核心集合,RFC1157 是 SNMPv1 協議的規范文件。
SNMP 協議體系結構
SNMP 為應用層協議,SNMP 實體向管理應用程序提供服務,它的作用是把管理應用程序的服務調用變成對應的 SNMP 協議數據單元,並利用 UDP 數據報發送出去。選擇 UDP 協議而不是 TCP 協議,是因為UDP 效率較高,這樣實現網絡管理不會太多地增加網絡負載。但由於 UDP 不可靠,所以 SNMP 報文容易丟失,因此對每個管理信息要裝配成單獨的數據報獨立發送,而且報文應短些。
每個代理進程與某些管理站建立團體(Community)關系,團體名作為團體的全局標識符進行身份認證。一般來說代理進程不接受沒有通過團體名驗證的報文,這樣可以防止未授權的管理命令。
對於非標准設備不能直接用 SNMP 進行管理,需要使用委托代理的進行管理,並代表這些設備接收管理站的查詢。委托代理起到了協議轉換的作用,和管理站之間按 SNMP 協議通信,與被管理設備之間則按專用的協議通信。
MIB 管理信息庫
MIB 結構
所謂“管理信息”就是指在互聯網的網管框架中被管對象的集合。被管對象必須維持可供管理程序讀寫的若干控制和狀態信息。這些被管對象構成了一個虛擬的信息存儲器,所以才稱為管理信息庫 MIB。管理程序就使用 MIB 中這些信息的值對網絡進行管理(如讀取或重新設置這些值),只有在 MIB 中的對象才是 SNMP 所能夠管理的。MIB 層次樹有 3 個作用:
- 表示管理和控制關系;
- 提供了結構化的信息組織技術;
- 提供了對象命名機制。
對象命名樹的根沒有名字,它的下面有三個頂級對象,都是世界上著名的標准制定單位,即 ITU-T(過去叫做 CCITT),ISO,以及這兩個組織的聯合體,它們的標號分別是 0 到 2。對象名習慣上用英文小寫表示,在 ISO 的下面的一個標號為 3 的節點是ISO認同的的組織成員 org。在其下面有一個美國國防部 dod(Department of Defense)的子樹(標號為 6),再下面就是 internet(標號為 1)在只討論 internet 中的對象時,可只畫出 internet 以下的子樹,並在 internet 節點旁邊寫上對象標識符
1.3.6.1 即可。在 internet 節點下面的標號為 2 的節點是 mgmt(管理)。再下面只有一個節點,即管理信息庫 mib-2,其對象標識符為 1.3.6.1.2.1。在 mib-2 下面包含了所有被 SNMP 管理的對象。
MIB 中的數據類型
MIB 中存儲的數據叫做對象,每個對象屬於一定的對象類型,並且有一個值。對象實例是對象類型的具體實現,只有實例才可以綁定到特定的值。MIB 對象的定義說明了被管理對象的類型、組成和值的范圍,以及與其他對象的關系。MIB 中使用了 ASN.1 的 5 種通用類型:
類型名 | 值集合 | 解釋 |
---|---|---|
整數 | 包括正負整數和 0 | INTEGER |
OCTET STRING | 位組串 | 由 8 位組構成的串 |
NULL | NULL | 不代表任何類型 |
OBJECT IDENTIFIER | 對象標識符 | MIB樹中的節點用分層的編號表示 |
SEQUENCE (OF) | 序列 | 任何類型組成的序列 |
同時 RFC1155 文件還根據網絡管理的需要定義了下列 6 種應用類型:
類型定義 | 解釋 |
---|---|
NetworkAddress :=CHOICE(internet IpAddress} | 從各種網絡地址中選擇一種 |
IpAddress =[APPLICATION O] IMPLICIT OCTET STRING(SIZE(4)) | 32 位的 IP 地址定義為 OCTET STRING 類型 |
Counter …=[APPLICATION 1]IMPLICIT INTRGER(0..4 294 967 295) | 計數器類型,非負整數,其值可增加不能減少,達到最大值 2^32-1 后回零 |
Gauge ::=[APPLICATION 2] INTEGER(0.4 294 967 295) | 計量器類型,非負整數,值可增加也可減少,達到最大值 2^32 - 1 后不回零 |
Time Ticks :=[APPLICATION 3] INTEGER(0..4 294 967 295) | 時鍾類型,非負整數,單位是百萬分之一秒,從某個事件開始到目前經過的時間 |
Opaque ::=[APPLICATION 4]OCTET STRING - arbitrary ASN.1 value | 未知數據類型,編碼時按 OCTET STRING 處理 |
管理信息結構定義
MIB 中包含各種各樣的被管理對象,這些被管理對象的語法、語義、訪問方法、實現約束都要進行詳細說明。RFC1155 文件給出了對象類型的宏定義,后經 RFC1212 進行了擴充,形成了 MIB-2 的對象類型定義如下:
OBJECT-TYPE MACRO::=
BEGIN
TYPE NOTATION::="SYNTAX"type(TYPE ObjectSyntax)
"ACCESS"Access
"STATUS" Status
DescrPart
ReferPart
IndexPart
DefValPart
VALUE NOTATION::=value (VALUE ObjectName)
對被管理對象定義的關鍵成分如下,其中對於 ACCESS,MIB 樹中的非葉子節點不能訪問。對於 STATUS 為過時表示老標准支持而新標准不支持的類型,可取消表示在將來的標准中可能被取消。
成分 | 解釋 |
---|---|
SYNTAX | 表示對象類型的抽象語法,為 5 種通用類型或者 6 種應用類型之一 |
ACCESS | 定義對象的訪問方式,可選擇的訪問方式有只讀、讀寫、只寫和不可訪問 4 種 |
STATUS | 說明實現是否支持這種對象,有必要的和任選的兩種支持程度 |
DesctPart | 任選,用文字說明對象類型的含義 |
ReferPart | 任選,用文字說明可參考在其他 MIB 模塊中定義的對象 |
IndexPart | 定義表對象的索引項 |
DefValPart | 任選,定義對象實例的默認值 |
VALUENOTATION | 指明對象的訪問名 |
當用一個具體的值代替宏定義中的變量或參數時就產生了宏實例,表示一個實際的 ASN.1 類型,並且規定了該類型可取的值的集合。如下是一個對象定義的例子,表示“TCP 最大連接數”,這是一個整數,訪問方式為“只讀”,它是必須實現的,是 tcp 子樹中的第 4 個節點。
tcpMaxConn OB.JECT-TYPE
SYNTAX INTEGER
ACCESS read-only
STATUS mandatory
DESCRIPTION
"The limit on the total number of TCP connection the entity can support."
::={tcp 4}
標量對象和表對象
對象實例的標識
SMI 只存儲標量對象和表對象,標量對象是簡單對象和列對象,而表對象是一個二維數組,表的定義要用到 ASN.1 的序列類型和對象類型宏定義中的索引部分。對象是由對象標識符(OBJECTIDENTIFIER)表示的,一個對象可以有各種值的實例。標量對象只有一個實例,在標量對象后的 oid 需要 .0 才能訪問實例。接下來解釋下表對象,是一個 TCP 聯結表實例:
TCP 連接表的索引由 4 個元素組成,這 4 個元素(即本地地址、本地端口、遠程地址和遠程端口)的組合唯一地區分表中的一行。取到第 1 行,也就是第一個行對象的方式是在表對象后面給出行號:
1.3.6.1.2.1.6.13.1
表中的標量對象叫做列對象,列對象有唯一的對象標識符,這對每一行都是一樣的。取到第 2 列,也就是第 2 個列對象的方式是在表對象后面給出行號和列號。注意此時有 3 個實例,他們的標識符都是 “1.3.6.1.2.1.6.13.1.2”。
1.3.6.1.2.1.6.13.1.2
設行號為 x,列號為 i,則一個列對象可以表示為 x.i,該對象所在的表有 N 個索引對象ii、i2、…、iN,則它的某一行的實例標識符為:
x.i.(i1).(i2).….(iN)
索引對象的值用於區分表中的行,把列對象的對象標識符與索引對象的值組合起來就說明了列對象的一個實例。例如對於 0.0.0.0 列對象,在后面加上這一行的索引對象的標識符連在一起,就是一個實例標識符。通過加上索引對象,這樣就能夠區分開“1.3.6.1.2.1.6.13.1.2”表示的 3 個列對象,從而實現確定一個具體的列對象的目的。
1.3.6.1.2.1.6.13.1.2.0.0.0.0.99.0.0.0.0.0
詞典順序
使用上述的標識符的好處在於,可以用詞典順序進行遍歷 MIB 的樹進行遍歷。對象標識符是整數序列,這種序列反映了該對象在 MIB 中的邏輯位置,同時表示了一種詞典順序,我們只要按照一定的方式(例如中序)遍歷MIB樹,就可以排出所有對象及其實例的詞典順序。
例如如圖是一個簡化的IP路由表,該表只有 3 項。
ipRouteDest | ipRouteMetricl | ipRouteNextHop |
---|---|---|
9.1.2.3 | 3 | 99.0.0.3 |
10.0.0.51 | 5 | 89.1.1.42 |
10.0.0.99 | 5 | 89.1.1.42 |
這個路由表的對象及其實例的子樹如圖所示,就可以得到用於遍歷的詞典順序:
MIB-2 功能組
RFC1213 定義了管理信息庫第二版(MIB-2),這個文件包含 11 個功能組,共 171 個對象。MIB-2 只包括那些被認為是必要的對象,不包括任選的對象。這些功能組分別是:
功能組 | 解釋 |
---|---|
系統組 | 提供了系統的一般信息 |
接口組 | 包含關於主機接口的配置信息和統計信息 |
地址轉換組 | 表示網絡地址到接口的物理地址的映像關系 |
IP 組 | 提供了與 IP 協議有關的信息 |
ICMP 組 | 包含有關 ICMP 實現和操作的有關信息 |
TCP 組 | 包含與 TCP 協議的實現和操作有關的信息 |
UDP 組 | 提供關於 UDP 數據報和本地接收端點的詳細信息 |
EGP 組 | 提供關於 EGP 路由器發送和接收的 EGP 報文的信息,以及關於 EGP 鄰居的詳細信息等 |
傳輸組 | 針對各種傳輸介質提供詳細的管理信息 |
SNMP 組 | 包含的信息關系到 SNMP 協議的實現和操作 |
對象的分組方便了管理實體的實現。一般來說,制造商如果認為某個功能組是有用的,則必須實現該組的所有對象。例如一個設備實現 TCP 協議,則它必須實現 TCP 組所有對象,當然網橋或路由器就不必實現 TCP 組。其中 MIB-2 中地址轉換組的對象已被收編到各個網絡協議組中,保留地址轉換組僅僅是為了與 MIB-1 兼容。
參考資料
《計算機網絡管理(第三版)》雷震甲 編著,西安電子科技大學出版社
《計算機網絡(第七版)》 謝希仁 著,電子工業出版社