簡單網路管理協議（SNMP，Simple Network Management Protocol）構成了網際網路工程工作小組（IETF，Internet Engineering Task Force）定義的 Internet 協議族的一部分。該協議能夠支援網路管理系統，用以監測連線到網路上的裝置是否有任何引起管理上關注的情況。它由一組網路管理的標準組成，包含一個應用層協議（application layer protocol）、資料庫模式（database schema），和一組資料物件。 概論和基礎觀念 在典型的 SNMP 用法中，有許多系統被管理，而且是有一或多個系統在管理它們。每一個被管理的系統上有執行一個叫做代理者（agent）的軟體元件，且透過 SNMP 對管理系統報告資訊。 基本上，SNMP 代理者以變數呈現管理資料。管理系統透過 GET，GETNEXT 和 GETBULK 協定指令取回資訊，或是代理者在沒有被詢問的情況下，使用 TRAP 或 INFORM 傳送資料。管理系統也可以傳送配置更新或控制的請求，透過 SET 協定指令達到主動管理系統的目的。配置和控制指令只有當網路基本結構需要改變的時候使用，而監控指令則通常是常態性的工作。 可透過 SNMP 存取的變數以階層的方式結合。這些分層和其他後設資料（例如變數的型別和描述）以管理資訊庫（s）的方式描述。 SNMP 基本元件 一個 SNMP 管理的網路由下列三個關鍵元件組成： 網路管理系統（NMSs，Networkmanagement systems） 被管理的裝置（managed device） 代理者（agent） 一個網路管理系統執行應用程式，以該應用程式監視並控制被管理的裝置。也稱為管理實體（managing entity），網路管理員在這兒與網路裝置進行互動。網路管理系統提供網路管理需要的大量運算和記憶資源。一個被管理的網路可能存在一個以上的網路管理系統。 一個被管理的裝置是一個網路節點，它包含一個存在於被管理的網路中的 SNMP 代理者。被管理的裝置透過管理資訊庫（MIB）收集並儲存管理資訊，並且讓網路管理系統能夠透過 SNMP 代理者取得這項資訊。 代理者是一種存在於被管理的裝置中的網路管理軟體模組。代理者控制本地機器的管理資訊，以和 SNMP 相容的格式傳送這項資訊。 SNMP 架構 從體系結構上來講，SNMP 框架由主代理、子代理和管理站組成。 主代理 主代理是一個在可執行 SNMP 的網路元件上運作的軟體，可回應從管理站發出的 SNMP 要求。它的角色類似客戶端 伺服器結構（ClientServer）術語中的伺服器。主代理依賴子代理提供有關特定功能的管理資訊。 如果系統當前擁有多個可管理的子系統，主代理就會傳遞它從一個或多個子代理處收到的請求。這些子代理在一個子系統以及對那個子系統進行監測和管理操作的介面內為關心的物件建模。主代理和子代理的角色可以合併，在這種情況下我們可以簡單的稱之為代理（agent）。 子代理 子代理是一個在可執行 SNMP 的網路元件上運作的軟體，執行在特定子系統的特定管理資訊庫（MIB，Management Information Base）中定義的資訊和管理功能。子代理的一些能力有： 蒐集主代理的資訊 配置主代理的引數 回應管理者的要求 產生警告或陷阱 對協定和管理資訊結構的良好分離使得使用 SNMP 來監測和管理同一網路內上百的不同子系統非常簡單。MIB 模型執行管理 OSI 參考模型的所有層，並可以擴充套件至諸如資料庫，電子郵件以及 J2EE 參考模型之類的應用。 管理站 管理者或者管理站提供第三個元件。它和一個客戶端 伺服器結構下的使用者端一樣工作。它根據一個管理員或應用程式的行為發出管理操作的請求，也接收從代理處獲得的 TRAP。 SNMP 協議 SNMP 第一版和 SMI 規格的資料型態 SNMP 第一版 SMI 指定許多 SMI 規格的資料型態，它們被分為兩大類： 簡單資料型態 泛應用資料型態 SNMP 第二版和管理資訊結構 SNMP 第二版 SMI 在 RFC 2578 之中描述，它在 SNMP 第一版的 SMI 規格資料型態上進行增加和強化，例如位元串（bit strings）、網路位址（network addresses）和計數器（counters）。 SNMP 協定在 OSI 模型的應用層（第七層）運作，在第一版中指定五種核心 PDU： GET REQUEST GET NEXT REQUEST GET RESPONSE SET REQUEST TRAP 其他 PDU 在 SNMP 第二版加入，包含： GETBULK REQUEST INFORM SNMP 第二版 SMI 資訊模組 SNMP 第二版 SMI 也指定了資訊模組來詳細說明一群相關連的定義。有三種 SMI 資訊模組：MIB 模組、回應狀態、能力狀態。 SNMP 第三版 SNMP 第三版由 RFC 3411RFC 3418 定義，主要增加 SNMP 在安全性和遠端配置方面的強化。 SNMP 第三版提供重要的安全性功能： 資訊完整性：保證封包在傳送中沒有被竄改。 認證：檢驗資訊來自正確的來源。 封包加密：避免被未授權的來源窺探。 開發和使用 第一版 SNMP 的第一個 RFC 系列出現在 1988 年： RFC 1065：基於 TCPIP 網路的管理資訊的結構和認定 RFC 1066：以基於 TCPIP 網路的網路管理為基礎的管理資訊 RFC 1067：一個簡單網路管理協議 這些協議被廢除經由： RFC 1155：基於 TCPIP 網路的管理資訊的結構和認定 RFC 1156：以基於 TCPIP 網路的網路管理為基礎的管理資訊 RFC 1157：一個簡單網路管理協議 SNMP 協議工作在 OSI 模型的應用層（第七層）。它（在第一版中）指定了四種核心協議資料單元（PDU）： GET，用來得到一條管理資訊 GETNEXT，用來反覆得到管理資訊的序列 SET，用來給一個被管理的子系統製造一個變化 TRAP，用來報告一個關於被管理子系統的警告或其他非同步事件 典型的，SNMP 為代理使用 UDP 埠 161，為管理站使用 UDP 埠 162。 第一版因為其脆弱的安全性而備受爭議。客戶端的認證使用明碼傳送。在 80 年代，SNMP 第一版被設計出來的時期，網際網路標準的認證 安全並不被主要的協議設計團體所重視。 第二版 SNMP 第二版（RFC 1441RFC 1452）修訂了第一版並且包含了在效能、安全、機密性和管理者之間通訊這些領域的改進。它引入了 GETBULK 以取代反覆的 GETNEXT，藉以在單個請求中獲取大量的管理資料。然而，SNMP 第二版的新安全系統被認為過於複雜，而不被廣泛接受。 SNMP v2c（基於社群的 SNMP 第二版）定義於 RFC 1901RFC 1908，一開始也非正式的被稱為 SNMP 第 15 版。SNMPv2c 包含 SNMP 第二版除了受爭議的新 SNMP 第二版安全模型以外的部份，並以 SNMP 第一版的簡單的基於社群的安全性方案取而代之。 SNMP v2u（基於使用者的 SNMP 第二版）定義於 RFC 1909RFC 1910。這是一個 SNMP 第一版和 SNMP 第二版的折衷方案，試圖提供比 SNMP 第一版更好的安全性，又不遭遇 SNMP 第二版的高複雜度。這產生一個被商業化的變種，稱為 SNMP v2，而且它的機制最後被 SNMP 第三版的兩個安全性框架之一採用。 SNMP 第一版和 SNMPv2c 的互操作性 在目前的指定中，SNMP 第二版和 SNMP 第一版在兩個關鍵領域不相容：訊息格式和協議操作。SNMPv2c 訊息使用和 SNMP 第一版不同的標頭和協議資料單元（PDU）格式。SNMPv2c 也使用兩個沒有在 SNMP 第一版指定的協議操作。此外，RFC 1908 定義兩個可能的 SNMP 第一版 第二版共存策略：代理伺服器代理（proxy agents）和雙語網路管理系統（bilingual networkmanagement systems）。 第三版 Internet 工程工作小組（IETF）把在 RFC3411RFC3418（STD0062）中定義的 SNMP 第三版作為 2004 年的標準版本。IETF 將先前的版本定為 Obsolete 或 Historical。 實際上，SNMP 實現通常支援多個版本：典型的 SNMPv1、SNMPv2c 以及 SNMPv3。參見 RFC3584Internet 標準網路管理框架第一、二、三版間的共存。 SNMP 第三版提供三項重要的服務：認證、隱私和存取控制。 使用舉例 SNMP v1 v2c 監控裝置正常執行時間 sysUpTimeInstance 作業系統版本清單 sysDescr 收集介面資訊 ifName ifDescr ifSpeed ifType ifPhysAddr 測量網路介面吞吐量 ifInOctets ifOutOctets 查詢遠端 ARP 快取 ipNetToMedia 下面的輸出作為在一個路由器上的 snmpwalk 的例子展示了裝置的基本資訊： snmpwalk c public punch system SNMPv2MIBsysDescr0 STRING Cisco Internetwork Operating System Software IOS tm C2600 Software C2600IO3M Version 122 15 T5 RELEASE SOFTWARE fc1 TAC Support httpwwwciscocomtac Compiled Thu 12Jun03 1549 by eaarm SNMPv2MIBsysObjectID0 OID SNMPv2SMIenterprises91187 DISMANEVENTMIBsysUpTimeInstance Timeticks 835747999 96 days 17311999 SNMPv2MIBsysContact0 STRING wikiuser SNMPv2MIBsysName0 STRING punch SNMPv2MIBsysLocation0 STRING test SNMPv2MIBsysServices0 INTEGER 78 SNMPv2MIBsysORLastChange0 Timeticks 0 0000000 SNMP v3 由於 SNMP v3 加強了安全設計，存取上要提供較多資訊 透過工具指令存取 在 Shell 環境下安全取得一臺主機所有 CPU Core 使用狀況的方法： l authPriv 表示要認證也要傳輸加密 a 為認證密碼保護方式 A 為認證密碼 x 為傳輸加密方式 X 為傳輸金鑰 136121253312 表示要監視所有 CPU Core 使用狀況 snmpwalk v 3 l authPriv u user a SHA A userpass x AES X userpass 103311 136121253312 HOSTRESOURCESMIBhrProcessorLoad196608 INTEGER 7 HOSTRESOURCESMIBhrProcessorLoad196609 INTEGER 8 透過 PHP 存取 if function_exists snmp3_get result snmp3_real_walk 103311 要監視的主機 user 存取 SNMP 服務的帳號 authPriv 安全等級 要認證也要傳輸加密 SHA 認證密碼的保護方式 userpass 認證用密碼 AES 傳輸加密方式 userpass 傳輸用金鑰 136121253312 監看所有 CPU core 的負載狀況，編號為 CPU 負載狀況的 OID print_r result Array HOSTRESOURCESMIBhrProcessorLoad196608 INTEGER 7 HOSTRESOURCESMIBhrProcessorLoad196609 INTEGER 11 經常監視的資料 處理器、記憶體、儲存裝置、網路環境為最常被監視的專案，這些專案的細節資訊如下表： 專案 存取方式 OID MIB 處理器 處理器 處理器 處理器 使用者佔用時間比 GET 13614120211190 UCDSNMPMIBssCpuUser 系統佔用時間比 GET 136141202111100 UCDSNMPMIBssCpuSystem 閒置時間比 GET 136141202111110 UCDSNMPMIBssCpuIdle 每個 Core 的用量 WALK 136121253312 HOSTRESOURCESMIBhrProcessorLoad 記憶體 記憶體 記憶體 記憶體 記憶體容量 GET 1361412021450 UCDSNMPMIBmemTotalReal 記憶體消耗量 GET 1361412021460 UCDSNMPMIBmemAvailReal 記憶體剩餘量 GET 13614120214110 UCDSNMPMIBmemTotalFree 虛擬記憶體容量 GET 1361412021430 UCDSNMPMIBmemTotalSwap 虛擬記憶體剩餘量 GET 1361412021440 UCDSNMPMIBmemAvailSwap 儲存裝置 儲存裝置 儲存裝置 儲存裝置 各磁碟容量 WALK 13614120219161 UCDSNMPMIBdskTotal 各磁碟消耗量 WALK 13614120219171 UCDSNMPMIBdskAvail 各磁碟消耗量百分比 WALK 13614120219191 UCDSNMPMIBdskPercent 網路環境 網路環境 網路環境 網路環境 網路裝置名稱 WALK 136121311111 IFMIBifName 參見 AgentX SMUX 外部連結 中文 SNMP 協議討論組 NetSNMP NetSNMP on sourceforgenet SimpleWeb RFC1157 A Simple Network Management Protocol SNMP CISCO SNMP RFC3411 An Architecture for Describing Simple Network Management Protocol SNMP Management Frameworks RFC3584 Coexistence between Version 1 Version 2 and Version 3 of the Internetstandard Network Management Framework RFC3512 Configuring Networks and Devices with Simple Network Management Protocol SNMP OpenSNMP SNMP FAQ part 1 SNMP FAQ part 2 Cisco SNMP repository and documentation SNMP4J Free Open Source SNMP for Java SnmlSNMP：Simple Network Management Language 簡單網路管理語言 Category 網際網路標準 Category 網際協議 Category 應用層協議 Category 管理框架