簡單網路管理協定(SNMP)
/ S-N-M-P /
想像一棟有數百台機器的大樓,還有一位需要知道每台溫度、耗電量,以及風扇是否在轉的設施管理員。他沒辦法走到每一台機器前,所以每台機器都備有一組標準的儀表,讓管理員可以遠端讀取。SNMP,也就是簡單網路管理協定(Simple Network Management Protocol),對網路而言正是這套方案:它讓一個中央管理者能以統一的方式問成千上萬台路由器、交換器、伺服器與印表機「你狀況如何?」,並讀回答案。
它有三個部分。每台被管理的設備上跑著一個小程式,稱為 SNMP 代理(agent)。代理對外揭露一棵有名稱的數值樹,稱為 MIB(Management Information Base,管理資訊庫)——像是「介面 3 收到的位元組數」、「CPU 使用率」或「介面上/下線狀態」,每一個都以一個數字物件識別碼(OID)定址。接著一個中央網路管理站送出 SNMP get 請求去讀取那些值(偶爾用 set 請求去改一個設定),按排程輪詢(poll)各設備。設備也能在發生值得注意的事時(如某連結斷線)主動推送一則未經請求的警示,稱為 trap——這樣管理者不必等到下一次輪詢就能得知故障。
對它的年紀與安全性要誠實。SNMP 第 1 版與 2c 版只用明文傳送的「社群字串」(community string)來鑑別,那幾乎稱不上是密碼——任何能看到流量的人都讀得到它,所以這些版本絕不可面向開放的網際網路。SNMPv3 加入了真正的鑑別與加密,是你應該用的版本。SNMP 也是輪詢模型:問、得到答案、再問。每隔幾秒輪詢成千上萬個計數器並不能優雅地擴展,這正是現代系統正轉向串流遙測(streaming telemetry)的原因之一——設備持續主動推送自己的資料,而不是等著被問。
一台監控伺服器每 30 秒對一台交換器送出一個 SNMP get,讀取存有「連接埠 5 進站位元組數」的那個 OID。把相鄰兩次讀數相減就得到每 30 秒的位元組數,它把這畫成一張頻寬圖。當交換器失去一條連結時,它也會發出一則 trap,讓警示立即抵達,而不是 30 秒後才到。
SNMP 管理者向每台設備的代理輪詢有名稱的 MIB 值,並接收緊急事件的 trap——這就是經典的網路管理迴圈。
SNMP v1/v2c 只用明文社群字串鑑別——等於沒有安全性——所以絕不要把它們暴露到網際網路;請用 SNMPv3。它的「問與答」模型也擴展不佳,這正是串流遙測日益受青睞的原因。