Diameterの通信手順

 Diameterの通信の手順は次のようになります。

1.通信相手のリストを作る

 通信相手は,あらかじめ手動で設定しておく方法のほかに,DNSに問い合わせるというような動的な方法も定義されています。ただし動的な方法は必須ではないので,実装されていない可能性もあります。

  • 手動で設定されたものを参照する
  • サービス・ロケーション・プロトコル(SLPv2)を使う
  • DNSのNAPTR(The Naming Authority Pointer)クエリを実行する
  • DNSのサービス・ロケータ(SRV)クエリを実行する

2.通信相手とのコネクションの作成を開始する

 通信する可能性のある通信相手の全てに対してコネクションを作成しておくことは,資源の有効利用を考えると合理的ではありません。最小構成として,同じレルム(領域)に対して,プライマリとセカンダリの二つの通信相手との間にコネクションを作っておくべきとされています。もちろん,必要に応じてコネクションを追加してもかまいません。複数作成したコネクションは,通常はプライマリに送信していて,フェイルオーバー時には,セカンダリに送信するといったような使い方をします。また,二つ以上のコネクションに負荷分散するような実装もあり得ます。

※「セッション」と「コネクション」
 セッションというのは,アプリケーション層の概念で,クライアントとサーバ間のエンド・トゥ・エンドで確立されるものです。セッションは,エンドで処理され,Session ID AVPによって,一意に認識されます。一方コネクションというのは,トランスポート層の概念でメッセージを送受信する二つのピアの間で確立されます。
※「レルム」と「コンソーシアム」
 レルムとは,あるサービスを提供する主体のことです。企業やプロバイダがその単位となります。例えば,空港で複数のインターネット接続事業者(ISP)のアカウントで接続できる公衆無線LANサービスを使うときに,ユーザーIDとして電子メール形式の「aaa@hoge.ne.jp」のようなIDを使います。公衆無線LANの回線を提供している会社は,「hoge.ne.jp」を見て,どの認証サーバーに問い合わせをすればいいかを知ります。このhoge.ne.jpを提供する会社がレルムとなります。
一方,コンソーシアムはレルムが集まって,ある一つのサービスを提供する場合の括りです。例えば,先ほどのような公衆無線LANサービスは複数のISPで使えますから,この無線LANサービス自体がコンソーシアムと考えます。

3.通信相手と交渉する

 コネクションを発行したらすぐに,識別情報や,機能情報(プロトコル・バージョンやサポートするDiameterアプリケーション,セキュリティ・メカニズムなど)を通信相手と交換する必要があります。この交渉は,機能交換メッセージ(Capabilities-Exchange-Request/Answer)をやり取りして行うものです。交渉が決裂すると,切断などの処理を実施します。例えば,通信相手との間のコネクションにおいて共通のセキュリティ・メカニズムをサポートしていないことが判明した場合には交渉が決裂します。これらのメッセージは,コネクションについてのものなので,ピア・トゥ・ピアでやり取りします。プロキシ,リレー,リダイレクトをすることはありません。この交渉が成功するとすぐに,セキュリティ・メカニズムの処理に入ります。TLSを使用する場合ならば,TLSハンドシェイクを開始します。