SNMPの動作自体は名前の示すように非常にシンプルですが、アクセス対象であるMIBはお世辞にもシンプルとは言えません(第2回「どのようにしてネットワークを管理するのか?」参照)。そこで、今回はこのMIBがどのような構造をしているか、また標準MIBの中でも基本であるMIB-2にどのような情報が定義されているかを具体的に解説したいと思います。
SNMPによるネットワークシステムの管理とは「機器の管理情報ベース(MIB:Management Information Base)の情報を取得(または更新)する」ことであるといえます。どのような情報がMIBで管理されているかは機器によって異なりますが、SNMPで管理される機器は必ずMIBを保持しています。
MIBの目的はネットワーク管理における標準的な情報管理構造の確立です。そのため多くのベンダが作成することが予想されるMIBは、定義ルールや値の取得(または更新)方法を規定(*1)する必要があります。
(*1)
MIBの定義ルールや値の参照方法として「SMI(Structure of Management Information)」が「RFC1155」に定義されています。また、MIBの書式は「ASN.1(Abstract Syntax Notation.1)」という言語が利用され、実際のエンコーディングには、BER(Basic Encoding Rules)を利用しています。
しかしすべての機器が固有のMIBを持っているというわけではありません。SNMPマネージャは監視対象の機器が実装しているMIBのオブジェクトID(OID)を指定して情報を取得しますが、もし対象機器がすべて異なるMIBを実装してしまうとすべての対象機器のMIBファイルを参照しなければなりません(なぜなら取得するオブジェクトのOIDが分からないからです)。
この問題を解決するため、TCP/IPによるネットワークシステムに接続される機器が実装するべきMIBが標準MIBとしてRFCで定義されています。この標準MIBに対し、ベンダなどが独自に用意したMIBをプライベートMIBや拡張MIBなどと呼んで区別します。
機器の管理する情報は多岐にわたりますが、その中でも最も標準的なMIBとして位置付けられているのが「MIB-2」です。MIB-2は図1の示すように、MIBのオブジェクトツリーの中ではインターネットサブツリーの下(1.3.6.1.2.1)にあります(オブジェクトツリーに関しては、第2回「どのようにしてネットワークを管理するのか?」参照)。
図1 オブジェクトのツリー(画面をクリックすると拡大表示します)
MIB-2の解説をする前に、少しだけ歴史的経緯を説明します。最初の標準MIBとしてRFC1156で定義されたのは「MIB-1」でした。MIB-1では114種類の管理対象オブジェクトを定義していますが、OIDの割り当てを単純で分かりやすいものにするためにこれらを8個のグループ(System、Interface、Address Translation、IP、ICMP、TCP、UDP、EGP)に分類しています。
その後RFC1213において、新たに57種類の管理対象オブジェクトを追加した171種類の管理対象オブジェクトを11個のグループに分類したMIB-2が定義され、MIB-1を置き換えました。その後もMIB-2をはじめとする標準MIBは拡張されていますが、RFC1213に定義されているMIB-2が最も標準的なMIBと呼んで差し支えないでしょう。
1 |
System |
2 |
Interface |
3 |
Address Translation |
4 |
IP |
5 |
ICMP |
6 |
TCP |
7 |
UDP |
8 |
EGP |
9 |
OIM |
10 |
Transmission |
11 |
SNMP |
|
表1 RFC1213で定義されたMIB-2の監視対象オブジェクトのグループ |
Systemグループには、機器のシステムに関係する設定が管理されています。このグループのオブジェクトは次のとおりです。
sysDescr |
エンティティの情報 |
sysObjectID |
ベンダのOID |
sysUpTime |
最後に初期化されてからの経過時間 |
sysContact |
ノードの管理者の情報 |
sysName |
ドメイン名 |
sysLocation |
ノードの物理的な位置 |
sysService |
エンティティが提供するサービス |
|
表2 Systemグループ(1.3.6.1.2.1.1) |
Interfaceグループには、機器の保有するハードウェアインターフェイスに関係する設定が管理されています。最初のオブジェクトである「ifNumber」にこの機器が保有するインターフェイス数が格納されており、その数に応じて設定を格納するテーブル行が追加されます。このグループのオブジェクトは次のとおりです。
ifNumber |
機器の保持しているインターフェイス数 |
ifTable |
各インターフェイスの設定が格納されたテーブル |
ifEntry |
テーブルのリスト |
ifIndex |
インターフェイスのインデックス |
ifDescr |
このインターフェイスの説明 |
ifType |
インターフェイスタイプ(*2) |
ifMTU |
MTUの値 |
ifSpeed |
帯域 |
ifPhysAddress |
物理アドレス |
ifAdminStatus |
設定状態 |
ifOperStatus |
動作状態 |
ifLastChange |
現在の動作状態に変化した時刻 |
ifInOctets |
受信したすべてのオクテット数 |
ifInUcastPkts |
受信したユニキャストパケット数 |
ifInNUcastPkts |
受信した非ユニキャストパケット数 |
ifInDiscards |
エラー以外の理由で破棄された受信パケット数 |
ifInErrors |
エラーになった受信パケット数 |
ifInUnknownProts |
サポートされていないプロトコルのため破棄された受信パケット数 |
ifOutOctets |
転送したすべてのオクテット数 |
ifOutUcastPkts |
送信したユニキャストパケット数 |
ifOutNUcastPkts |
送信した非ユニキャストパケット数 |
ifOutDiscards |
エラー以外の理由で破棄された送信パケット数 |
ifOutErrors |
エラーになった送信パケット数 |
ifOutQLen |
出力用のキューにためられるパケット数 |
ifSpecific |
追加情報への参照 |
(*2)インタ-フェイスタイプのリストは、RFC1213にあります。
|
表3 interfaceグループ(1.3.6.1.2.1.2)
(ここをクリックすると別ウィンドウが開きます) |
Address Translationグループは、MIB-1との互換性のために残されていますが、MIB-2では使用していません。このグループのオブジェクトIDは(1.3.6.1.2.1.3)です。
IP(Internet Protocol)グループには、プロトコルの使用に関する設定が格納されています。このグループのオブジェクトは次のとおりです。
ipForwarding |
このエンティティがゲートウェイであるかどうか |
ipDefaultTTL |
標準のTTL値 |
ipInRecevies |
受信データグラム総数 |
ipInHdrErrors |
ヘッダーのエラーのために破棄した受信データグラム数 |
ipInAddErrors |
無効なIPアドレスのために破棄した受信データグラム数 |
ipInForw-Datagrams |
ほかのエンティティへ転送した受信データグラム数 |
ipInUnknown-Protos |
サポートされていないプロトコルのため破棄された受信データグラム数 |
ipInDiscards |
エラー以外の理由で破棄された受信データグラム数 |
ipInDelivers |
正常に受信したデータグラム数 |
ipOutRequests |
送信データグラム総数 |
ipOutDiscards |
エラー以外の理由で破棄された送信データグラム数 |
ipOutNoRoutes |
経路不明で破棄された送信データグラム数 |
ipReasm
-Timeout |
再構成のためにデータを保持できる時間 |
ipReasmReqds |
再構成を必要としたIPフラグメント数 |
ipReasmOKs |
正常に再構成できたフラグメント数 |
ipReasmFails |
再構成で検出したエラー数 |
ipFragOKs |
正常にフラグメントされたデータグラム数 |
ipFragFails |
フラグメントされずに破棄されたデータグラム数 |
ipFragCreates |
フラグメント作成数 |
ipAddrTable |
IPアドレスに関するテーブル |
ipAddrEntry |
IPアドレスに関する情報のリスト |
ipAdEnt-
Addr |
エントリのIPアドレス |
ipAdEnt-
IfIndex |
インターフェイスのインデックス |
ipAdEnt-
NetMask |
サブネットマスク |
ipAdEnt-BcastAddr |
ブロードキャストアドレスの
最下位ビット値 |
ipAdEnt-Reasm-
MaxSize |
処理可能なデータグラムのサイズ |
ipRoutingTable |
IPルーティングテーブル(現在は未使用) |
ipNetTo-MediaTable |
IPアドレスから物理アドレスへのマッピングテーブル |
ipNetTo-MediaEntry |
テーブルのリスト |
ipNetToMedia-IfIndex |
インターフェイスのインデックス |
ipNetToMedia-PhysAddress |
物理アドレス |
ipNetToMedia-
NetSddress |
対応するIPアドレス |
ipNetToMedia-
Type |
メディアタイプ |
ipRouting-Discards |
破棄されたルーティング項目数 |
ipForward |
IPの転送テーブル |
ipForward-Number |
転送テーブルの
エントリ数 |
ipForward-Table |
転送テーブル |
ipForward-Entry |
テーブルのリスト |
ipForward-Dest |
あて先のIPアドレス |
ipForward-Mask |
サブネットマスク |
ipForward-Policy |
転送ポリシー |
ipForward-NextHop |
次にルーティ
ングするノードのIPアドレス |
ipForward-IfIndex |
次にルーティ
ング するローカルインターフェイスのインデックス |
ipForward-Type |
ルートタイプ |
ipForward-Proto |
ルートを調査したプロトコル |
ipForward-Age |
ルートが最後に更新されてからの経過時間 |
ipForwardInfo |
ルーティング
プロトコルの
MIB定義参照 |
ipForward-NextHopAS |
次にルーティン グするAS
(Autonomous System)番号 |
ipForward-Metric1 |
ルートの1次メトリック |
ipForward-Metric2 |
ルートの代替メトリック |
ipForward-Metric3 |
ルートの代替メトリック |
ipForward-Metric4 |
ルートの代替メトリック |
ipForward-Metric5 |
ルートの代替メトリック |
|
表4 IPグループ(1.3.6.1.2.1.2)
(ここをクリックすると別ウィンドウが開きます) |
ICMP(Internet Control Message Protocol)グループには、ICMPの動作に関する設定が格納されています。このグループのオブジェクトは次のとおりです。
icmpInMsgs |
ICMPメッセージの受信総数 |
icmpInErrors |
エラーの発生したICMPメッセージの受信数 |
icmpInDestUnreachs |
Destination
Unreachable(到達不能)の受信数 |
icmpInTimeExcds |
TimeExceeded(時間超過)の受信数 |
icmpInParmProbs |
Parameter Problem(パラメータ異常)の受信数 |
icmpInSrcQuenchs |
Source Quench(送信元の消失)ICMPメッセージの受信数 |
icmpInRedirects |
Redirectの受信数 |
icmpInEchos |
Echo Requestの受信数 |
icmpInEchosReps |
Echo Replyの受信数 |
icmpInTimestamps |
Timestamp Requestの受信数 |
icmpInTimestampsReps |
Timestamp Replyの受信数 |
icmpInAddMasks |
Address Mask
Requestの受信数 |
icmpInAddMasksReps |
Address Mask
Replyの受信数 |
icmpOutMsgs |
ICMPメッセージの送信総数 |
icmpOutErrors |
エラーの発生したICMPメッセージの送信数 |
icmpOutDestUnreachs |
Destination
Unreachable(到達不能)の送信数 |
icmpOutTimeExcds |
TimeExceeded(時間超過)の送信数 |
icmpOutParmProbs |
Parameter Problem(パラメータ異常)の送信数 |
icmpOutSrcQuenchs |
Source Quench(送信元の消失)ICMPメッセージの送信数 |
icmpOutRedirects |
Redirectの送信数 |
icmpOutEchos |
Echo Requestの送信数 |
icmpOutEchosReps |
Echo Replyの送信数 |
icmpOutTimestamps |
Timestamp Requestの送信数 |
icmpOutTimestampsReps |
Timestamp Replyの送信数 |
icmpOutAddMasks |
Address Mask
Requestの送信数 |
icmpOutAddMasksReps |
Address Mask
Replyの送信数 |
|
表5 ICMPグループ(1.3.6.1.2.1.5)
(ここをクリックすると別ウィンドウが開きます) |
TCP(Transmission Control Protocol)グループには、TCPの動作に関する設定が格納されています。このグループのオブジェクトは次のとおりです。
tcpRtoAlgorithm |
オクテット再送のアルゴリズム |
tcpRtoMin |
再送のタイムアウトとして許可される時間の最小値 |
tcpRtoMax |
再送のタイムアウトとして許可される時間の最大値 |
tcpMaxConn |
接続の最大数 |
tcpActivOpens |
接続がCLOSEDからSYN-SENTに移行した回数 |
tcpPassiveOpens |
接続がLISTENからSYN-REVDに移行した回数 |
tcpAttemptFails |
接続の失敗回数 |
tcpEstabResets |
リセット回数 |
tcpCurrEstab |
現在ESTABLISHDまたはCLOSE-WAITの接続数 |
tcpInSegs |
受信セグメント総数 |
tcpOutSegs |
送信セグメント総数 |
tcpRetransSegs |
再送セグメント総数 |
tcpConnTable |
TCP接続に関するテーブル |
tcpConnEntry |
TCP接続のリスト |
tcpConnState |
接続のステータス |
tcpConnLocalAddress |
ローカルの
IPアドレス |
tcpConnLocalPort |
ローカルの
ポート番号 |
tcpConnRemAddress |
リモートの
IPアドレス |
tcpConnRemPort |
リモートの
ポート番号 |
tcpInErrs |
エラーになった受信セグメント数 |
tcpOutRsts |
RSTフラグを含んだ送信セグメント数 |
|
表6 TCPグループ(1.3.6.1.2.1.6)
(ここをクリックすると別ウィンドウが開きます) |
UDP(User Datagram Protocol)グループには、UDPの動作に関する設定が格納されています。このグループのオブジェクトは次のとおりです。
udpInDatagrams |
データグラムの受信総数 |
udpNoPorts |
受信ポートに対応アプリケーションのなかった受信データグラム数 |
udpInErrors |
上記以外の理由でエラーになった受信データグラム数 |
udpOutDatagrams |
データグラムの送信総数 |
udpTable |
UDPのエンドポイントに関するテーブル |
udpEntry |
テーブルのリスト |
|
udpLocalAddress |
ローカルのIPアドレス |
|
udlLocalPort |
ローカルのポート番号 |
|
表7 UDPグループ(1.3.6.1.2.1.7) |
EGP(Exterior Gateway Protocol)グループには、EGPの動作に関する設定が格納されています。EGPはautonomousシステムの通信に使用されるプロトコルで、RFC904で定義されています。EGPを実装していないシステムでは、このグループのオブジェクトの実装は必須ではありません。このグループのオブジェクトIDは(1.3.6.1.2.1.8)です。
OIMグループはCMOT(Common Management Information Protocol over TCP/IP)に関する設定が格納されるグループですが、現在のMIB-2では使用されていません。このグループのOIDは(1.3.6.1.2.1.9)です。
Transmissionグループには、データ転送に関する設定が格納されています。MIB-2を最初に定義したRFC1213ではTransmissionグループのオブジェクトが明確に定義されていません。その後RFC1700でデータ転送に関するオブジェクトのリストが定義されていましたので、興味のある方は参照してください。このグループのOIDは(1.3.6.1.2.1.10)です。
SNMPグループには、SNMPの動作に関する設定が格納されています。このグループのオブジェクトは次のとおりです。
snmpInTooBigs |
tooBigエラーの受信数 |
snmpInNoSuchNames |
noSuchNamesエラーの受信数 |
snmpInBadValues |
badValuesエラーの受信数 |
snmpInReadOnlys |
readOnlysエラーの受信数 |
snmpInGenErrs |
genErrsエラーの受信数 |
snmpInTotalReqVars |
リクエストに応答して取り出したオブジェクトの総数 |
snmpInTotalSetVars |
変更されたオブジェクトの総数 |
snmpInGetRequests |
GetRequestの受信数 |
snmpInGetNexts |
GetNextRequestの受信数 |
snmpInSetRequests |
SetRequestの受信数 |
snmpInGetResponces |
GetResponceの受信数 |
snmpInTraps |
Trapの受信数 |
snmpOutTooBigs |
tooBigエラーの送信数 |
snmpOutNoSuchNames |
noSuchNamesエラーの送信数 |
snmpOutBadValues |
badValuesエラーの送信数 |
---- |
使用されていないオブジェクト |
snmpOutGenErrs |
genErrsエラーの送信数 |
snmpOutGetRequests |
GetRequestの送信数 |
snmpOutGetNexts |
GetNextRequestの送信数 |
snmpOutSetRequests |
SetRequestの送信数 |
snmpOutGetResponces |
GetResponceの送信数 |
snmpOutTraps |
Trapの送信数 |
snmpEnableAuthenTraps |
認証失敗トラップの生成の許可 |
|
表8 SNMPグループ(1.3.6.1.2.1.11) |
通常ベンダが機器固有の機能を管理するために補完しているMIBは、privateサブツリーのenterprisesグループ以下(図1参照)にあります。ほかの機器との差別化を図るため、積極的に新しい機能を搭載した機器がリリースされていますが、その多くはプライベートMIBによって独自の管理情報が取得できるようになっています。
これらの追加されたMIBの情報は、各ベンダの提供するMIBファイルを参照することで確認することができるでしょう。
この連載ではSNMPによってネットワークシステムを管理する仕組みと、それらの情報の管理構造である管理情報ベース(MIB)について解説しました。ここまでに解説した内容はあくまでもSNMPというプロトコルの概要であり、より本格的にSNMPを理解したいのであれば、やはりRFCなどの多くの資料に目を通す必要があります。
いかがでしたか?
今後もSNMPの需要はさらに高まることが予想されます。この連載が読者の皆さまのSNMPへの理解に少しでも役に立てば幸いです。