6. SNMPv3メッセージ形式
このセクションでは、SNMPv3メッセージ形式と対応するバージョン固有のメッセージ処理モデル(v3MP)を定義します。
SNMPv3メッセージは以下のように定義されます:
SNMPv3Message ::= SEQUENCE {
msgVersion INTEGER ( 0 .. 2147483647 ),
msgGlobalData HeaderData,
msgSecurityParameters OCTET STRING,
msgData ScopedPduData
}
HeaderData ::= SEQUENCE {
msgID INTEGER (0..2147483647),
msgMaxSize INTEGER (484..2147483647),
msgFlags OCTET STRING (SIZE(1)),
msgSecurityModel INTEGER (1..2147483647)
}
ScopedPduData ::= CHOICE {
plaintext ScopedPDU,
encryptedPDU OCTET STRING -- 暗号化されたscopedPDU値
}
ScopedPDU ::= SEQUENCE {
contextEngineID OCTET STRING,
contextName OCTET STRING,
data ANY -- 例:[RFC3416]で定義されたPDU
}
6.1. msgVersion
msgVersionフィールドはsnmpv3(3)に設定され、メッセージをSNMPバージョン3メッセージとして識別します。
msgVersionフィールドは、ディスパッチャがメッセージ処理モデルを選択するために使用されます。メッセージ処理モデルの特定のバージョンによって処理できるメッセージの形式は1つのみです。
6.2. msgID
msgIDは、2つのSNMPエンティティ間でリクエストメッセージとレスポンスを調整するため、およびv3MPがアーキテクチャ内の異なるサブシステムモデルによるメッセージの処理を調整するために使用されます。
このフィールドの範囲は0から2147483647です。送信SNMPエンティティでは、msgID値はメッセージ処理モデルによって、交換で最近使用された値とできるだけ異なるように選択されます。リクエストメッセージのmsgIDは、送信SNMPエンティティのv3MPによって、元のリクエストとレスポンスメッセージを調整するために使用されます。
受信SNMPエンティティでは、受信メッセージのmsgIDフィールドは、アーキテクチャ内の異なるサブシステムモデルによるメッセージの処理を調整するために使用されます。
6.3. msgMaxSize
メッセージのmsgMaxSizeフィールドは、メッセージの送信者がサポートする最大メッセージサイズを伝え、最小値は484オクテットです。このフィールドは、SNMPv3アーキテクチャで、このメッセージの送信者に送信できる最大メッセージサイズを決定するために使用されます。
msgMaxSizeの値は、送信SNMPエンティティでメッセージを受信するために利用可能なバッファスペースの量に関する情報を伝えません。
6.4. msgFlags
メッセージのmsgFlagsフィールドには、メッセージの処理を制御するいくつかのビットフィールドが含まれています:
+---------+---------+---------+
| auth | priv | reportable |
+---------+---------+---------+
authおよびprivフィールドは、セキュリティレベルを選択するために使用されます:
- auth = 0 かつ priv = 0: noAuthNoPriv
- auth = 1 かつ priv = 0: authNoPriv
- auth = 1 かつ priv = 1: authPriv
privビットは、scopedPDUが暗号化されているかどうかを示します。privビットが設定されている場合、メッセージでscopedPduDataのencryptedPDU形式が使用されます。privビットが設定されていない場合、scopedPduDataの平文形式が使用されます。
reportableビットは、レポートPDUを送信すべきかどうかを決定するための二次的な補助です。これは、メッセージのPDU部分をデコードできない場合(例えば、暗号化キーが正しくないため)にのみ使用されます。reportableビットが設定されている場合、レポートPDUを送信できます。reportableビットが設定されていない場合、レポートPDUを送信すべきではありません。
reportableビットは、リクエストメッセージで設定すべきです。reportableビットは、レスポンスメッセージで設定すべきではありません。
msgFlagsフィールドの他のすべてのビットは予約されており、メッセージを送信するときはゼロに設定する必要があり(MUST)、メッセージを受信するときは無視すべきです(SHOULD)。
6.5. msgSecurityModel
メッセージのmsgSecurityModelフィールドは、送信者がメッセージを生成するために使用したセキュリティモデルを識別します。受信者は、このセキュリティモデルを使用してメッセージのセキュリティ処理を実行すべきです。
msgSecurityModel値は、ディスパッチャがメッセージを処理するセキュリティモデルを選択するためにも使用されます。
6.6. msgSecurityParameters
メッセージのmsgSecurityParametersフィールドには、セキュリティパラメータが含まれます。このフィールドのデータの内容と形式は、msgSecurityModelフィールドで識別されるセキュリティモデルによって定義されます。
6.7. scopedPduData
scopedPduDataフィールドは、平文または暗号化されたScopedPDUのいずれかを表します。平文または暗号化の選択は、msgFlagsフィールドのprivビットによって決定されます。
privビットが0の場合、scopedPduDataは平文ScopedPDUです。privビットが1の場合、scopedPduDataは暗号化されたScopedPDUを含むOCTET STRINGです。
6.8. scopedPDU
scopedPDUには、管理コンテキストとPDUデータを識別する情報が含まれます。
6.8.1. contextEngineID
contextEngineIDフィールドは、特定の名前を持つ特定のコンテキストを実現する可能性のあるSNMPエンティティを一意に識別します。
contextEngineIDは、SNMP-FRAMEWORK-MIB [RFC3411] で定義されているsnmpEngineIDと同じ形式を持ちます。
6.8.2. contextName
contextNameフィールドは、contextEngineIDと組み合わせて、特定のコンテキストを識別します。contextNameは、管理的に定義された意味を持つOCTET STRINGです。これは、contextEngineIDで識別されるSNMPエンティティで特定のコンテキストに名前を付けるために使用されます。
6.8.3. data
dataフィールドにはPDUが含まれます。PDUの形式は、SNMPバージョンによって決定されます。SNMPv3は、[RFC3416] のPDU定義を使用します。