簡易網路管理通訊協定(SNMP)引言
作為一名網路顧問或網路系統管理員,在你安裝完網路並且設定了使用者帳號與應用程式之後,你的工作並沒有完成。 你的下一個職責就是網路管理,它就好比是一場永遠也不會結束的戰鬥一樣。
目前存在著兩種類型的網路管理問題:一種是與軟體相關的,例如資料安全性和存取許可;另一種是與硬體相關的問題。 這裡注重討論第二種,即通過使用簡易網路管理通訊協定(SNMP)和在處理與軟體相關的管理問題時所用到的一些思想,把網路 硬體作為一個整體進行管理。
介紹SNMP的英文網站很多,但相關的中文網站寥寥無幾,這正是鄙人設立本站的初衷所在。這裡將從基本原理著手,介紹到底什麼是 SNMP,並引導新手如何親自動手實踐。在不久的將來我將給出LINUX和SOLARIS上基於X WINDOWS的簡單發布和源碼。
- 什麼是網路管理?
網路管理分為兩類。第一類是網路應用程式、使用者帳號(例如檔案的使用)和存取許可權(許可)的 管理。它們都是與軟體有關的網路管理問題。這裡不作討論。
網路管理的第二類是由構成網路的硬體所組成。這一類包括工作站、伺服器、網卡、路由器、 橋接器和集線器等等。通常情況下這些裝置都離你所在的地方很遠。正是由於這個原因,如果當 裝置有問題發生時網路系統管理員可以自動地被通知的話,那麼一切事情都好辦。但是你的路由器 不會象你的使用者那樣,當有一個應用程式問題發生時就可以打電話通知你,而當路由器擁擠時 它並不能夠通知你。
為瞭解決這個問題,廠商們已經在一些裝置中設立了網路管理的功能,這樣你就可以遠程地詢 問它們的狀態,同樣能夠讓它們在有一種特定類型的事件發生時能夠向你發出警告。這些裝置 通常被稱為"智能"裝置。
網路管理通常被分為四類:
| 被管理節點(或裝置) |
即你想要監視的裝置 |
| 代理 |
用來跟蹤被管理裝置狀態的特殊軟體或韌體 (firmware) |
| 網路管理工作站 |
與在不同的被管理節點中的代理 通訊,並且顯示這些代理程式狀態的中心裝置。 |
| 網路管理協議 |
被網路管理工作站和大理用來交換 資訊的協議。 |
當設計和構造網路管理的基礎結構時,你需要記住下列兩條網路管理的原則:
- 由於管理資訊而帶來的通訊量不應明顯的增加網路的通訊量。
- 被管理裝置上的協議代理不應明顯得增加系統處理的額外開銷,以致 於該裝置的主要功能都被削弱了。
2.什麼是SNMP?
簡易網路管理通訊協定(SNMP)首先是由Internet工程工作群組織(Internet Engineering Task Force)(IETF)的研究小組為瞭解決Internet上的路由器管理問題而提出的。許多人認為 SNMP在IP上啟動並執行原因是Internet啟動並執行是TCP/IP協議,然而事實並不是這樣。
SNMP被設計成與協議無關,所以它可以在IP,IPX,AppleTalk,OSI以及其他用到的傳輸協議上被使用。
SNMP是一系列協議組和規範(見下表),它們提供了一種從網路上的裝置中收集網路管理資訊的方法。SNMP也為裝置向網路管理工作站報告問題和錯誤提供了一種方法。
| 名字 |
說明 |
| MIB |
管理資訊庫 |
| SMI |
管理資訊的結構和標識 |
| SNMP |
簡易網路管理通訊協定 |
從被管理裝置中收集資料有兩種方法:一種是只輪詢(polling-only)的方法,另一種是基於中斷(interrupt-based)的方法。
如果你只使用只輪詢的方法,那麼網路管理工作站總是在控制之下。而這種方法的缺陷在於資訊的即時性,尤其是錯誤的即時性。你多久輪詢一次,並且在輪 詢時按照什麼樣的裝置順序呢?如果輪詢間隔太小,那麼將產生太多不必要的通訊量。如果輪詢間隔太大,並且在輪詢時順序不對,那麼關於一些大的災難性的事件 的通知又會太饅。這就違背了積極主動的網路管理目的。
當有例外狀況事件發生時,基於中斷的方法可以立即通知網路管理工作站(在這裡假設該裝置還沒有崩潰,並且在被管理裝置和管理工作站之間仍有一條可用的通 信途徑)。然而,這種方法也不是沒有他的缺陷的,首先,產生錯誤或自陷需要系統資源。如果自陷必須轉寄大量的資訊,那麼被管理裝置可能不得不消耗更多的時 間和系統資源來產生自陷,從而影響了它執行主要的功能(違背了網路管理的原則2)。
而且,如果幾個同類型的自陷事件接連發生,那麼大量網路頻寬可能將被相同的資訊所佔用(違背了網路管理的原則1)。尤其是如果自陷是關於網路擁擠問 題的時候,事情就會變得特別糟糕。克服這一缺陷的一種方法就是對於被管理裝置來說,應當設定關於什麼時候報告問題的閾值(threshold)。但不幸的 是這種方法可能再一次違背了網路管理的原則2,因為裝置必須消耗更多的時間和系統資源,來決定一個自陷是否應該被產生。
結果,以上兩種方法的結合:面向自陷的輪詢方法(trap-directed polling)可能是執行網路管理最為有效方法了。一般來說,網路管理工作站輪詢在被管理裝置中的代理來收集資料,並且在控制台上用數字或圖形的表示方式來顯示這些資料。這就允許網路系統管理員分析和管理裝置以及網路通訊量了。
被管理裝置中的代理可以在任何時候向網路管理工作站報告錯誤情況,例如預製定閾值越界程度等等。代理並不需要等到管理工作站為獲得這些錯誤情況而輪詢他的時候才會報告。這些錯誤情況就是眾所周知的SNMP自陷(trap)。
在這種結合的方法中,當一個裝置產生了一個自陷時,你可以使用網路管理工作站來查詢該裝置(假設它仍然是可到達的),以獲得更多的資訊。
3.什麼是被管理裝置?
你可能聽說過許多關於“SNMP可管理裝置”、“與SNMP相容的裝置”或者“被SNMP管理的裝置”的說法。但是它們到底什嗎?它們與“智慧型裝置”又是怎麼區別的呢?
簡單地說,以上所有說法的意思都是“一個包含網路管理代理程式實現的網路裝置”。這些話也意味著這種代理支援SNMP協議來進行資訊交換。正如前面所提到的,一個智慧型裝置可能並不需要使用或支援SNMP協議。那麼什麼是一個代理呢?
- 代理
管理代理程式(agent)是一種特殊的軟體(或韌體),它包含了關於一個特殊裝置和/或該裝置所處環境的資訊。當一個代理被安裝到一個裝置上時,上述的裝置就被列為“被管理的”。換句話說,代理就是一個資料庫。
資料庫中所包含的資料隨被安裝裝置的不同而不同。舉例來說,在一個路由器上,代理將包含關於路由選擇表、接收和發送包的總數等資訊。而對於一個橋接器來說,資料庫可能包含關於轉寄包數目和過濾表等資訊。
代理是與網路管理主控台通訊的軟體或韌體。在這個控制台的“鏈路”上可以執行以下任務:
- 網路管理工作站可以從代理中獲得關於裝置的資訊。
- 網路管理工作站可以修改、增加或者刪除代理中的表項,例如在由代理所維護的資料庫中的路由選擇表表項。
- 網路管理工作站可以為一個特定的自陷設定閾值。
- 代理可以向網路管理工作站發送自陷。
請記住,在被管理裝置中的代理並不是自願提供資訊的,除非當有一個閾值被超過的事件發生時。
在一些偶然的情況下,在一個特定的裝置上可能因為系統資源的缺乏,或者因為該裝置不支援SNMP代理所需要的傳輸協議,而不能實現一個SNMP代理。這是 否就意味著你不能監視這個裝置呢?答案並不是這樣的,在這種情況下並不是完全沒有辦法的。你可以使用受託代理(proxy agent),它相當於外部裝置(foreign device)。
受託代理並非在被管理的外部裝置上運行,而是在另一個裝置上運行。網路管理工作站首先與受託代理聯絡,並且指出(通過某種方法)受託代理與外部裝置的一致 性。然後受託代理把它接收到的協議命令翻譯成任何一種外部裝置所支援的管理協議。在這種情況下,受託代理就被稱為應用程式閘道(application gateway)。
如果外部裝置不支援任何管理協議,那麼受託代理必須使用一些被動的方法來監視這個裝置。舉例來說,一個令牌環橋接器的受託代理可以監視它的效能,並且如果它 檢測到任何由橋接器所報告的擁擠錯誤時,它就會產生自陷。幸運的是,目前大多數網際互聯裝置類型都是支援SNMP可管理裝置的,所以你可以很容易地使用一個 SNMP可管理裝置,例如集線器、橋接器和路由器。有一些廠商甚至還在他們的網卡上提供SNMP代理。
- MIB
我們通常很少把在一個被管理裝置中的資料庫稱為一個資料庫。在SNMP術語中它通常被稱為管理資訊庫(MIB)。
一個MIB描述了包含在資料庫中的對象或表項。每一個對象或表項都有以下四個屬性:
- 物件類型(Object Type)
- 文法(Syntax)
- 存取(Access)
- 狀態(Status)
在SNMP規範之一的管理資訊結構與標識(SMI;RFC 1155/1065)規範中定義了這些屬性。SMI對於MIB來說就相當於模式對於資料庫。SMI定義了每一個對象“看上去象什麼”。
- 物件類型
這個屬性定義了一個特定對象的名字,例如sysUpTime。它只不過是一個標記。在表示資料時,SMI使用了ASN.1(Abstract Syntax Notation One)。對象必須被“標識”。對於互連網絡管理MIB來說,用ASN.1記法來表示的標識符開頭如下:
internet OBJECT IDENTIFIER : : = { iso org(3) dod(6) 1 }
或者用一種簡單的格式:
1.3.6.1
這是從ASN.1文檔中抽取的。它為標識符定義了一個樹形的格式。該樹是由一個根及與之相串連的許多被標記的節點群組成。每一個節點由一個非負整數值和儘可能簡明的文字說明所標識。每一個節點可能也擁有同樣被標記的子節點。
當描述一個物件識別碼(OBJECT INDENTIFIER)時,你可以使用幾種格式,最簡單的格式是列出由根開始到所討論的對象遍曆該樹所找到的整數值。 從根一級開始,這裡有三個節點():
- ccitt(0)
- iso(1)
- joint-iso-ccitt(2)
其中每一個“分支”都被標記中所示的管理組織所管理。
- 文法
這個屬性指定了資料類型,例如整數、8位組串數字(字串;範圍為0至255)、物件識別碼(預先定義的資料類型別名)或NULL。NULL是留待的後使用的空位。
- 存取
存取表明了這個特定對象的存取層級。合法的值有:唯讀、讀寫、唯寫和不可存取。
- 狀態
狀態定義了這個對象的實現需要:必備的(被管理節點必須實現該對象);可選的(被管理對象可能實現該對象);或者已廢棄的(被管理裝置不需要再實現該對象)。
- 簡易網路管理通訊協定
簡易網路管理通訊協定允許網路管理工作站軟體與被管理裝置中的代理進行通訊。這種通訊可以包括來自管理工作站的詢問訊息、來自代理的應答訊息或者來自代理給管理工作站的自陷訊息。
為了保證因網路管理而帶來的通訊量是最小的(網路管理原則1),SNMP使用了一種非同步客戶機/伺服器方法。這意味著一個SNMP實體(管理工作站或被管 理裝置)在發出一條訊息後不需要等待一個應答;然而,除了自陷的情況以外應答都是要被產生的。如果需要的話該實體可以發送另一條訊息,或者也可以繼續它預 先被定義的功能。SNMPv1實現起來很簡單並且對資源佔用不多,它只有5個請求/響應原語:
- get-request
- set-request
- get-next-request
- get-reponse
- trap
網路管理工作站可以把感興趣的變數值提取到其應用程式中,只要發出get-request或get-next-request報文即可。前者是指定對象的 讀操作,後者則提供了一個樹遍曆操作符,便於確定一個代理進程支援哪些對象。網路管理工作站可以修改代理進程中的變數值,只要發出set-request 報文即可。
如果沒有發生錯誤,代理進程可以用get-reponse原語回答這些請求。另外,利用trap原語,代理進程可以非同步地發送警示給網路管理工作站,告訴它發生了某個滿足預設條件的事件。
實現中的經驗和設計過程中的不斷完善給SNMPv2帶來了協議改進意見,即給網路管理工作站增加一個成塊讀操作get-bulk-request報文。當 需要用一個請求原語提取大量資料(如讀取某個表的內容)時就可以調用它以提高效率。SNMPv2也引進管理進程和管理進程之間的通訊進行狀況報告,為此增 加了一條原語inform-request,並把get-response簡化成更加合理的名稱reponse。trap報文則已改為snmpv2- trap,並與所有的協議報文具有同樣的格式。
4.巧妙而有效地管理你的網路
網路管理的兩種方法是積極主動(pro-active)的方法和被動反應(re-active)得分方法。在大多數的時間裡,我們總是要對一個事件作出反應,但這並不是有效網路管理。
在積極主動的方式中,你所有現存的資源都得到了充分使用。如果你有智能集線器,那麼請你把它找出來。幾乎所有現存的路由器都至少在MIB-I層級上支援SNMP協議。如果你不能確定的話,請你和廠商聯絡。
當管理網路時,你需要明確的第一件事情就是要知道什麼時候網路出問題。但是,你怎樣辨別網路出問題了呢?對於人類來說,你會尋找以下癥狀,你會檢查 體溫和脈搏。你網路上的癥狀也可以被監視,例如頻寬利用率隨時間的變化、伺服器和路由器上的CPU利用率及通常在網線上的錯誤量(你總有以下錯誤)。請你 使用網路管理工作站來跟蹤這些統計資料一段時間,不如說兩個星期,並且統計出一天中不同時候的平均值。這將成為你的基準線(baseline)。
一個基準線就是一系列數字,這些數字反映出了一個“健康”的網路。對於人類來說,一個“正常而且健康”的體溫是37度。這就是你區分一個人是否發燒 的基準線。你也需要一個基準線來決定你的網路是否出了問題。通過監視被管理裝置中的網路閾值設定,並且尋找故障的徵兆,你就可以擁有一個提前警示的系統 了。