SNMP フレームフォーマット


 SNMP フレームフォーマットの詳しい説明です。

  1. SNMP フレームフォーマット

    Ethernet フレーム
     IP データグラム
     UDP データグラム
     SNMP メッセージ
      共通 SNMP ヘッダ get/set ヘッダ get/set への変数
    Ethernet
    ヘッダ
    14 バイト
    IP
    ヘッダ
    20 バイト
    UDP
    ヘッダ
    8 バイト
    バージョン コミュニティ PDU
    タイプ
    要求
    ID
    エラー
    状況
    エラー
    インデックス
    名前 名前 ・・・

    ※ PDU = Protocol Data Unit の略でパケットのことです。下表ではSnifferでの表現にならって、Command と表現しています。


  2. SNMP メッセージフォーマット

     あるフレームを例に説明します。

     SNMP は BER という符号化規則を使って、データを符号化しています。 そのためフレーム全体がいささか冗長になりがちで、このことは常に議論の的だそうです。 BER については別ページで説明をしています。 以下をもう少し詳しく理解したい場合は BER のページを参照してください。

     説明バイト数
    詳細
    Length30構造標識4
    82長さを表すために2バイト分使う
    03814 ( = 32EH ) バイトが以下に続く
    2E
    Version02汎用・基本データタイプ : Integer3
    01次に1バイト分のデータがある
    00version 0
    Community04汎用・基本データタイプ : Octet String11
    09次に9バイト分のデータがある
    61aabcdefghi
    62b
    63c
    64d
    65e
    66f
    67g
    68h
    69i
    CommandA0範囲限定・基本データタイプ外 : GetRequest-PDU4
    82長さを表すために2バイト分使う
    03796 ( = 31CH ) バイトが以下に続く
    Community までの 18 バイトを引いた値
    1C
    Request ID02汎用・基本データタイプ : Integer4
    02次に2バイト分のデータがある
    5221000 ( = 5208H )
    08
    Error Status02汎用・基本データタイプ : Integer3
    01次に1バイト分のデータがある
    00no error
    Error Index02汎用・基本データタイプ : Integer3
    01次に1バイト分のデータがある
    00no error
    ここまでのバイト数の合計32
    Length30構造標識4
    82長さを表すために2バイト分使う
    03782 ( = 30EH ) バイトが以下に続く
    Error Index までの 14 バイトを引いた値
    0E
    Object
    sysUpTime.0


    要求の例
    値はNULLにする
    30構造標識14
    0C次に12バイト分のデータがある
    06汎用・基本データタイプ : Object Identifier
    08次に8バイト分のデータがある
    2B1.31.3.6.1.2.1.1.1.0
    06.6
    01.1
    02.2
    01.1
    01.1
    01.1
    00.0
    05汎用・基本データタイプ : NULL
    00
    ここまでは共通
    Object
    avgBusy5.0


    応答の例
    30構造標識17
    0E次に14バイト分のデータがある
    06汎用・基本データタイプ : Object Identifier
    0A次に10バイト分のデータがある
    2B1.31.3.6.1.4.1.9.2.1.58.0
    06.6
    01.1
    04.4
    01.1
    09.9
    02.2
    01.1
    3A.58
    00.0
    02汎用・基本データタイプ : Integer
    01次に1バイト分のデータがある
    01CPU 使用率 1 %
    Object
    ifInOctets.4


    応答の例
    30構造標識20
    12次に18バイト分のデータがある
    06汎用・基本データタイプ : Object Identifier
    0A次に10バイト分のデータがある
    2B1.31.3.6.1.2.1.2.2.1.10.4
    06.6
    01.1
    02.2
    01.1
    02.2
    02.2
    01.1
    0A.10
    04.4
    41汎用・基本データタイプ : Counter
    04次に4バイト分のデータがある
    72入力トラフィック総計 1,916,074,665 バイト
    ※データ表現は Counter タイプに従う
    34
    FA
    A9

     SNMP のヘッダに当たる部分は必須です。データの長さにあたる部分と、コミュニティ名(要求 ID も?)が可変長になります。

     SNMP の変数に当たる部分は、どのオブジェクトの値を取るか、いくつ取るか、要求か応答か、によって可変となります。

     OpenViewでは必ず sysUpTime.0 から始まるようです。オブジェクト一つにつき、だいたい 20 バイト前後のようです。


  3. 実際にどれくらいの量のデータがやりとりされるか

    収集オブジェクトとインスタンス数(例)

    Object Nameinstance の数
    avgBusy51
    ifInOctests52
    ifOutOctests52
    ifInErrors52
    ifOutErrors52
    locIfResets52

    要求 / 応答時間間隔バイト数オブジェクト
    要求-860sysUpTime.0, ifInErrors.1-48
    応答0.0153924sysUpTime.0, ifInErrors.1-48
    要求2.0255860sysUpTime.0, ifInErrors.49-52, ifOutErrors.1-44
    応答0.0124912sysUpTime.0, ifInErrors.49-52, ifOutErrors.1-44
    要求1.0176860sysUpTime.0, avgBusy5.0, ifInOctets.1-47
    応答0.01291,016sysUpTime.0, avgBusy5.0, ifInOctets.1-47
    要求1.0152860sysUpTime.0, ifInOctets.48-52, ifOutOctets.1-43
    応答0.01321,008sysUpTime.0, ifInOctets.48-52, ifOutOctets.1-43
    要求1.0167940sysUpTime.0, locIfResets.1-40, ifOutErrors.45-52
    応答0.0144998sysUpTime.0, locIfResets.1-40, ifOutErrors.45-52
    要求1.0133233sysUpTime.0, ifOutOctets.44-52
    応答0.0049261sysUpTime.0, ifOutOctets.44-52
    要求2.0451306sysUpTime.0, locIfResets.41-52
    応答0.0055328sysUpTime.0, locIfResets.41-52
    バイト数総合計10,366約 10K バイトか、、、
    要求バイト数合計4,919約 5k バイトか、、、
    応答バイト数合計5,447値がはいって要求より多い