網絡管理:SNMPv1



SNMP 演變


TCP/IP 網絡管理最初使用的是 1987 年 11 月提出的簡單網關監控協議(SGMP),在此基礎上改進成簡單網絡管理協議第一版(SNMPvl)。當初提出 SNMP 的目的是作為彌補網絡管理協議發展階段之間空缺的一種臨時性措施,由於其簡單性和易於實現性,SNMPv1 得到了許多制造商的支持和廣泛的應用。
SNMP 雖然被廣泛應用,但是 SNMP 沒有實質性的安全設施,用戶面臨的只能是在很不完善的管理工具和遙遙無期的管理標准之間作出選擇的兩難處境。為了修補 SNMP 的安全缺陷,1992 年 7 月出現了一個新標准——安全 SNMP(S-SNMP),這個協議增強了安全方面的功能。但是 S-SNMP 沒有改進 SNMP 在功能和效率方面的其他缺點,有人又提出了另外一個協議 SMP 對 SNMP 進行擴充。在對 S-SNMP 和 SMP 討論的過程中,Internet 研究人員之間確定必須擴展 SNMP 的功能,並增強其安全性,於是決定以 SMP 為基礎開發 SNMPv2。

由於 SNMPv2 沒有達到“商業級別”的安全要求(提供數據源標識、報文完整性認證、防止重放、報文機密性、授權和訪問控制、遠程配置和高層管理能力等),所以 SNMPv3 工作組一直在從事新標准的研制工作,終於在 1999 年 4 月發布了 SNMPv3 新標准。

SNMPv1 協議數據單元

SNMPv1 支持的操作

SNMP 僅支持對管理對象值的檢索和修改等簡單操作,SNMP 實體可以對 MIB-2 中的對象執行下列操作:

操作 功能
Get 用於檢索管理信息庫中標量對象的值
Set 用於設置管理信息庫中標量對象的值
Trap 代理用陷入報文向管理站報告管理對象的狀態變化
SNMP 不支持管理站改變管理信息庫的結構,即不能增加和刪除管理信息庫中的管理對象實例,例如不能增加、刪除管理信息庫中的對象實例。管理站只能逐個訪問管理信息庫中的葉子節點,不能一次性訪問一個子樹,例如不能訪問整個表的內容。

SNMP PDU 格式

RFC1157 用 ASN.1 給出了 SNMPv1 協議的定義,在 SNMP 管理中管理站和代理之間交換的管理信息構成了 SNMP 報文。報文由 3 部分組成:版本號、團體名、協議數據單元(PDU),報文頭中的版本號是指 SNMP 的版本,團體名用於身份認證。

管理站發出的 3 種請求報文GetRequest、GetNextRequest和 SetRequest 采用的格式是一樣的。

代理的應答報文格式只有一種 GetResponsePDU。

字段 說明
PDU 類型 標識 5 種類型的 PDU
請求標識 賦予每個請求報文唯一的整數,用於區分不同的請求
錯誤狀態 表示代理在處理管理站的請求時可能出現的各種錯誤,共有 6 種
錯誤索引 當錯誤狀態非0時指向出錯的變量
變量綁定表 變量名和對應值的表,說明要檢索或設置的所有變量及其值
其中 6 種錯誤狀態分別是:
標簽 錯誤狀態
--- ---
0 noError
1 tooBig
2 noSuchName
3 badValue
4 readOnly
5 genErr
Trap 報文的格式與其他報文不同,它有下列字段:
制造商 設備制造商的標識
--- ---
代理地址 產生陷入的代理的IP地址
一般陷入 SNMP定義的陷入類型,共分 7 類
特殊陷入 與設備有關的特殊陷入代碼
時間戳 代理發出陷入的時間

報文應答序列

SNMP 報文在管理站和代理之間傳送,包含 GetRequest、GetNextRequest 和 SetRequest 的報文由管理站發出,代理以 GetResponse 響應。



Trap 操作相當於代理系統發送事件報告,因此 Trap 報文由代理發給管理站,不需要應答。

SNMP 操作訪問對象實例,而且只能訪問對象標識樹的葉子節點。然而為了減少通信負載,一般希望一次檢索多個管理對象,把多個變量的值裝入一個 PDU。這時要用到變量綁定表。

報文發送和接收

當 SNMP 協議實體發送報文時,首先按照 ASN.1 的格式構造 PDU 交給認證進程。接着認證進程檢查源和目標之間是否可以通信,如果檢查通過則把有關信息(版本號、團體名、PDU)組裝成報文。最后經過 BER 編碼,交傳輸實體發送出去。

當一個 SNMP 協議實體接收到報文時,需要執行封裝報文的逆過程。首先按照 BER 編碼恢復 ASN.1 報文,然后對報文進行語法分析、驗證版本號和認證信息等。如果通過分析和驗證,則離出協議數據單元,並進行語法分析。在認證檢驗失敗時可以生成一個陷入報文,向發送站報告通信異常情況並丟棄報文。

SNMPv1 操作

檢索簡單對象

檢索簡單的標量對象可以用 Get 操作,如果變量綁定表中包含多個變量,一次還可以檢索多個標量對象的值。接收 GetRequest 的 SNMP 實體以請求標識相同的 GetResponse 響應。特別要注意的是 GetResponse 操作的原子性:如果所有請求的對象值都可以得到則給予應答,反之只要有一個對象的值得不到則返回錯誤。
例如代理系統的 UDP 組的部分對象實例如下:

使用 GetRequest 請求對象實例的標識符及其相應如下,注意此時請求的是實例,后面要加上 “.0”。

GetRequest(udpInDatagrams.0, udpNoPorts.0, udpInErrors.0, udpOutDatagrams.0)
GetResponse(udpInDatagrams.0 = 100, udpNoPorts.0 = 1, udpInErrors.0 = 2, udpOutDatagrams.0 = 200) 

使用 GetNextRequest 請求對象實例的標識符及其相應如下,由於 GetNextRequest 按照詞典順序請求下一個實例,因此這里不需要加上 “.0”。

GetNextRequest(udpInDatagrams, udpNoPorts, udpInErrors, udpOutDatagrams)
GetResponse(udpInDatagrams.0 = 100, udpNoPorts.0 = 1, udpInErrors.0 = 2, udpOutDatagrams.0 = 200) 

若代理不支持管理站對 udpNoPorts 的訪問,則使用 GetNextRequest 得到的相應如下。由於 udpNoPorts 不允許訪問,因此 GetNextRequest 會按照詞典順序檢索下一個實例。

GetNextRequest(udpInDatagrams, udpNoPorts, udpInErrors, udpOutDatagrams)
GetResponse(udpInDatagrams.0 = 100, udpInErrors.0 = 2, udpInErrors.0 = 2, udpOutDatagrams.0 = 200)

檢索未知對象

GetNext 命令檢索變量名指示的下一個對象實例,並不要求變量名是對象標識符或者是實例標識符,該命令會按照詞典順序訪問下一個實例。
例如例如管理站不知道 UDP 組有哪些變量,先試着發出 GetNextRequest 命令。該命令會根據詞典順序訪問下一個實例,重復訪問就可以獲取其他實例。

GetNextRequest(udp)
GetResponse(udpindatagrams.0 = 100)

檢索表對象

由於 GetNext 可以按照詞典順序訪問下一個實例,因此可以有效地檢索表對象。
例如代理系統的 UDP 組的部分對象實例如下:

如果用 getRques 檢索 ifNumber 的值得到響應,就可以知道代理系統有兩個接口。

GetRquest(1.3.6.1.2.1.1.0)
GetResponse(2)

如果想知道每個接口的數據速率,則可以用下面的命令檢索接口表的第五個元素。最后的 1 是索引項ifIndex的值,得到的響應說明第一個接口的數據速率是 10Mb/s。

GetRquest(1.3.6.1.2.1.2.1.5.1)
GetResponse(100000000)

如果發出的命令是 getNextRequest,則得到的是第二個接口的數據速率。

GetNextRequest(1.3.6.1.2.1.2.2.1.5.1)
GetResponse(56000)

假定管理站不知道該表的行數而想檢索整個表,則可以連使用 GetNext 命令。檢索到第一行對象后,對該對象使用 GetNextRequest 就可以獲取下一行。

GetNextRequest(ipRouteDest, ipRouteMetricl, ipRouteNextHop)
GetResponse(ipRouteDest.9.1.2.3 = 9.1.2.3, ipRouteMetric.1.9.1.2.3 = 3, ipRouteNextHop.9.1.2.3 = 99.0.0.3)

GetNextRequest(ipRouteDest.9.1.2.3, ipRouteMetric1.9.1.2.3, ipRouteNextHop.9.1.2.3)
GetResponse(ipRouteDest.10.0.0.51 = 10.0.0.51, ipRouteMetric.1.10.0.0.51 = 5, ipRouteNextHop.10.0.0.51 = 89.1.1.42)

表的更新和刪除

Set 命令用於設置或更新變量的值,它的 PDU 格式與 Get 相同,但是在變量綁定表中必須包含要設置的變量名和變量值。對於 Set 命令的應答也是 GetResponse,如果所有的變量都可以設置則更新所有變量的值,並在應答的 GetResponse 中確認變量的新值。如果至少有一個變量的值不能設置,則所有變量的值都保持不變,並在錯誤狀態中指明出錯的原因。
例如代理系統的 UDP 組的部分對象實例如下:

如果想改變列對象 ipRouteMetricl 的第一個值,則可以發出 SetRequest,得到的應答就是修改后的值。

SetRequest(ipRouteMetric.1.9.1.2.3 = 9)
GetResponse(ipRouteMetric.1.9.1.2.3 = 9)

假定想增加一行,則發出 SetRequest 得到的應答可能為以下 3 種情況:

  1. 代理拒絕這個命令,返回錯誤狀態 noSuchName;
  2. 代理接受這個命令,並企圖生成一個新的對象實例,但是發現被賦予的值不適當,而返回錯誤狀態 badValue;
  3. 代理接受這個命令,生成一個新的行,並應答添加的值。
SetRequest(ipRouteDest.11.3.3.12 = 11.3.3.12, ipRouteMetric.11.3.3.12 = 9, ipRouteNextHop.11.3.3.12 = 91.0.0.5)
GetResponse(ipRouteDest.11.3.3.12 = 11.3.3.12, ipRouteMetric.11.3.3.12 = 9, ipRouteNextHop.11.3.3.12 = 91.0.0.5)

假定發出下面的命令,代理系統對於這個命令也有兩種處理方法:

  1. 變量 ipRouteDest 是索引項,代理增加一個表行,對於沒有指定值的變量賦予默認值;
  2. 代理拒絕這個操作,如果要生成新行,必須提供一行中所有變量的值。
SetRequest(ipRouteDest.11.3.3.12 = 11.3.3.12)

如果要刪除表中的行,則可以把一個對象的值置為 invalid,得到的響應說明表中的行確已刪除。

SetRequest(ipRoute Type.7.3.5.3 = invalid)
GetResponse(ipRoute Type.7.3.5.3 = invalid)

SNMPv1 實現


市場上的 SNMP 產品實現的 MIB-2 數據庫和 SNMP 協議與標准不是完全一致的。客觀的原因是 SNMP 強調簡單性,而忽視了功能性,同時商家對 SNMP 標准的理解也可能不一致。

網絡管理站的功能

在選擇站管理產品時要關心它與標准的一致程度、與代理的互操作性、是否有友好的用戶界面。一些選擇的標准如下:

  1. 支持擴展的 MIB;
  2. 圖形用戶接口;
  3. 自動發現機制;
  4. 可編程的事件;
  5. 高級網絡控制功能;
  6. 面向對象的管理模型;
  7. 用戶定義的圖標。

輪詢頻率

輪詢頻率計算公式

如果管理站僅在啟動時輪詢一次所有代理,此后只等待代理發來的陷入,則很難掌握網絡最新動態。使用輪詢進行管理時需要選用合適的輪詢頻率,管理一定量的網絡設備。假定管理站一次只能與一個代理作用,輪詢只采用 Get 請求/響應,而且管理站全部時間都用來輪詢,則:

N 為被輪詢的代理數,T 為輪詢間隔,Δ 為單個輪詢需要的時間。 可以根據網絡配置和代理數量確定最小輪詢間隔,或者根據網絡配置和輪詢間隔計算出管理站可支持的代理設備數,還要考慮輪詢給網絡增加的負載。

單次輪詢時間

單個輪詢需要的時間被如下因素影響:

  1. 管理站生成一個請求報文的時間;
  2. 從管理站到代理的網絡延遲;
  3. 代理處理一個請求報文的時間;
  4. 代理產生一個響應報文的時間;
  5. 從代理到管理站的網絡延遲;
  6. 管理站處理一個響應報文的時間;
  7. 為了得到需要的管理信息,交換請求/響應報文的數量。

計算樣例

樣例一

假設有一個 LAN,每 15 分鍾輪詢所有被管理設備一次,管理報文的處理時間是 50ms,網絡延遲為 1ms (每個分組 1000 字節),沒有產生明顯的網絡擁擠,Δ 大約是 0.202s,則管理站最多可支持 4500 個設備。

樣例二

在由多個子網組成的廣域網中,網絡延遲更大,數據速率更小,通信距離更遠,而且還有路由器和網橋引入的延遲,總的網絡延遲可能達到半秒鍾,Δ 大約是 1.2s,則管理站可支持的設備最多為 750 個。

SNMPv1 的局限性

SNMPv1 進行網絡管理時有一些局限性,這些局限性有很多在 SNMPv2 都有所改進:

  1. 由於輪詢的性能限制,SNMP 不適合管理很大的網絡;
  2. SNMP 不適合檢索大量數據;
  3. SNMP 的陷入報文是沒有應答的;
  4. SNMP 的安全措施不夠;
  5. SNMP 不直接支持向被管理設備發送命令;
  6. SNMP 的 MIB-2 支持的管理對象有限;
  7. SNMP 不支持管理站之間的通信。

參考資料

《計算機網絡管理(第三版)》雷震甲 編著,西安電子科技大學出版社


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM