メインコンテンツまでスキップ

5.6. ピア状態機械 (Peer State Machine)

本節の有限状態機械はすべての Diameter 実装が遵守しなければなりません (MUST). 各 Diameter ノードは各ピアとの通信で以下の状態機械に従わなければなりません (MUST). 複数の動作はコンマで区切り, 必要なら次行に続けます. 状態と次状態も同様です.

本状態機械は [RFC3539] の状態機械と密接に結合しており, 後者はトランスポート接続の open, close, failover, probe, reopen に使われます. 特に [RFC3539] は接続プローブにウォッチドッグメッセージを要求します. Diameter では DWR と DWA を使います.

接頭辞 I- は発起側 (接続する側), R- は応答側 (待ち受ける側) の接続を表します. 接頭辞がない場合, イベントまたは動作はどちらの接続でも同じです.

安定状態は Closed, I-Open, R-Open で, 他は中間状態です. I-Open と R-Open は, 発起側か応答側のトランスポートを使うかを除き等価です.

CER は接続要求が成功した直後, 常に発起接続上で送られます. 選挙 (election) では 2 接続の一方が閉じます. ローカル Diameter 実体の Origin-Host がピアより辞書順で大きければ応答側接続が残り, ピアの Origin-Host が大きければ発起側接続が残ります. 以降のメッセージは残った接続で送られます. 一方のピアでの選挙結果は他方と必ず逆になります.

TLS/TCP と DTLS/SCTP では, Diameter メッセージ交換の前に両端が closed のときにハンドシェイクを開始すべきです (SHOULD). CER/CEA の前に接続を確立し, 双方の能力を保護すべきです (SHOULD). 状態機械が closed に移るときは TLS/TCP・DTLS/SCTP を切断すべきです (SHOULD). 本書に適合しない応答側 (closed で TLS を受け付けない旧実装) へ接続すると, 最初の TLS 試行は失敗します. 発起側は TCP/SCTP で接続し, 両端が open になってから TLS ハンドシェイクを試してもよいです (MAY). 成功すれば以降は TLS 経由です. 失敗すれば両端は closed になります.

状態機械は, ワイヤ上のイベントを通じてピアから見た Diameter 実装の振る舞いだけを制約します.

同等の結果を出す実装は適合とみなされます.

状態遷移表 (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