簡單網路管理協議

簡單網路管理協議，和一組資料物件。概論和基礎觀念.在典型的SNMP用法中，有許多系統被管理，而且是有一或多個系統在管理它們。每一個被管理的系統上有執行一個叫做代理者的軟體元件，且透過SNMP對管理系統報告資訊。基本上，SNMP代理者以變數呈現管理資料。管理系統透過GET，GETNEXT和GETBULK協定指令取回資訊，或是代理者在沒有被詢問的情況下，使用TRAP或INFORM傳送資料。管理系統也可以傳送配置更新或控制的請求，透過SET協定指令達到主動管理系統的目的。配置和控制指令只有當網路基本結構需要改變的時候使用，而監控指令則通常是常態性的工作。可透過SNMP存取的變數以階層的方式結合。這些分層和其他後設資料的方式描述。SNMP基本元件.一個SNMP管理的網路由下列三個關鍵元件組成：一個網路管理系統執行應用程式，以該應用程式監視並控制被管理的裝置。也稱為管理實體，網路管理員在這兒與網路裝置進行互動。網路管理系統提供網路管理需要的大量運算和記憶資源。一個被管理的網路可能存在一個以上的網路管理系統。一個被管理的裝置是一個網路節點，它包含一個存在於被管理的網路中的SNMP代理者。被管理的裝置透過管理資訊庫收集並儲存管理資訊，並且讓網路管理系統能夠透過SNMP代理者取得這項資訊。代理者是一種存在於被管理的裝置中的網路管理軟體模組。代理者控制本地機器的管理資訊，以和SNMP相容的格式傳送這項資訊。SNMP架構.從體系結構上來講，SNMP框架由主代理、子代理和管理站組成。主代理.主代理是一個在可執行SNMP的網路元件上運作的軟體，可回應從管理站發出的SNMP要求。它的角色類似客戶端/伺服器結構術語中的伺服器。主代理依賴子代理提供有關特定功能的管理資訊。如果系統當前擁有多個可管理的子系統，主代理就會傳遞它從一個或多個子代理處收到的請求。這些子代理在一個子系統以及對那個子系統進行監測和管理操作的介面內為關心的物件建模。主代理和子代理的角色可以合併，在這種情況下我們可以簡單的稱之為代理。子代理.子代理是一個在可執行SNMP的網路元件上運作的軟體，執行在特定子系統的特定管理資訊庫中定義的資訊和管理功能。子代理的一些能力有：對協定和管理資訊結構的良好分離使得使用SNMP來監測和管理同一網路內上百的不同子系統非常簡單。MIB模型執行管理OSI參考模型的所有層，並可以擴充套件至諸如資料庫，電子郵件以及J2EE參考模型之類的應用。管理站.管理者或者管理站提供第三個元件。它和一個客戶端/伺服器結構下的使用者端一樣工作。它根據一個管理員或應用程式的行為發出管理操作的請求，也接收從代理處獲得的TRAP。SNMP協議.SNMP第一版和SMI規格的資料型態.SNMP第一版SMI指定許多SMI規格的資料型態，它們被分為兩大類：SNMP第二版和管理資訊結構.SNMP第二版SMI在RFC 2578之中描述，它在SNMP第一版的SMI規格資料型態上進行增加和強化，例如位元串。SNMP協定在OSI模型的應用層運作，在第一版中指定五種核心PDU：其他PDU在SNMP第二版加入，包含：SNMP第二版SMI資訊模組.SNMP第二版SMI也指定了資訊模組來詳細說明一群相關連的定義。有三種SMI資訊模組：MIB模組、回應狀態、能力狀態。SNMP第三版.SNMP第三版由RFC 3411-RFC 3418定義，主要增加SNMP在安全性和遠端配置方面的強化。SNMP第三版提供重要的安全性功能：開發和使用.第一版.SNMP的第一個RFC系列出現在1988年：這些協議被廢除經由：SNMP協議工作在OSI模型的應用層：典型的，SNMP為代理使用UDP埠161，為管理站使用UDP埠162。第一版因為其脆弱的安全性而備受爭議。客戶端的認證使用明碼傳送。在80年代，SNMP第一版被設計出來的時期，網際網路標準的認證/安全並不被主要的協議設計團體所重視。第二版.SNMP第二版修訂了第一版並且包含了在效能、安全、機密性和管理者之間通訊這些領域的改進。它引入了GETBULK以取代反覆的GETNEXT，藉以在單個請求中獲取大量的管理資料。然而，SNMP第二版的新安全系統被認為過於複雜，而不被廣泛接受。SNMP v2c定義於RFC 1901–RFC 1908，一開始也非正式的被稱為SNMP第1.5版。SNMPv2c包含SNMP第二版除了受爭議的新SNMP第二版安全模型以外的部份，並以SNMP第一版的簡單的基於社群的安全性方案取而代之。SNMP v2u定義於RFC 1909–RFC 1910。這是一個SNMP第一版和SNMP第二版的折衷方案，試圖提供比SNMP第一版更好的安全性，又不遭遇SNMP第二版的高複雜度。這產生一個被商業化的變種，稱為SNMP v2*，而且它的機制最後被SNMP第三版的兩個安全性框架之一採用。SNMP第一版和SNMPv2c的互操作性.在目前的指定中，SNMP第二版和SNMP第一版在兩個關鍵領域不相容：訊息格式和協議操作。SNMPv2c訊息使用和SNMP第一版不同的標頭和協議資料單元。第三版.Internet工程工作小組中定義的SNMP第三版作為2004年的標準版本。IETF將先前的版本定為“Obsolete”或“Historical”。實際上，SNMP實現通常支援多個版本：典型的SNMPv1、SNMPv2c以及SNMPv3。FC3584“Internet標準網路管理框架第一、二、三版間的共存”。SNMP第三版提供三項重要的服務：認證、隱私和存取控制。使用舉例.SNMP v1 v2c.下面的輸出作為在一個路由器上的snmpwalk的例子展示了裝置的基本資訊：snmpwalk -c public punch systemSNMPv2-MIB::sysDescr.0 = STRING: Cisco Internetwork Operating System Software IOS (tm) C2600Software (C2600-IO3-M), Version 12.2(15)T5, RELEASE SOFTWARE (fc1)TAC Support: http://www.cisco.com/tacCompiled Thu 12-Jun-03 15:49 by eaarmSNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.9.1.187DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (835747999) 96 days, 17:31:19.99SNMPv2-MIB::sysContact.0 = STRING: wikiuserSNMPv2-MIB::sysName.0 = STRING: punchSNMPv2-MIB::sysLocation.0 = STRING: testSNMPv2-MIB::sysServices.0 = INTEGER: 78SNMPv2-MIB::sysORLastChange.0 = Timeticks: (0) 0:00:00.00SNMP v3.由於 SNMP v3 加強了安全設計，存取上要提供較多資訊透過工具指令存取.在 Shell 環境下安全取得一臺主機所有 CPU Core 使用狀況的方法：snmpwalk -v 3 -l authPriv -u user \-a SHA -A userpass \-x AES -X userpass \10.33.1.1 \1.3.6.1.2.1.25.3.3.1.2HOST-RESOURCES-MIB::hrProcessorLoad.196608 = INTEGER: 7HOST-RESOURCES-MIB::hrProcessorLoad.196609 = INTEGER: 8透過 PHP 存取.if (function_exists('snmp3_get')) {$result = snmp3_real_walk('10.33.1.1', // 要監視的主機'user', // 存取 SNMP 服務的帳號'authPriv', // 安全等級 (要認證也要傳輸加密)'SHA', // 認證密碼的保護方式'userpass', // 認證用密碼'AES', // 傳輸加密方式'userpass', // 傳輸用金鑰'1.3.6.1.2.1.25.3.3.1.2' // 監看所有 CPU core 的負載狀況，編號為 CPU 負載狀況的 OIDprint_r($result);Array[HOST-RESOURCES-MIB::hrProcessorLoad.196608] =&gt; INTEGER: 7[HOST-RESOURCES-MIB::hrProcessorLoad.196609] =&gt; INTEGER: 11經常監視的資料.處理器、記憶體、儲存裝置、網路環境為最常被監視的專案，這些專案的細節資訊如下表：