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

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