6. Format de message SNMPv3
Cette section définit le format de message SNMPv3 et le modèle de traitement de message spécifique à la version correspondant (v3MP).
Un message SNMPv3 est défini comme suit :
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 -- valeur scopedPDU chiffrée
}
ScopedPDU ::= SEQUENCE {
contextEngineID OCTET STRING,
contextName OCTET STRING,
data ANY -- par exemple, PDUs telles que définies dans [RFC3416]
}
6.1. msgVersion
Le champ msgVersion est défini sur snmpv3(3) pour identifier le message comme un message SNMP version 3.
Le champ msgVersion est utilisé par le répartiteur pour sélectionner le modèle de traitement de message. Une version spécifique d'un modèle de traitement de message ne peut traiter qu'un seul format de message.
6.2. msgID
Le msgID est utilisé pour coordonner les messages de requête et les réponses entre deux entités SNMP, et par le v3MP pour coordonner le traitement d'un message par les différents modèles de sous-système au sein de l'architecture.
La plage de ce champ est de 0 à 2147483647. Dans l'entité SNMP émettrice, la valeur msgID est choisie par le modèle de traitement de message pour être aussi différente que possible des valeurs récemment utilisées dans cet échange. Le msgID du message de requête est utilisé par le v3MP de l'entité SNMP émettrice pour coordonner la requête d'origine avec le message de réponse.
Dans l'entité SNMP réceptrice, le champ msgID du message reçu est utilisé pour coordonner le traitement du message par les différents modèles de sous-système au sein de l'architecture.
6.3. msgMaxSize
Le champ msgMaxSize du message transmet la taille maximale de message supportée par l'émetteur du message, avec une valeur minimale de 484 octets. Ce champ est utilisé dans l'architecture SNMPv3 pour déterminer la taille maximale de message qui peut être envoyée à l'émetteur de ce message.
La valeur de msgMaxSize ne transmet pas d'informations sur la quantité d'espace tampon disponible pour recevoir un message dans l'entité SNMP émettrice.
6.4. msgFlags
Le champ msgFlags du message contient plusieurs champs de bits qui contrôlent le traitement du message :
+---------+---------+---------+
| auth | priv | reportable |
+---------+---------+---------+
Les champs auth et priv sont utilisés pour sélectionner le niveau de sécurité :
- auth = 0 et priv = 0 : noAuthNoPriv
- auth = 1 et priv = 0 : authNoPriv
- auth = 1 et priv = 1 : authPriv
Le bit priv indique si le scopedPDU est chiffré ou non. Si le bit priv est défini, la forme encryptedPDU de scopedPduData est utilisée dans le message. Si le bit priv n'est pas défini, la forme en clair de scopedPduData est utilisée.
Le bit reportable est une aide secondaire pour déterminer si une PDU de rapport doit être envoyée. Il n'est utilisé que lorsque la partie PDU du message ne peut pas être décodée (par exemple, parce que la clé de chiffrement n'est pas correcte). Si le bit reportable est défini, une PDU de rapport peut être envoyée. Si le bit reportable n'est pas défini, une PDU de rapport ne doit pas être envoyée.
Le bit reportable doit être défini dans les messages de requête. Le bit reportable ne doit pas être défini dans les messages de réponse.
Tous les autres bits du champ msgFlags sont réservés et doivent être définis sur zéro lors de l'envoi d'un message (MUST) et devraient être ignorés lors de la réception d'un message (SHOULD).
6.5. msgSecurityModel
Le champ msgSecurityModel du message identifie le modèle de sécurité utilisé par l'émetteur pour générer le message. Le récepteur devrait utiliser ce modèle de sécurité pour effectuer le traitement de sécurité du message.
La valeur msgSecurityModel est également utilisée par le répartiteur pour sélectionner le modèle de sécurité qui doit traiter le message.
6.6. msgSecurityParameters
Le champ msgSecurityParameters du message contient les paramètres de sécurité. Le contenu et le format des données dans ce champ sont définis par le modèle de sécurité identifié par le champ msgSecurityModel.
6.7. scopedPduData
Le champ scopedPduData représente soit un ScopedPDU en clair soit chiffré. Le choix entre clair ou chiffré est déterminé par le bit priv dans le champ msgFlags.
Si le bit priv est 0, scopedPduData est un ScopedPDU en clair. Si le bit priv est 1, scopedPduData est un OCTET STRING contenant un ScopedPDU chiffré.
6.8. scopedPDU
Le scopedPDU contient des informations pour identifier le contexte de gestion et les données PDU.
6.8.1. contextEngineID
Le champ contextEngineID identifie de manière unique une entité SNMP qui peut réaliser un contexte particulier avec un nom particulier.
Le contextEngineID a le même format que le snmpEngineID défini dans SNMP-FRAMEWORK-MIB [RFC3411].
6.8.2. contextName
Le champ contextName, en combinaison avec le contextEngineID, identifie un contexte particulier. Le contextName est un OCTET STRING avec une signification définie administrativement. Il est utilisé pour nommer un contexte particulier dans l'entité SNMP identifiée par le contextEngineID.
6.8.3. data
Le champ data contient la PDU. Le format de la PDU est déterminé par la version SNMP. SNMPv3 utilise les définitions de PDU de [RFC3416].