特定のデバイスで使用するために定義されるすべての SNMP MIB モジュールは、そのデバイス用の MIB で構成されます。MIB という用語は、単一のモジュール定義を説明するために使用されることがありますが、これは技術的には正しくありません。MIB は、特定のデバイス (デバイスがハードウェアまたはソフトウェアに関連するかに関わらず) の管理に使用されるモジュールすべてを組み合わせたものです。このため、 ベンダー (または RFC ) で定義される、各モジュールのより正確な名前は、 SNMP MIB モジュールです。
すべての MIB モジュールは、最終的には、 ルート・モジュールの拡張機能です。個々のベンダーからリリースされたすべての MIB モジュールは、 RFC1155-SMI で定義されたエンタープライズ・オブジェクトから拡張されています。このため、すべての SNMP エージェントは RFC1155 をサポートする必要があり、すべての MIB モジュールは RFC1155 の拡張機能です。
SNMP 管理情報ベース (MIB) を拡張可能にするために、関連アイテムは、構造化階層を形成する MIB モジュールに配置されます。 各 MIB モジュールは、以下の構造内に定義されます。
ModuleName DEFINITIONS ::= BEGIN END
モジュール内の BEGIN タグおよび END タグを使用して、いくつかのモジュールを単一のテキスト・ファイル内に定義できます。 MIB コンパイラーは、単一ファイルに定義された任意の数のモジュールを処理できるように する必要がありますが、モジュールの定義があることを必須にしてはいけません。
モジュール内の定義されたあらゆる オブジェクトには規則があります。例えば、モジュール名は、大文字の英字で始まり、文字、数字、ハイフン (-)、または下線 (_) のみで構成される必要があります。オブジェクト名は、小文字の英字で始まり、文字、数字、ハイフン、または下線のみで構成される必要があります。MIB モジュール内のコメントは、2 つの連続するハイフン (--) で表され、この記号に続くテキストは、いずれの行でも無視できます。
MIB はモジュラー式で容易に拡張できる設計なので、モジュールを追加することにより、新規機能やデバイスをサポートできます。あるモジュールが、別のモジュールの拡張機能として作成される場合、モジュールには、DEFINITIONS 行の下に IMPORTS セクションが含まれます。IMPORTS セクションでは、MIB 階層の上位モジュールで必要なオブジェクト、およびそのオブジェクトが定義されるモジュールが定義されます。
RFC1157-SNMP DEFINITIONS ::= BEGIN IMPORTS ObjectName, ObjectSyntax, NetworkAddress,
IpAddress, TimeTicks FROM RFC1155-SMI;
インポートされた MIB 名を指定する時に、入力ミスがしばしば生じます。例えば、RFC1212 は、正しい名前である RFC-1212 ではなく、MIB モジュールとして参照される場合があります。MIB マネージャーにより解析エラーが強調表示される場合、IMPORTS セクションをチェックして、MIB モジュールが正しい名前であることを確認する必要があります。 一部の MIB モジュールには、EXPORTS セクションも含まれています (これもセミコロンで終わります)。このセクションは、他の MIB モジュールが指定された同じオブジェクトを使用することを、MIB 作成者が想定していることを、読者に知らせます。ここでは、このセクションは関係がないため無視できます。
SNMP MIB モジュールは、ASN.13 (抽象構文記法 1) として知られるフォーマットで定義されます。ただし、SNMP は、ASN.14 の一部のみを使用します。ASN.1 は、 ITU-T X.208 および ISO 8824 で定義されています。SNMP に適用される ASN.1 の一部は、RFC1155 で定義されています。RFC1155 では、以下の有効な SNMP データ型を定義しています。
定義型は、プリミティブ型またはコンストラクター型の 特定フォーマットを指定するために使用される仕組みです。MIB 作成者は、TEXTUAL-CONVENTION 構造を使用して追加の型を定義できます。
DisplayString ::= OCTET STRING (0..255)
DisplayString ::= TEXTUAL-CONVENTION DISPLAY-HINT "255a" STATUS current DESCRIPTION
"Represents textual information taken from the NVT ASCII character set, as defined
in pages 4, 10-11 of RFC 854. To summarize RFC 854, the NVT ASCII repertoire
specifies: - the use of character codes 0-127 (decimal) - the graphics characters
(32-126) are interpreted as US ASCII - NUL, LF, CR, BEL, BS, HT, VT and FF have the
special meanings specified in RFC 854 - the other 25 codes have no standard
interpretation - the sequence 'CR LF' means newline - the sequence 'CR NUL' means
carriage-return - an 'LF' not preceded by a 'CR' means moving to the same column on
the next line. - the sequence 'CR x' for any x other than LF or NUL is illegal.
(Note that this also means that a string may end with either 'CR LF' or 'CR NUL',
but not with CR.) Any object defined using this syntax may not exceed 255 characters
in length." SYNTAX OCTET STRING (SIZE (0..255))
上述の例では、DisplayString が 0 から 255 文字の長さの OCTET STRING であることを示しています。インターネット標準 MIB の
オブジェクト・タイプに対応する、各 OBJECT DESCRIPTOR は、一意のストリング、ニーモニック・ストリング、
印刷可能ストリングでなければならないことに注意してください。MIB モジュール作成時に生じる一般的な誤りは、一意でないオブジェクト名を作成してしまうことです。RFC1155 ステートメントの意味は、一意にする必要があるのは単一の MIB モジュール内のオブジェクトのみという意味だと言われています。既に説明したように、 MIB はモジュールの完全なセットであり、組み合わされて、特定のデバイスの 管理に使用されます。このため、任意の MIB モジュールで定義される すべてのオブジェクトは、オブジェクト自体のモジュール内だけではなく、インポートされた任意のモジュール内の その他のオブジェクト名、およびそれらのモジュールがインポートする可能性のある 任意のモジュールにおいても一意にする必要があります。オブジェクト名を一意にする一般的な方法は、すべてのモジュール名の最初に、企業のチッカー・シンボルまたは会社名の短縮形を付けることです。
オブジェクトが定義されると、 オブジェクトは、スパンニング・ツリーのような数値的階層に マッピングされます。オブジェクトが定義されるたびに、オブジェクトは親オブジェクトのリーフとして定義されます。以下の 3 つのルート・オブジェクトは、SNMP MIB ツリーで定義されます。
internet OBJECT IDENTIFIER ::= { iso org(3) dod(6) 1 } directory OBJECT IDENTIFIER ::=
{ internet 1 } mgmt OBJECT IDENTIFIER ::= { internet 2 } experimental OBJECT IDENTIFIER
::= { internet 3 } private OBJECT IDENTIFIER ::= { internet 4 } enterprises OBJECT
IDENTIFIER ::= { private 1 }
これらの定義は、オブジェクト名、関連付けられたオブジェクト・タイプ、 各オブジェクトの親の名前 (または親の番号付きリスト)、およびその親 (複数の場合あり) に 対するこの子のリーフ番号を示しています。これらの項目の表示上の形式は 階層形式です。
「MIB ツリー」ビューでは、MIB ツリー内のノードを展開したり縮小したり することによって、ビュー内を移動します。MIB ツリーの最上位の ブランチには、MIB モジュールの名前が含まれており、 各 MIB モジュール・ブランチの中には、MIB を構成するその他の エレメントが含まれています。モジュールが MIB に追加されると、 オブジェクトが MIB ツリーに追加されます。各オブジェクトは、そのオブジェクト名またはそのオブジェクト ID (OID) により参照できます。最も正確な方法は、オブジェクトの OID を参照することです。 オブジェクトの OID は、オブジェクトの番号として定義されており、ルート・ノードまで遡って続くそれぞれの祖先の番号が、それぞれを区切るピリオド (.) を使用して一緒に連結されます。エンタープライズ・オブジェクト (ノードまたはリーフ) の OID は、 1.3.6.1.4.1 です。
多くのベンダーが、それぞれのオブジェクト名を汎用的に一意になるようにしていないため、2 つのベンダーが同じ名前を共有するオブジェクトを持つことがあります。このことにより、オブジェクトの識別にオブジェクト名を使用すると あいまいさになります。