DIAMETER

**DIAMETER**は、RADIUSの後継となる認証・認可・課金 (AAA: Authentication, Authorization, Accounting) プロトコルである。

## RADIUSからの改善点
DIAMETERという名前は、RADIUSプロトコルにかけた駄洒落である (直径:diameterは半径:radiusの2倍になる)。DIAMETERはRADIUSとの後方互換性はないが、RADIUSからのアップグレード・パスを提供している。
RADIUSとの主な違いは、
* RADIUSで使われているUDPではなく、信頼性のあるトランスポート・プロトコルであるTCPやSCTPを用いる
* トランスポート層のセキュリティ (IPsecまたはTLS) を利用可能
* RADIUSからの移行をサポート
* RADIUSよりも大きな属性値ペアと識別子のアドレス空間を持つ (8ビットから32ビットに拡張)
* サーバ発のメッセージもサポートする点を除き、クライアント・サーバ型のプロトコルである
* ステートフルおよびステートレスのモデルを利用できる
* DNSのSRV・NAPTRレコードを用いたピアの動的発見
* 機能ネゴシエーション
* アプリケーション層での肯定応答をサポートし、フェイルオーバーの方法とステートマシーンを定義
* エラー通知
* 改善されたローミングサポート
* 新しいコマンドと属性の定義を利用した簡単な拡張
* 32ビットの区切り
* ユーザーセッションと課金管理の基本サポート

## プロトコルの詳細
Diameter基本プロトコルは、AAAプロトコルの最小限の要求として、で規定されている。Diameterアプリケーションは、新しいコマンドや属性を追加することにより基本プロトコルを拡張することができる。ただし、ここで言うアプリケーションとはプログラムのことではなく、Diameterに基づいたプロトコルのことを指す。DIAMETERのセキュリティは、すでに十分に確立されたプロトコルであるIPsecやTLSによって提供される。

### パケット・フォーマット
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Version    |                 Message Length                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | command flags |                  Command-Code                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                         Application-ID                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Hop-by-Hop Identifier                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      End-to-End Identifier                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  AVPs                                                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

### コマンド
各コマンドには、要求・応答共に利用されるコマンド・コードが割り当てられている。

### 属性値ペア
    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                           AVP Code                            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |V M P r r r r r|                  AVP Length                   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Vendor-ID (opt)                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Data ...
   +-+-+-+-+-+-+-+-+

### 状態機械

The  defines a core state machine for maintaining connections between peers and processing messages. This is part of the basic protocol functionality and all stacks should support it and as such abstract from the connectivity related operations.

File:RFC3588_peer_state_machine_1.png|Peer State Machine Part 1
File:RFC3588_peer_state_machine_2.png|Peer State Machine Part 2


Additionally, application specific state machines can be introduced either later or at a higher abstraction layer. The  defines an authorization and an accounting state machine.

File:RFC3588_auth_state_machine_client.png|Diameter Authorization State Machines (Client)
File:RFC3588_auth_state_machine_server.png|Diameter Authorization State Machines (Server)
File:RFC3588_acct_state_machine_client.png|Diameter Accounting State Machines (Client)
File:RFC3588_acct_state_machine_server.png|Diameter Accounting State Machines (Server)


### メッセージ・フロー

## アプリケーション
*Diameter アプリケーション*とはアプリケーションソフトウェアのことではなく、Diameter基本プロトコルに基づいたプロトコルのことである。各アプリケーションはアプリケーション識別子によって定義され、新しいコマンドコードや必須属性値ペアを追加することができる。新しいオプション属性値ペアを追加すること自体は新しいアプリケーションを必要とはしない。

Diameterアプリケーションの例:
* Diameter Mobile IPv4 Application (MobileIP, )
* Diameter Network Access Server Application (NASREQ, )
* Diameter Extensible Authentication Protocol Application ()
* Diameter Credit-Control Application (DCCA, )
* Diameter Session Initiation Protocol Application ()
* IP Multimedia Subsystemで使われる様々なアプリケーション

## 外部リンク
*freeDiameter
*Open Diameter Documentation Page
*Cisco IOS ソフトウェア (RADIUSとDIAMETERの違いの一覧がある)
*Open DiameterのDebianパッケージ
*jdiameter、Java用Diameter基本プロトコル