Zum Hauptinhalt springen

7. Fehlerbehandlung

7. Fehlerbehandlung (Error Handling)

In Diameter gibt es zwei Arten von Fehlern: Protokollfehler (protocol errors) und Anwendungsfehler (application errors). Ein Protokollfehler tritt auf der Basisebene des Protokolls auf und KANN pro Hop (per-hop) Beachtung erfordern (z. B. ein Nachrichtenroutingfehler). Anwendungsfehler entstehen dagegen typischerweise durch ein Problem mit einer in einer Diameter-Anwendung spezifizierten Funktion (z. B. Benutzerauthentifizierung, fehlende AVP).

Result-Code-AVP-Werte, die Protokollfehler melden, DÜRFEN nur in Antwortnachrichten vorkommen, deren 'E'-Bit gesetzt ist. Wird eine Anforderungsnachricht empfangen, die einen Protokollfehler verursacht, wird eine Antwortnachricht mit gesetztem 'E'-Bit zurückgegeben und das Result-Code-AVP auf den passenden Protokollfehlerwert gesetzt. Während die Antwort zum Ursprung der Anforderung zurückläuft, KANN jeder Proxy- oder Relay-Agent auf die Nachricht reagieren.

 1. Request +---------+ Link Broken
+-------------------------->|Diameter |----///----+
| +---------------------| | v
+------+--+ | 2. answer + 'E' set | Relay 2 | +--------+
|Diameter |<-+ (Unable to Forward) +---------+ |Diameter|
| | | Home |
| Relay 1 |--+ +---------+ | Server |
+---------+ | 3. Request |Diameter | +--------+
+-------------------->| | ^
| Relay 3 |-----------+
+---------+

Abbildung 7: Beispiel einer Antwortnachricht durch Protokollfehler

Abbildung 7 zeigt eine von einem Diameter-Relay stromaufwärts weitergeleitete Nachricht. Empfängt Relay 2 die Nachricht und stellt fest, dass die Anforderung nicht an den Home-Server weitergeleitet werden kann, wird eine Antwortnachricht mit gesetztem 'E'-Bit und Result-Code-AVP DIAMETER_UNABLE_TO_DELIVER zurückgegeben. Da dieser Fehler zur Kategorie Protokollfehler gehört, ergreift Relay 1 besondere Maßnahmen und versucht angesichts des Fehlers, die Nachricht über das alternative Relay 3 zu routen.

 +---------+ 1. Request +---------+ 2. Request +---------+
| Access |------------>|Diameter |------------>|Diameter |
| | | | | Home |
| Device |<------------| Relay |<------------| Server |
+---------+ 4. Answer +---------+ 3. Answer +---------+
(Missing AVP) (Missing AVP)

Abbildung 8: Beispiel einer Antwortnachricht bei Anwendungsfehler

Abbildung 8 zeigt eine Diameter-Nachricht, die einen Anwendungsfehler verursacht hat. Bei Anwendungsfehlern löscht die meldende Diameter-Entität das 'R'-Bit in den Befehlsflags (Command Flags) und fügt das Result-Code-AVP mit dem richtigen Wert hinzu. Anwendungsfehler erfordern kein Eingreifen von Proxy- oder Relay-Agenten; die Nachricht wird daher zum Ursprung der Anforderung zurückgeleitet.

Enthält die Antwortnachricht selbst Fehler, SOLLTE die zugehörige Sitzung durch STR oder ASR beendet werden. Das Termination-Cause-AVP in der STR KANN mit dem passenden Wert für die Fehlerursache gefüllt werden. Eine Anwendung KANN statt STR oder ASR auch eine anwendungsspezifische Anforderung senden, um den Fehler zu signalisieren, wenn kein Zustand gehalten wird oder eine Fehlerwiederherstellung mit der jeweiligen Diameter-Entität möglich sein soll.

Bestimmte Result-Code-AVP-Anwendungsfehler erfordern zusätzliche AVPs in der Antwort. In diesen Fällen MUSS der Diameter-Knoten, der das Result-Code-AVP auf den Fehler setzt, die AVPs hinzufügen. Beispiele:

  • Wird eine Anforderung mit einem unbekannten AVP empfangen, dessen 'M'-Bit (Mandatory bit) gesetzt ist, wird eine Antwort mit Result-Code-AVP DIAMETER_AVP_UNSUPPORTED und Failed-AVP-AVP mit dem fehlerhaften AVP gesendet.

  • Wird eine Anforderung mit einem AVP mit unbekanntem Wert empfangen, wird eine Antwort mit Result-Code-AVP DIAMETER_INVALID_AVP_VALUE und Failed-AVP-AVP mit dem fehlerverursachenden AVP zurückgegeben.

  • Wird ein Befehl empfangen, dem im CCF des Befehls als erforderlich definierte AVPs fehlen (z. B. als {AVP} gekennzeichnete AVPs), sendet der Empfänger eine Antwort mit Result-Code DIAMETER_MISSING_AVP und erzeugt ein AVP mit AVP-Code und weiteren Feldern wie beim fehlenden AVP erwartet. Das erzeugte AVP wird dem Failed-AVP-AVP hinzugefügt.

Das Result-Code-AVP beschreibt den Fehler, auf den der Diameter-Knoten bei der Verarbeitung gestoßen ist. Gibt es mehrere Fehler, MUSS der Diameter-Knoten nur den ersten melden (Erkennungsreihenfolge kann implementierungsabhängig sein). Die im folgenden Abschnitt beschriebenen Fehlerarten werden durch dieses AVP abgedeckt.