6. Formato messaggio SNMPv3
Questa sezione definisce il formato del messaggio SNMPv3 e il corrispondente modello di elaborazione messaggi specifico della versione (v3MP).
Un messaggio SNMPv3 è definito come segue:
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 -- valore scopedPDU crittografato
}
ScopedPDU ::= SEQUENCE {
contextEngineID OCTET STRING,
contextName OCTET STRING,
data ANY -- ad esempio, PDU come definite in [RFC3416]
}
6.1. msgVersion
Il campo msgVersion è impostato su snmpv3(3) per identificare il messaggio come messaggio SNMP versione 3.
Il campo msgVersion viene utilizzato dal dispatcher per selezionare il modello di elaborazione messaggi. Una versione specifica di un modello di elaborazione messaggi può elaborare un solo formato di messaggio.
6.2. msgID
Il msgID viene utilizzato per coordinare messaggi di richiesta e risposte tra due entità SNMP, e dal v3MP per coordinare l'elaborazione di un messaggio da parte dei diversi modelli di sottosistema all'interno dell'architettura.
L'intervallo di questo campo va da 0 a 2147483647. Nell'entità SNMP mittente, il valore msgID viene scelto dal modello di elaborazione messaggi per essere il più diverso possibile dai valori utilizzati di recente in questo scambio. Il msgID del messaggio di richiesta viene utilizzato dal v3MP dell'entità SNMP mittente per coordinare la richiesta originale con il messaggio di risposta.
Nell'entità SNMP ricevente, il campo msgID del messaggio ricevuto viene utilizzato per coordinare l'elaborazione del messaggio da parte dei diversi modelli di sottosistema all'interno dell'architettura.
6.3. msgMaxSize
Il campo msgMaxSize del messaggio trasmette la dimensione massima del messaggio supportata dal mittente del messaggio, con un valore minimo di 484 ottetti. Questo campo viene utilizzato nell'architettura SNMPv3 per determinare la dimensione massima del messaggio che può essere inviato al mittente di questo messaggio.
Il valore di msgMaxSize non trasmette informazioni sulla quantità di spazio buffer disponibile per ricevere un messaggio nell'entità SNMP mittente.
6.4. msgFlags
Il campo msgFlags del messaggio contiene diversi campi di bit che controllano l'elaborazione del messaggio:
+---------+---------+---------+
| auth | priv | reportable |
+---------+---------+---------+
I campi auth e priv vengono utilizzati per selezionare il livello di sicurezza:
- auth = 0 e priv = 0: noAuthNoPriv
- auth = 1 e priv = 0: authNoPriv
- auth = 1 e priv = 1: authPriv
Il bit priv indica se il scopedPDU è crittografato o meno. Se il bit priv è impostato, viene utilizzata la forma encryptedPDU di scopedPduData nel messaggio. Se il bit priv non è impostato, viene utilizzata la forma in chiaro di scopedPduData.
Il bit reportable è un aiuto secondario per determinare se deve essere inviata una PDU di report. Viene utilizzato solo quando la parte PDU del messaggio non può essere decodificata (ad esempio, perché la chiave di crittografia non è corretta). Se il bit reportable è impostato, può essere inviata una PDU di report. Se il bit reportable non è impostato, non deve essere inviata una PDU di report.
Il bit reportable deve essere impostato nei messaggi di richiesta. Il bit reportable non deve essere impostato nei messaggi di risposta.
Tutti gli altri bit nel campo msgFlags sono riservati e devono essere impostati a zero quando si invia un messaggio (MUST) e dovrebbero essere ignorati quando si riceve un messaggio (SHOULD).
6.5. msgSecurityModel
Il campo msgSecurityModel del messaggio identifica il modello di sicurezza utilizzato dal mittente per generare il messaggio. Il ricevente dovrebbe utilizzare questo modello di sicurezza per eseguire l'elaborazione di sicurezza del messaggio.
Il valore msgSecurityModel viene anche utilizzato dal dispatcher per selezionare il modello di sicurezza che deve elaborare il messaggio.
6.6. msgSecurityParameters
Il campo msgSecurityParameters del messaggio contiene i parametri di sicurezza. Il contenuto e il formato dei dati in questo campo sono definiti dal modello di sicurezza identificato dal campo msgSecurityModel.
6.7. scopedPduData
Il campo scopedPduData rappresenta un ScopedPDU in chiaro o crittografato. La scelta tra chiaro o crittografato è determinata dal bit priv nel campo msgFlags.
Se il bit priv è 0, scopedPduData è un ScopedPDU in chiaro. Se il bit priv è 1, scopedPduData è un OCTET STRING contenente un ScopedPDU crittografato.
6.8. scopedPDU
Il scopedPDU contiene informazioni per identificare il contesto di gestione e i dati PDU.
6.8.1. contextEngineID
Il campo contextEngineID identifica univocamente un'entità SNMP che può realizzare un contesto particolare con un nome particolare.
Il contextEngineID ha lo stesso formato del snmpEngineID definito in SNMP-FRAMEWORK-MIB [RFC3411].
6.8.2. contextName
Il campo contextName, in combinazione con il contextEngineID, identifica un contesto particolare. Il contextName è un OCTET STRING con significato definito amministrativamente. Viene utilizzato per dare un nome a un contesto particolare nell'entità SNMP identificata dal contextEngineID.
6.8.3. data
Il campo data contiene la PDU. Il formato della PDU è determinato dalla versione SNMP. SNMPv3 utilizza le definizioni PDU da [RFC3416].