SNMP(Simple Network Management Protocol)とは、LANを構成しているすべての機器が正常に作動しているかどうかをネットワーク管理者が把握できるように、機器の状態を監視するためのプロトコルを言います。
SNMPに関しては、バージョンが全部で3つあり、それらは、SNMPv1、SNMPv2、及び、SNMPv3です。
SNMPv2以降では、セキュリティ面の強化がなされていますが、基本的にはどれも変わりありません。
SNMPv1はRFC1157、SNMPv2はRFC1901、SNMPv3はRFC3410にそれぞれ記載されています。
RFC1157など、RFCの詳細は、以下のサイトで御覧下さい。
IETF RFC Page
JPNIC RFC-JP(社団法人:日本ネットワークインフォメーションセンター)
RFC1157(英文)
RFC1901(英文)
RFC3410(英文)
SNMPは、ネットワーク管理プロトコルと呼ばれるプロトコルで、SNMPマネージャーと呼ばれるソフトウェアでSNMPエージェント機能がある機器を一括して管理できます。
SNMPマネージャーで管理される機器は、MIB(Management Information Base)と呼ばれる管理情報データベースを持っています。
MIBは、ミブと読みます。
スイッチやルーターやコンピュータなど、ネットワーク上にある管理対象の機器がSNMPエージェントとなります。
SNMPエージェントとして機能するスイッチは、インテリジェントハブとかインテリジェントスイッチと呼ばれているスイッチです。
レイヤ3スイッチ(L3スイッチ)でもかまいません。
コンピュータでは、Windows® 2000やLinuxなどがSNMPエージェントになれます。
ただし、PCの場合、SNMPエージェントのソフトをインストールしたり、設定を行う必要があります。
Windows® 2000などの場合は、SNMPエージェントを利用できるようにするだけで済みます。
Linuxの場合は、以下のucd-snmpというソフトをインストールして利用できるように環境設定も行います。
ダウンロードしてインストールするには、以下をクリックしてucd-snmpをクリックするとダウンロードできます。
SOURCEFORGE.net [ ucd-snmp download ]
これらの他には、ネットワーク対応のプリンターなどもSNMPエージェント対応の機種があります。
SNMPエージェントは、以下の図に示したようにUDPの上位プロトコルに位置し、161というポート番号を使用して、SNMPマネージャーと呼ばれるソフトウェアがインストールされているPCと通信を行います。
そして、各機器に組み込まれているSNMPエージェントが機器情報をこのPCに送ります。
OSI参照モデルにおけるSNMPのレイヤ(階層)
SNMPマネージャーと呼ばれるソフトウェアは、各SNMPエージェントから機器情報を集めます。
そのため、ネットワーク管理者は、ネットワークに接続されているすべてのSNMPエージェント対応機器の状態を監視することができます。
SNMPマネージャーをインストールした管理用PCがあれば、ネットワーク管理者は、すべての機器の状態を把握できるようになります。
何れかの機器に異常があれば、ポート番号が162のポートを通してTrap(トラップ)と呼ばれる機器異常通知メッセージが管理用PCに送られてきます。
Trapは、SNMPエージェントからSNMPマネージャーへ一方的に送られる機器異常通知メッセージです。
ページトップへ
SNMPエージェントの機能がある機器は、MIB(Management Information Base)と呼ばれる管理情報データベースを内部に持っています。
SNMPエージェントは、このデータベースに書き込まれている値をSNMPマネージャーをインストールした管理用PCとの間でやりとりします。
MIBは、木の枝のような構造になっています。
STP(スパニング・ツリー・プロトコル)やWindows®のマイコンピュータも似たようなツリー構造になっています。
家系図なども同様です。
ツリー状になっている仕組みは、身の回りで時々見かけます。階層化されていて見てもわかりやすいです。
階層化されたこのようなMIBの構造をMIBツリーまたはグローバルネーミングツリーと言います。
これは、ASN.1という言語で書かれています。
ASN.1は、Abstruct Syntax Notation Oneの略で、日本語で抽象構文記法1と言い、エーエスエヌワンまたはアセンワンと読みます。
ASN.1は、OSI参照モデルのプロトコルを記述するために考案された言語です。
ASN.1は、ISO(国際標準化機構)で規定されました。
国際標準化機構は、民間の非営利団体で電気の分野を除いた工業分野の標準規格を策定している国際機関です。
ここでは国際的な標準規格が策定されいます。
ASN.1は、コンピュータ言語として世界中の多くのプログラマーが使用しているオブジェクト指向言語のC++を連想させるような高級言語で、オブジェクトと呼ばれる変数とインスタンスと呼ばれる実体まであります。
INTEGERやREALなどのオブジェクトの型もある高級言語です。
MIBは、この言語で記述されています。
この中身を見ていきましょう。
MIBツリーを辿っていく際の出発点は、木の根っことなる root で、下図のようにここから下へ辿って目的のオブジェクトへ向かいます。
MIBの階層木構造
上の図はまるで木のような構造をしていて、枝を辿っていくとオブジェクトと呼ばれるリーフ(葉)にぶつかります。
このオブジェクトには上の図のように番号が付けられています。
探したい目的のオブジェクトまで辿り着く過程で番号と番号の間にドットを入れます。
こうして、目的のオブジェクトまで辿り着くと、番号とドットから成る文字列ができあがります。
これがオブジェクトIDで、OIDと書くこともあります。
例えば、上の図の一番右下の snmp というオブジェクトまで辿っていくと、このオブジェクトのIDを根っこから正しく書くと以下のように書きます。
その下にオブジェクトの名前も並べてみます。
.1.3.6.1.2.1.11
.iso.org.dod.internet.mgmt.mib-2.snmp
mib-2(1.3.6.1.2.1)というオブジェクトグループの下の階層にある11個のオブジェクトグループは、標準MIBと言います。
この標準MIBは、MIB−2とも言います。
現在の標準MIBは、このMIB−2の原型となったMIB−1から拡張されました。
ところで、internet(1.3.6.1)の下にprivate(1.3.6.1.4)があり、さらにその下にenterprises(1.3.6.1.4.1)というオブジェクトのグループがあります。
このオブジェクトグループの配下にあるすべてのオブジェクトは、メーカーが自由に書き込める拡張MIBです。
これによって、製品固有の情報を書き込むことができます。
enterprises(1.3.6.1.4.1)以下は、IANA(Internet Assigned Numbers Authority)という国際組織が管理しています。
IANAは、アイアナと読みます。
IANAという組織は、IPアドレスの管理も行っているので有名です。
拡張MIBには、企業のコードがオブジェクトとしてたくさん登録されています。
例えば、シスコシステムズならcisco(1.3.6.1.4.1.9)というオブジェクトIDです。
拡張MIBに含まれる一番末端のリーフ(葉)の番号は 9 です。
他にもいろいろな種類のMIBのグループがあります。
詳しくは、RFCに書かれています。
MIB−1はRFC1156、MIB−2はRFC1213にそれぞれ記載されています。
RFC1156など、RFCの詳細は、以下のサイトで御覧下さい。
IETF RFC Page
JPNIC RFC-JP(社団法人:日本ネットワークインフォメーションセンター)
また、MIBの中身について非常に詳しく書いていて、色分けされて綺麗にまとまっているホームページを以下に紹介します。
@IT:監視を自動化するSNMP(3)
ページトップへ
SNMPマネージャーは、LANに接続されているSNMPエージェント対応機器の情報を一元管理できるソフトウェアです。
ネットワーク管理者は、どこか管理端末かサーバーを設置して、そこにSNMPマネージャーのソフトウェアをインストールします。
このソフトウェアで、SNMPエージェントからの情報を収集したり、収集した情報を解析したり、解析結果を表やグラフに表示したり、SNMPエージェントにある情報を書き換えたりできます。
このソフトウェアは、これらの作業を行うために、SNMPエージェントとSNMPというプロトコルに従った通信を行います。
SNMPマネージャーのソフトウェアには、いろいろ格差があります。
有料の高価なソフトからフリーソフトまで様々です。
それでも基本的な機能に関して言えば、どれも持っています。
しかし、表示機能や拡張機能などで差が出てきます。
基本機能は、SNMPエージェントとの通信、SNMPエージェントからの情報収集、収集した情報の解析、解析結果の表示です。
収集した情報を表示し、LANのトラフィック情報をグラフ化するくらいのシンプルなソフトから、複雑な解析結果をもあります。
それでは、SNMPマネージャーのソフトを幾つか紹介します。
私(ケロ丸)が知る限り、フリーソフトのSNMPマネージャーとしては、MRTG(Multi Router Traffic Grapher)、TWSNMPマネージャ、試作SNMPマネージャー [ snmpman ]の3つがあります。
この中で、Windows® 2000などのWindows NT®系のWindows®のDOS環境でコマンドを実行して使用できるタイプのSNMPマネージャー(snmpman)を紹介します。
snmpmanの簡単な使い方の説明が以下のサイトにあります。
SNMPマネージャー [ snmpman ] でMIBを眺める
また、以下のサイトには、snmpmanのプログラム自体と開発ツールまで公開されております。
試作SNMPマネージャー [ snmpman ]
Windows NT®系のWindows®には、snmpapi.dll や mgmtapi.dll というモジュール(DLLファイル)があります。
DLLファイルは、Windows®用の部品のようなプログラムです。
これらのDLLファイルを使用したソフトが、snmpmanです。
開発ツールも公開されていて、SNMPマネージャーのソフト開発を行いたい人は、参考になるかもしれません。
次は、TWSNMPマネージャというソフトです。
これも無料のSNMPマネージャーソフトです。
以下のサイトにあり、ダウンロードできます。
TWSNMPマネージャ
MIBブラウザ(MIBの階層構造を一覧できるツール)、Trapの受信、障害検出時のメール通知やプログラム起動、ポーリングのグラフ表示など様々な機能があり、フリーソフトとしては高機能です。
ポーリングとは、同期などの目的のために、ネットワーク上に存在するコンピュータやネットワーク機器に定期的に一つ一つ問い合わせを行う方式を言います。
SNMPマネージャーは、まさにこの方式で通信を行っています。
TWSNMPマネージャは、SNMPv3にも対応しているようです。
高価なソフトがなくても高機能ならフリーソフトで十分な場合もあります。
試しに使ってみる価値は十分あると思います。
次は、MRTGです。
これは、非常に有名なSNMPマネージャーのソフトで、収集した情報を表示し、LANのトラフィック情報をグラフ化するタイプのソフトです。
MRTGのソフト一式(Windows®用)の圧縮ファイルは、以下のサイトにあり、リンク切れでない限りすぐダウンロードできます。
mrtg-2.9.17.tar.gz
また、Windows®用のMRTGのインストールについて以下のサイトに説明があります。
このサイトは、snmpmanのダウンロードサイトと同じです。
MRTGのWindows® 2000へのインストール
LinuxなどのUNIX系OS用を希望される方は、以下のサイトからお探し下さい。
MRTG
有料のSNMPマネージャーソフトは、かなり高価で、最近では低価格なレイヤ3スイッチが20万円を割る価格で販売されていますが、それよりはるかに高価です。
ケロ丸が知っている製品では、アライドテレシス株式会社のCentreNET Swim Managerがあります。
以下のサイトに製品の説明が記載されています。
ネットワークマネージメントソフトウェア|CentreNET Swim Manager Ver.3.0
立体円グラフ、棒グラフ、折れ線グラフなど、多くのグラフ機能、ネットワーク構成マップなど、非常に多くの機能があります。
そのために30万円以上します。
他にどんな製品があるのかケロ丸はあまり知りません。
SNMPメッセージは、SNMPv1では以下の表に示した5つだけあります。
SNMPメッセージ | 説明 |
---|---|
GetRequest | 指定のオブジェクトIDに対応した情報を貰いたいと要求する。 |
GetNextRequest | 次のオブジェクトIDに対応した情報を貰いたいと要求する。 |
SetRequest | 指定のオブジェクトIDに対応した情報を書き換えたいと要求する。 |
GetResponse | 要求に対応した情報を返す。 |
Trap | 故障などの機器異常通知メッセージを返す。 |
欲しい情報の要求と応答
GetRequestというメッセージは、SNMPマネージャーからSNMPエージェントへ送信され、その応答としてGetResponseというメッセージがSNMPエージェントからSNMPマネージャーへ返されます。
GetNextRequestは、直前に送信したGetRequestやGetNextRequestのオブジェクトIDの次のオブジェクトIDに対応する情報を要求します。
GetNextRequestは繰り返し送信でき、最後まで繰り返した場合はエラーが通知されます。
これもGetRequestと同じ相手に送ります。
この応答もGetRequest同様GetResponseメッセージがSNMPエージェントからSNMPマネージャーへ返されます。
GetResponseというメッセージは、先に送信したGetRequestなどのメッセージに対する応答で、要求されたオブジェクトに対応するデータをメッセージに設定してSNMPマネージャー側に返します。
指定の情報の書き換え要求と応答
SetRequestというメッセージは、書き換えたいデータがSNMPエージェント側の機器にある場合に送信されます。
この場合、書き換えたいオブジェクトのオブジェクトIDと書き換えるデータを指定して、SetRequestメッセージを送信します。
このメッセージも、SNMPマネージャーからSNMPエージェントへ送信され、その応答としてGetResponseというメッセージがSNMPエージェントからSNMPマネージャーへ返されます。
機器異常通知メッセージ
Trapというメッセージは、機器の故障などのような機器の異常を通知するメッセージです。
Trapメッセージには、実際に異常が発生した時刻なども含まれています。
SNMPでは、以上のような通信を行うことがわかったと思います。
また、SNMPv2では、上記以外にさらに新しいSNMPメッセージが2つ加わりました。
それらは、GetBulkRequestとInformRequestです。
GetBulkRequestは、GetNextRequestを拡張したメッセージで、繰り返す回数を指定できます。
InformRequestは、SNMPマネージャー同士の通信に利用されます。
それでは、これらのSNMPメッセージの中身はどうなっているのでしょうか。
それを見ていきましょう。
SNMPというプロトコルについてもう一度図を見て思い出してみましょう。
OSI参照モデルにおけるSNMPのレイヤ(階層)
上の図のように、SNMPは一番上のレイヤです。
SNMPメッセージは、赤い矢印のように流れます。
この中身は、IPパケットとして見ると以下のようになっています。
IPヘッダー | UDPヘッダー | データ |
PDUタイプ | PDUの長さ | SNMPバージョン | コミュニティ名 | SNMPコマンド |
タグ(値の型) | 値の長さ | 値 |
値の型(コマンド) | 数値(16進数2桁) |
---|---|
GetRequest | A0 |
GetNextRequest | A1 |
GetResponse | A2 |
SetRequest | A3 |
Trap | A4 |
GetBulkRequest | A5 |
InformRequest | A6 |
SNMPv2-Trap | A7 |
Report | A8 |
値の型(コマンド以外) | 数値(16進数2桁) |
Boolean | 01 |
Integer | 02 |
Bit String | 03 |
Octet String | 04 |
Null | 05 |
Object ID | 06 |
Object Descriptor | 07 |
External | 08 |
Real | 09 |
Enumerated | 0A |
UTF8String | 0C |
Sequence , Sequence of | 10 |
Set , Set of | 11 |
NumericString | 12 |
PrintableString | 13 |
TeletexString | 14 |
VideotexString | 15 |
IA5String | 16 |
UTC Time | 17 |
GeneralizedTime | 18 |
Combination | 30 |
Time | 32 |
IP Address | 40 |
Counter | 41 |
Gauge Counter | 42 |
Time Ticks | 43 |
次は、前述のSNMPコマンドの内部がどうなっているのかを見ていきましょう。
SNMPコマンドとそれに続くデータは、上の方で表の中に示したように、コミュニティ名に続いていました。
SNMPコマンドとそれに続くデータから、また前述のASN.1オブジェクトのフォーマットの領域が入れ子のようになっていくことに注意して下さい。
それでは、一般的なSNMPコマンドとそれに続くデータのフォーマットを以下に示します。
PDUタイプ | PDUの長さ | リクエストID | エラーステータス | エラーインデックス | 要求時または応答後のMIBデータ |
エラーステータス名 | エラーステータスの数値 | 意味 |
---|---|---|
noError | 0 | エラーなし。 |
tooBig | 1 | データサイズが大きすぎてPDUに値を設定できません。 |
noSuchName | 2 | 指定のMIBがないか、または、書き込みができませんでした。 |
badValue | 3 | 設定した値が不正です。 |
readOnly | 4 | 書き込みができませんでした。 |
genError | 5 | 数値が0〜4以外のエラーが発生しました。 |
noAccess | 6 | アクセスできないMIBに対してセットしようとしました。 |
wrongType | 7 | MIBで必要なタイプと違うタイプです。 |
wrongLength | 8 | MIBで必要なデータ長と違う長さです。 |
wrongEcoding | 9 | ASN.1の符号が不正です。 |
wrongValue | 10 | MIB値が不正です。 |
noCreation | 11 | 該当するMIBがありません。 |
inconsistentValue | 12 | 現在何か理由があって値が設定できません。 |
resourceUnavailable | 13 | リソースが利用できません。 |
commitFaild | 14 | 値の更新に失敗しました。 |
undoFaild | 15 | 値の更新に失敗した時に、更新された値を元に戻せませんでした。 |
notWriteable | 17 | 書き込むことができません。 |
inconsistentName | 18 | 該当するMIBがないため、作成できません。 |
(1) PDUタイプ | (2) PDUの長さ | (3) MIBデータを入れるためのレコード |
PDUタイプ | PDUの長さ | オブジェクトID | MIB値 |
PDUタイプには、上の表「値の型に対応する数値」の何れかが設定されます。
PDUの長さには、前述のBER(Basic Encoding Rules)と呼ばれる符号化規則に従った値が設定されます。
オブジェクトIDには、SNMPエージェントに要求して取得したい対象のオブジェクトID、または、SNMPエージェントからの応答で返ってきたオブジェクトのIDが設定されます。
MIB値は、オブジェクトの値そのものです。
これを取りたいためにSNMPエージェントに要求します。
これまでは、Trap(トラップ)以外のSNMPコマンドのSNMPメッセージについて説明しましたが、今度はTrapです。
前述しましたが、Trapというメッセージは、機器の故障などのような機器の異常を通知するメッセージです。
このメッセージのフォーマットは以下の通りです。
PDUタイプ | PDUの長さ | オブジェクトID | エージェントアドレス | Trap番号 | 拡張Trap番号 | Trap発生時間 | Trap関連MIB情報 |
ページトップへ
SNMPとRMONについて[メニュー]へ戻る
サイトマップ(LAN技術研究室の案内図)
ネットワーク技術用語集へ行く
LAN技術研究室のトップページへ
© 2007 Toyozi Masuda All rights reserved.