Zum Hauptinhalt springen

6. SNMPv3-Nachrichtenformat

Dieser Abschnitt definiert das SNMPv3-Nachrichtenformat und das entsprechende versionsspezifische Nachrichtenverarbeitungsmodell (v3MP).

Eine SNMPv3-Nachricht ist wie folgt definiert:

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 -- verschlüsselter scopedPDU-Wert
}

ScopedPDU ::= SEQUENCE {
contextEngineID OCTET STRING,
contextName OCTET STRING,
data ANY -- z.B. PDUs wie in [RFC3416] definiert
}

6.1. msgVersion

Das msgVersion-Feld ist auf snmpv3(3) gesetzt, um die Nachricht als SNMP-Version-3-Nachricht zu identifizieren.

Das msgVersion-Feld wird vom Dispatcher verwendet, um das Nachrichtenverarbeitungsmodell auszuwählen. Eine bestimmte Version eines Nachrichtenverarbeitungsmodells kann nur ein Nachrichtenformat verarbeiten.

6.2. msgID

Die msgID wird verwendet, um Anfragenachrichten und Antworten zwischen zwei SNMP-Entitäten zu koordinieren, und vom v3MP, um die Verarbeitung einer Nachricht durch die verschiedenen Subsystemmodelle innerhalb der Architektur zu koordinieren.

Der Bereich dieses Felds ist 0 bis 2147483647. Bei der sendenden SNMP-Entität wird der msgID-Wert vom Nachrichtenverarbeitungsmodell so gewählt, dass er sich so stark wie möglich von kürzlich in diesem Austausch verwendeten Werten unterscheidet. Die msgID der Anfragenachricht wird vom v3MP der sendenden SNMP-Entität verwendet, um die ursprüngliche Anfrage mit der Antwortnachricht zu koordinieren.

Bei der empfangenden SNMP-Entität wird das msgID-Feld der empfangenen Nachricht verwendet, um die Verarbeitung der Nachricht durch die verschiedenen Subsystemmodelle innerhalb der Architektur zu koordinieren.

6.3. msgMaxSize

Das msgMaxSize-Feld der Nachricht übermittelt die maximale Nachrichtengröße, die vom Absender der Nachricht unterstützt wird, mit einem Mindestwert von 484 Oktetten. Dieses Feld wird in der SNMPv3-Architektur verwendet, um die maximale Nachrichtengröße zu bestimmen, die an den Absender dieser Nachricht gesendet werden kann.

Der Wert von msgMaxSize übermittelt keine Informationen über die Menge des verfügbaren Pufferspeichers zum Empfangen einer Nachricht bei der sendenden SNMP-Entität.

6.4. msgFlags

Das msgFlags-Feld der Nachricht enthält mehrere Bitfelder, die die Verarbeitung der Nachricht steuern:

+---------+---------+---------+
| auth | priv | reportable |
+---------+---------+---------+

Die auth- und priv-Felder werden verwendet, um das Sicherheitsniveau auszuwählen:

  • auth = 0 und priv = 0: noAuthNoPriv
  • auth = 1 und priv = 0: authNoPriv
  • auth = 1 und priv = 1: authPriv

Das priv-Bit zeigt an, ob die scopedPDU verschlüsselt ist oder nicht. Wenn das priv-Bit gesetzt ist, wird die encryptedPDU-Form von scopedPduData in der Nachricht verwendet. Wenn das priv-Bit nicht gesetzt ist, wird die Klartextform von scopedPduData verwendet.

Das reportable-Bit ist eine sekundäre Hilfe zur Bestimmung, ob eine Report-PDU gesendet werden soll. Es wird nur verwendet, wenn der PDU-Teil der Nachricht nicht dekodiert werden kann (z.B. weil der Verschlüsselungsschlüssel nicht korrekt ist). Wenn das reportable-Bit gesetzt ist, kann eine Report-PDU gesendet werden. Wenn das reportable-Bit nicht gesetzt ist, sollte keine Report-PDU gesendet werden.

Das reportable-Bit sollte in Anfragenachrichten gesetzt werden. Das reportable-Bit sollte in Antwortnachrichten nicht gesetzt werden.

Alle anderen Bits im msgFlags-Feld sind reserviert und müssen beim Senden einer Nachricht auf null gesetzt werden (MUST) und sollten beim Empfang einer Nachricht ignoriert werden (SHOULD).

6.5. msgSecurityModel

Das msgSecurityModel-Feld der Nachricht identifiziert das Sicherheitsmodell, das vom Absender zur Generierung der Nachricht verwendet wurde. Der Empfänger sollte dieses Sicherheitsmodell verwenden, um die Sicherheitsverarbeitung der Nachricht durchzuführen.

Der msgSecurityModel-Wert wird auch vom Dispatcher verwendet, um das Sicherheitsmodell auszuwählen, das die Nachricht verarbeiten soll.

6.6. msgSecurityParameters

Das msgSecurityParameters-Feld der Nachricht enthält die Sicherheitsparameter. Der Inhalt und das Format der Daten in diesem Feld werden durch das Sicherheitsmodell definiert, das durch das msgSecurityModel-Feld identifiziert wird.

6.7. scopedPduData

Das scopedPduData-Feld repräsentiert entweder eine Klartext- oder verschlüsselte ScopedPDU. Die Wahl zwischen Klartext oder Verschlüsselung wird durch das priv-Bit im msgFlags-Feld bestimmt.

Wenn das priv-Bit 0 ist, ist scopedPduData eine Klartext-ScopedPDU. Wenn das priv-Bit 1 ist, ist scopedPduData ein OCTET STRING, der eine verschlüsselte ScopedPDU enthält.

6.8. scopedPDU

Die scopedPDU enthält Informationen zur Identifizierung des Verwaltungskontexts und der PDU-Daten.

6.8.1. contextEngineID

Das contextEngineID-Feld identifiziert eindeutig eine SNMP-Entität, die möglicherweise einen bestimmten Kontext mit einem bestimmten Namen realisiert.

Das contextEngineID hat das gleiche Format wie die snmpEngineID, die in SNMP-FRAMEWORK-MIB [RFC3411] definiert ist.

6.8.2. contextName

Das contextName-Feld identifiziert in Kombination mit dem contextEngineID einen bestimmten Kontext. Das contextName ist ein OCTET STRING mit administrativ definierter Bedeutung. Es wird verwendet, um einem bestimmten Kontext in der durch das contextEngineID identifizierten SNMP-Entität einen Namen zu geben.

6.8.3. data

Das data-Feld enthält die PDU. Das Format der PDU wird durch die SNMP-Version bestimmt. SNMPv3 verwendet die PDU-Definitionen aus [RFC3416].