「SNMP を使えば周辺機器などの情報や状態を知ることができる」という程度の理解で SNMP を使ってみようと調べると OID とか MIB とかよくわからない用語に圧倒されました。たとえば MIB ツリーは以下のようなの図が提示されるわけですが、これがよくわからないのです。MIB-2 の OID が .1.3.6.1.2.1 だ、と言われてもサッパリなわけです(汗
iso(1) 階層1 │ org(3) 階層2 │ dod(6) 階層3 │ internet(1) 階層4 │ ├────────────────────────────────────────────┬──── mgmt(2) private(4) 階層5 │ │ mib─2(1) enterprise(1) 階層6 │ │ ┌─────────┬─────────┴──┬─────┬─────┬────────┬───────┬─── │ system(1) interface(2) at(3) ip(4) icmp(5) tcp(6) udp(7) │ 階層7 │ ─┬────────┬──────────────┬─────────┬────────┴──────┬─── cisco(9) lanmanager(77) nec(119) microsoft(311) ucdavis(2021) 階層7
なのでもう少し平易な説明ができないものか?(特に Windows ユーザー向けに)と思ったのでまとめてみることにしました。
上記の MIB ツリー。Windows ユーザーにとって一番イメージしやすい近い存在というとレジストリエディタではないかと思います。
たとえば、Windows の場合コンピューター名を記録している場所は .iso.org.dod.internet.mgmt.mib-2.system.sysName.0 なので、レジストリエディタに模して見ると以下のような感じです。
Windows だとシンボルの区切りは \ (バックスラッシュまたは円記号) ですが、SMMP の場合 . (ドット) で区切ります。なので、
.iso.org.dod.internet.mgmt.mib-2.system.sysName.0
は Windows 的な表記だと
\iso\org\dod\internet\mgmt\mib-2\system\sysName\0
と等価です。ドットから始まる場合、ルートからの絶対パスであるのも考え方は同じです。
そして、このアドレス .iso.org.dod.internet.mgmt.mib-2.system.sysName.0 に格納されている値が "ComputerName.DomainName" (文字列値) であるというわけです。
レジストリと明らかに違うのは、SNMP のデータベースは上記のようなシンボルを文字列で管理してるのではなくて、OID (=オブジェクト ID) 番号で管理している点です。OID 番号で表すと上記のツリーは以下のようになります。
したがって、.iso.org.dod.internet.mgmt.mib-2.system.sysName.0 は .1.3.6.1.2.1.1.5.0 と表すことができます。というかこちらが真のアドレスです。これは IP アドレスとホスト名のような関係似ていて、真のアドレス (この場合は .1.3.6.1.2.1.1.5.0) に対して別名 (この場合は .iso.org.dod.internet.mgmt.mib-2.system.sysName.0) を付けて人が読みやすいようにしています。
それでは、IP アドレスとホスト名を対応付けている hosts のようなファイルが何か?というと、それが MIB ファイルです。
以下は MIBファイル "SNMPv2-SMI.txt" の一部です。このようなファイルで OID 番号に対して 名前を付けています。
(例えば org は "iso 3" なので .1.3、dod は "org 6" なので .1.3.6 といった感じです)
SNMPv2-SMI DEFINITIONS ::= BEGIN -- the path to the root org OBJECT IDENTIFIER ::= { iso 3 } -- "iso" = 1 dod OBJECT IDENTIFIER ::= { org 6 } internet OBJECT IDENTIFIER ::= { dod 1 } directory OBJECT IDENTIFIER ::= { internet 1 } mgmt OBJECT IDENTIFIER ::= { internet 2 } mib-2 OBJECT IDENTIFIER ::= { mgmt 1 } transmission OBJECT IDENTIFIER ::= { mib-2 10 } experimental OBJECT IDENTIFIER ::= { internet 3 } private OBJECT IDENTIFIER ::= { internet 4 } enterprises OBJECT IDENTIFIER ::= { private 1 }
従って .iso.org.dod.internet.mgmt.mib-2.system.sysName.0 という指定をしたい場合は MIB ファイルを適切に配置することが必要になります。対して .1.3.6.1.2.1.1.5.0 でアクセスする場合には MIB ファイルは必要ではありません。
そしてこのレジストリ全体に相当するデータベースのことを MIB (=Management Infomation Base) といいます。(したがって「MIB」と「MIB ファイル」は同じものではありません。)