5.6. Peer-Zustandsautomat
Dieser Abschnitt enthält einen endlichen Automaten, den alle Diameter-Implementierungen beachten MÜSSEN (MUST). Jeder Knoten MUSS ihn pro Peer einhalten. Mehrere Aktionen sind durch Kommas getrennt und können umbrechen; Zustände ebenso.
Er ist eng mit [RFC3539] gekoppelt (Öffnen, Schließen, Failover, Sonden, Wiederöffnen). Für Diameter werden DWR und DWA als Watchdog genutzt.
I- markiert die initiierende Verbindung, R- die responderseitige. Ohne Präfix gilt das Ereignis oder die Aktion auf beiden gleich.
Stabile Zustände: Closed, I-Open, R-Open; alle anderen sind transient. I-Open und R-Open unterscheiden sich nur durch genutzte Transportseite.
Das CER wird immer direkt nach erfolgreichem Verbindungsaufbau auf der initiierenden Seite gesendet. Bei Wahl (election) schließt eine Verbindung. Bleibt die Responder-Verbindung, wenn das lokale Origin-Host lexikographisch größer ist; sonst die Initiator-Verbindung. Weitere Nachrichten laufen über die verbleibende Verbindung. Das Ergebnis ist auf den Peers spiegelbildlich.
Für TLS/TCP und DTLS/SCTP SOLL der Handshake im geschlossenen Zustand vor Diameter-Nachrichten beginnen; CER/CEA erst nach geschütztem Aufbau. TLS SOLL beim Übergang nach closed getrennt werden. Alte Responder ohne TLS im closed-Zustand führen zu fehlgeschlagenem ersten TLS-Versuch; der Initiator darf dann TCP/SCTP nutzen und TLS im offenen Zustand nachziehen (MAY).
Der Automat beschränkt nur das am Draht sichtbare Verhalten. Äquivalente Implementierungen sind konform.
Zustandstabelle (State transition table)
state event action next state
-----------------------------------------------------------------
Closed Start I-Snd-Conn-Req Wait-Conn-Ack
R-Conn-CER R-Accept, R-Open
Process-CER,
R-Snd-CEA
Wait-Conn-Ack I-Rcv-Conn-Ack I-Snd-CER Wait-I-CEA
I-Rcv-Conn-Nack Cleanup Closed
R-Conn-CER R-Accept, Wait-Conn-Ack/Elect
Process-CER,
Elect
Timeout Error Closed
Wait-I-CEA I-Rcv-CEA Process-CEA I-Open
R-Conn-CER R-Accept, Wait-Returns
Process-CER,
Elect
I-Peer-Disc I-Disc Closed
I-Rcv-Non-CEA Error Closed
Timeout Error Closed
Wait-Conn-Ack/ I-Rcv-Conn-Ack I-Snd-CER,Elect Wait-Returns
Elect I-Rcv-Conn-Nack R-Snd-CEA R-Open
R-Peer-Disc R-Disc Wait-Conn-Ack
R-Conn-CER R-Reject Wait-Conn-Ack/Elect
Timeout Error Closed
Wait-Returns Win-Election I-Disc,R-Snd-CEA R-Open
I-Peer-Disc I-Disc, R-Snd-CEA R-Open
I-Rcv-CEA R-Disc I-Open
R-Peer-Disc R-Disc Wait-I-CEA
R-Conn-CER R-Reject Wait-Returns
Timeout Error Closed
R-Open Send-Message R-Snd-Message R-Open
R-Rcv-Message Process R-Open
R-Rcv-DWR Process-DWR, R-Open
R-Snd-DWA
R-Rcv-DWA Process-DWA R-Open
R-Conn-CER R-Reject R-Open
Stop R-Snd-DPR Closing
R-Rcv-DPR R-Snd-DPA Closing
R-Peer-Disc R-Disc Closed
I-Open Send-Message I-Snd-Message I-Open
I-Rcv-Message Process I-Open
I-Rcv-DWR Process-DWR, I-Open
I-Snd-DWA
I-Rcv-DWA Process-DWA I-Open
R-Conn-CER R-Reject I-Open
Stop I-Snd-DPR Closing
I-Rcv-DPR I-Snd-DPA Closing
I-Peer-Disc I-Disc Closed
Closing I-Rcv-DPA I-Disc Closed
R-Rcv-DPA R-Disc Closed
Timeout Error Closed
I-Peer-Disc I-Disc Closed
R-Peer-Disc R-Disc Closed