AVPs (Attribute-Value Pairs) tragen alle DIAMETER-Daten. Jedes hat einen AVP Code, ein Flags-Oktett (V Vendor, M Mandatory, P reserviert), eine Länge, eine optionale Vendor-Id und einen typisierten Wert. Werte nutzen Basistypen wie Unsigned32, OctetString, Address, Time, Enumerated und Grouped. Die AVPs Result-Code und Experimental-Result melden Ergebnisse.
AVP-Struktur
Jedes Datenelement in DIAMETER — Identitäten, Subskriptionsfelder, Kontingente, Ergebnisse — wird als AVP codiert. Ein AVP beginnt mit einem 32-Bit-AVP-Code, dann einem Flags-Oktett, einer 24-Bit-Länge, die das gesamte AVP umfasst, einer optionalen 32-Bit-Vendor-Id und dem auf eine 4-Oktett-Grenze aufgefüllten Wert. Der AVP Code allein ist innerhalb des von der IETF verwalteten Raums eindeutig; ist das V-Flag (Vendor-Specific) gesetzt, wird der Code stattdessen im Nummernraum der folgenden Vendor-Id interpretiert — so definiert 3GPP (Vendor-Id 10415) die Hunderte von AVPs für S6a, Gx und Cx, ohne mit dem Basisprotokoll zu kollidieren.
0 1 2 3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| AVP Code (32) |
| V M P r r r r r| AVP Length (24) |
| Vendor-Id (32) — present only if V=1 |
| Data ... (padded to a 4-octet boundary) |Die V-, M- und P-Flags
Drei AVP-Flags bestimmen, wie ein Empfänger das AVP behandeln muss. V (Vendor-Specific) signalisiert, dass eine Vendor-Id folgt und der AVP Code im Raum dieses Herstellers liegt. M (Mandatory) ist das wichtige: Ist M gesetzt und versteht der Empfänger das AVP nicht, muss er die gesamte Nachricht mit DIAMETER_AVP_UNSUPPORTED (5001) ablehnen — ein falsch gesetztes M bricht daher das Zusammenwirken, und Vendor-AVPs, die eine Implementierung gefahrlos ignorieren darf, werden mit gelöschtem M gesendet. P war ursprünglich ein End-to-End-Sicherheitsmarker; RFC 6733 hat diese Verwendung als veraltet erklärt, und das Bit ist nun reserviert und auf null gesetzt.
| Flag | Name | Bedeutung, wenn gesetzt |
|---|---|---|
| V | Vendor-Specific | Ein Vendor-Id-Feld ist vorhanden; der Code liegt im Bereich dieses Vendors |
| M | Obligatorisch | Der Empfänger muss es verstehen oder die Nachricht ablehnen (5001) |
| P | (reserviert) | Früher End-to-End-Sicherheit; gemäß RFC 6733 veraltet, auf 0 gesetzt |
Basisdatentypen
AVP-Werte sind streng typisiert. RFC 6733 definiert eine Menge von Basistypen und mehrere aus OctetString abgeleitete Typen. Integer- und Unsigned-Typen tragen Zähler, Identifikatoren und Enumerationen; OctetString trägt opake oder strukturierte Binärdaten; und abgeleitete Typen fügen Semantik hinzu, die eine Implementierung validieren kann. Address codiert eine IP-Adresse mit einer führenden Zwei-Oktett-Adressfamilie. Time ist ein 32-Bit-Sekundenwert im NTP-Stil. Enumerated ist ein Integer32, dessen Werte von der Anwendung benannt werden. DiameterIdentity und DiameterURI tragen Peer-FQDNs und URIs.
| Typ | Kodierung | Typische Anwendung |
|---|---|---|
| Unsigned32 / Integer32 | 32-Bit-Integer | Zähler, Kontingente, Auth-Application-Id, Result-Code |
| Unsigned64 / Integer64 | 64-Bit-Integer | Oktettvolumina, große Zähler |
| OctetString | Opake Oktette | Binäre Nutzdaten (Authentifizierungsvektoren, TPDUs) |
| UTF8String | OctetString | Menschenlesbarer Text (User-Name, Produktname) |
| Enumerated | Integer32 | Benannte Wertesätze (z. B. RAT-Type, CC-Request-Type) |
| Address | OctetString + Familie | IPv4/IPv6-Adressen (Host-IP-Address, Framed-IP) |
| Zeit | Unsigned32 | Sekunden seit 1900 (Event-Timestamp) |
| DiameterIdentity | OctetString | Peer-FQDN (Origin-Host, Destination-Host) |
| Grouped | Verschachtelte AVPs | AVPs, die andere AVPs enthalten |
Grouped-AVPs
Ein Grouped-AVP hat als Wert eine verkettete Liste weiterer AVPs — so verschachteln sich strukturierte Datensätze sauber ohne neue Wire-Regeln. Subscription-Data in S6a, Charging-Rule-Install in Gx und Experimental-Result tragen alle Sub-AVPs innerhalb einer Gruppe. Gruppierung ist rekursiv: Ein Grouped-AVP kann weitere Grouped-AVPs enthalten, wodurch sich ein vollständiges LTE-Subskriptionsprofil oder eine Menge von PCC-Regeln als ein einziges Top-Level-AVP ausdrücken lässt. Jedes enthaltene AVP behält seinen eigenen Code, seine Flags und seine Länge, sodass ein Empfänger die Gruppe mit derselben Maschinerie parst, die er auf oberster Ebene verwendet.
Result-Code und Experimental-Result
DIAMETER meldet das Ergebnis eines Request in der Answer. Das Basis-AVP Result-Code (Code 268) ist ein Unsigned32, das anhand der führenden Ziffer in Bereiche gruppiert ist: 1xxx informativ, 2xxx Erfolg, 3xxx Protokollfehler (von einem Proxy/Relay), 4xxx transiente Fehler, die der Client wiederholen darf, und 5xxx dauerhafte Fehler. Benötigt eine Anwendung einen herstellerspezifischen Fehler, den der Basis-Result-Code nicht ausdrücken kann, nutzt sie das AVP Experimental-Result (Code 297) — ein Grouped-AVP mit einer Vendor-Id plus einem Experimental-Result-Code —, womit 3GPP Fehler wie DIAMETER_ERROR_USER_UNKNOWN oder DIAMETER_ERROR_ROAMING_NOT_ALLOWED signalisiert.
| Bereich | Klasse | Beispiel |
|---|---|---|
| 1xxx | Informationsbezogen | 1001 DIAMETER_MULTI_ROUND_AUTH |
| 2xxx | Erfolgreich | 2001 DIAMETER_SUCCESS |
| 3xxx | Protokollfehler (Proxy) | 3002 UNABLE_TO_DELIVER, 3007 APPLICATION_UNSUPPORTED |
| 4xxx | Vorübergehender Fehler (erneut versuchen) | 4181 AUTHENTICATION_DATA_UNAVAILABLE (3GPP) |
| 5xxx | Permanenter Fehler | 5001 AVP_UNSUPPORTED, 5012 UNABLE_TO_COMPLY |
Häufig gestellte Fragen
Was ist ein AVP in DIAMETER?
Ein AVP (Attribute-Value Pair) ist die Dateneinheit in jeder DIAMETER-Nachricht. Es trägt einen AVP Code, ein Flags-Oktett (V, M, P), eine Länge, eine optionale Vendor-Id und einen typisierten Wert. Alle Identitäten, Subskriptionsfelder, Kontingente und Ergebnisse werden als AVPs codiert, und eine Nachricht ist ein Header gefolgt von einer Liste davon.
Was bewirkt das M-Flag (Mandatory)?
Ist das M-Flag gesetzt und der Empfänger versteht das AVP nicht, muss er die gesamte Nachricht mit DIAMETER_AVP_UNSUPPORTED (5001) ablehnen. AVPs, die ein Peer gefahrlos ignorieren darf, werden daher mit gelöschtem M gesendet. Ein falsch genutztes M-Bit ist eine häufige Ursache für Zusammenwirken-Fehler zwischen Herstellern.
Was ist ein Grouped-AVP?
Ein Grouped-AVP ist ein AVP, dessen Wert selbst eine Liste von AVPs ist, wodurch sich strukturierte Datensätze verschachteln lassen. Subscription-Data, Charging-Rule-Install und Experimental-Result sind Grouped-AVPs. Die Gruppierung ist rekursiv, sodass ein vollständiges LTE-Subskriptionsprofil oder eine Menge von PCC-Regeln als ein einziges Top-Level-AVP übertragen werden kann.
Wie werden herstellerspezifische AVPs identifiziert?
Über das V-Flag plus ein Vendor-Id-Feld. Ist V gesetzt, folgt der Länge eine 32-Bit-Vendor-Id und der AVP Code wird im Nummernraum dieses Herstellers interpretiert. 3GPP nutzt die Vendor-Id 10415, um die AVPs für S6a, Gx, Cx und die übrigen Anwendungsschnittstellen zu definieren.
Was ist der Unterschied zwischen Result-Code und Experimental-Result?
Result-Code (AVP 268) trägt die IETF-Basis-Ergebniscodes, gruppiert als 1xxx/2xxx/3xxx/4xxx/5xxx. Experimental-Result (AVP 297) ist ein Grouped-AVP mit einer Vendor-Id und einem Experimental-Result-Code, das genutzt wird, wenn eine Anwendung einen herstellerspezifischen Fehler wie 3GPPs DIAMETER_ERROR_USER_UNKNOWN benötigt.
Was bedeuten die DIAMETER-Result-Code-Bereiche?
1xxx ist informativ, 2xxx ist Erfolg (2001 DIAMETER_SUCCESS), 3xxx ist ein Protokollfehler, meist von einem Proxy ausgelöst, 4xxx ist ein transienter Fehler, den der Client wiederholen darf, und 5xxx ist ein dauerhafter Fehler. Die führende Ziffer sagt einem Client, ob er wiederholen, scheitern oder umleiten soll.
Quellenspezifikationen
Diese Seite basiert auf den veröffentlichten Standards. (Wird in einem neuen Tab geöffnet.)