Kapitel 9: Fehlerbehandlung

9.1 Fehlerbehandlungsmodell

Die Fehlerbehandlung von DTP folgt einem dreiphasigen „Erkennen-Benachrichtigen-Wiederherstellen"-Modell:

  1. Erkennen: Abnormale Zustände identifizieren
  2. Benachrichtigen: Fehlerinformationen an die Gegenstelle oder die übergeordnete Schicht senden
  3. Wiederherstellen: Wiederherstellungsmaßnahmen basierend auf dem Fehlertyp ergreifen

9.2 Fehlercode-System

DTP definiert einen eindeutigen Fehlercode für jeden Fehlertyp, unterteilt in acht Bereiche nach Funktionsmodul:

FehlerkategorieCodebereichBehandlungsstrategie
Frame-Verarbeitungsfehler1xxxFrame verwerfen + Sender benachrichtigen + protokollieren
Verschlüsselungsfehler2xxxFrame verwerfen + Sender benachrichtigen + kann Schlüsselneuverhandlung auslösen
Agreement-Fehler3xxxFragment verwerfen + Sender benachrichtigen + kann Neuverhandlung auslösen
DAG-Fehler4xxxFragment ablehnen + Sender benachrichtigen, oder zwischenspeichern und warten
Sitzungsfehler5xxxSitzungswiederherstellung versuchen + bei Fehlschlag schließen und übergeordnete Schicht benachrichtigen
Wiederaufnahme-Fehler6xxxSenden pausieren + übergeordnete Anwendung benachrichtigen
Versionsfehler7xxxVersionsinkompatibilitäts-Benachrichtigung senden + Downgrade versuchen
Berechtigungsfehler8xxxOperation ablehnen + Anfragenden benachrichtigen

9.3 Fehlercode-Referenz

Frame-Verarbeitungsfehler (1xxx)

FehlercodeNameBeschreibung
1001FRAME_DESERIALIZATION_FAILEDFrame-Deserialisierung fehlgeschlagen
1002FRAME_INVALID_FORMATUngültiges Frame-Format

Verschlüsselungsfehler (2xxx)

FehlercodeNameBeschreibung
2001DECRYPTION_FAILEDPayload-Entschlüsselung fehlgeschlagen
2002KEY_NOT_READYSchlüssel nicht bereit (CAP nicht abgeschlossen)

Agreement-Fehler (3xxx)

FehlercodeNameBeschreibung
3001AGREEMENT_NOT_FOUNDAgreement nicht gefunden
3002AGREEMENT_EXPIREDAgreement abgelaufen
3003AGREEMENT_NEGOTIATION_FAILEDAgreement-Verhandlung fehlgeschlagen

DAG-Fehler (4xxx)

FehlercodeNameBeschreibung
4001DAG_CYCLE_DETECTEDDAG-Zyklus erkannt
4002DAG_DEPENDENCY_UNRESOLVEDDAG-Abhängigkeit unaufgelöst

Sitzungsfehler (5xxx)

FehlercodeNameBeschreibung
5001SESSION_NOT_FOUNDSitzung nicht gefunden
5002SESSION_TIMEOUTSitzungs-Timeout
5003SESSION_RESTORE_FAILEDSitzungswiederherstellung fehlgeschlagen

Wiederaufnahme-Fehler (6xxx)

FehlercodeNameBeschreibung
6001BUFFER_FULLPuffer voll
6002RETRANSMISSION_TIMEOUTNeuübertragungszeitüberschreitung

Versionsfehler (7xxx)

FehlercodeNameBeschreibung
7001VERSION_INCOMPATIBLEVersion inkompatibel

Berechtigungsfehler (8xxx)

FehlercodeNameBeschreibung
8001PERMISSION_DENIEDBerechtigung verweigert
8002OBSERVER_WRITE_DENIEDObserver-Schreiboperation verweigert

9.4 Fehlerbenachrichtigungsmechanismus

Fehlerbenachrichtigungen werden über Control Frames übermittelt und enthalten folgende Informationen:

FeldBeschreibung
errorCodeFehlercode
errorMessageFehlerbeschreibungsnachricht
relatedFrameIdID des Frames, der den Fehler ausgelöst hat (optional)
relatedAgreementIdZugehörige Agreement-ID (optional)
detailsZusätzliche Details (optional)

9.5 Wichtige Fehlerszenarien

Deserialisierungsfehler

Wenn ein empfangener Logical_Frame nicht korrekt deserialisiert werden kann:

  1. Frame verwerfen
  2. Eine FRAME_DESERIALIZATION_FAILED (1001) Fehlerbenachrichtigung an den Sender senden

Entschlüsselungsfehler

Wenn die Payload eines empfangenen Logical_Frame nicht korrekt entschlüsselt werden kann:

  1. Frame verwerfen
  2. Eine DECRYPTION_FAILED (2001) Fehlerbenachrichtigung an den Sender senden
  3. Wenn aufeinanderfolgende Fehler den Schwellenwert überschreiten, CAP-Schlüsselneuverhandlung auslösen

DAG-Zykluserkennung

Wenn die deklarierten Abhängigkeitsbeziehungen eines Fragments einen Zyklus im DAG bilden würden:

  1. Fragment ablehnen
  2. Einen DAG_CYCLE_DETECTED (4001) Fehler zurückgeben

Unbekanntes Agreement

Wenn ein Fragment eine Agreement_ID referenziert, die beim Empfänger nicht existiert:

  1. Fragment verwerfen
  2. Einen AGREEMENT_NOT_FOUND (3001) Fehler zurückgeben

Schlüssel nicht bereit

Wenn versucht wird, Daten zu senden, aber der CAP-Schlüsselaustausch noch nicht abgeschlossen ist:

  1. Senden verweigern
  2. Einen KEY_NOT_READY (2002) Fehler an den übergeordneten Aufrufer zurückgeben

Puffer voll

Wenn der Cache unbestätigter Fragments des Senders seine Kapazitätsgrenze erreicht:

  1. Senden neuer Fragments pausieren
  2. Eine BUFFER_FULL (6001) Benachrichtigung an die übergeordnete Anwendung senden

Observer-Berechtigungsverletzung

Wenn ein Observer versucht, eine Anfrage zu initiieren oder ein Agreement zu ändern:

  1. Operation ablehnen
  2. Einen OBSERVER_WRITE_DENIED (8002) Fehler zurückgeben