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プロトコルの最小限の要求として、RFC 3588 で規定されている。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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
コマンド
各コマンドには、要求・応答共に利用されるコマンド・コードが割り当てられている。
コマンド名
略称
コード
AA-Request
AAR
265
AA-Answer
AAA
265
Abort-Session-Request
ASR
274
Abort-Session-Answer
ASA
274
Accounting-Request
ACR
271
Accounting-Answer
ACA
271
Capabilities-Exchange-Request
CER
257
Capabilities-Exchange-Answer
CEA
257
Device-Watchdog-Request
DWR
280
Device-Watchdog-Answer
DWA
280
Disconnect-Peer-Request
DPR
282
Disconnect-Peer-Answer
DPA
282
Re-Auth-Request
RAR
258
Re-Auth-Answer
RAA
258
Session-Termination-Request
STR
275
Session-Termination-Answer
STA
275
User-Authorization-Request
UAR
300
User-Authorization-Answer
UAA
300
Server-Assignment-Request
SAR
301
Server-Assignment-Answer
SAA
301
Location-Info-Request
LIR
302
Location-Info-Answer
LIA
302
Multimedia-Auth-Request
MAR
303
Multimedia-Auth-Answer
MAA
303
Registration-Termination-Request
RTR
304
Registration-Termination-Answer
RTA
304
Push-Profile-Request
PPR
305
Push-Profile-Answer
PPA
305
属性値ペア
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 ...
+-+-+-+-+-+-+-+-+
属性名
コード
データ型
Acct-Interim-Interval
85
Unsigned32
Accounting-Realtime-Required
483
Enumerated
Acct-Multi-Session-Id
50
UTF8String
Accounting-Record-Number
485
Unsigned32
Accounting-Record-Type
480
Enumerated
Accounting-Session-Id
44
OctetString
Accounting-Sub-Session-Id
287
Unsigned64
Acct-Application-Id
259
Unsigned32
Auth-Application-Id
258
Unsigned32
Auth-Request-Type
274
Enumerated
Authorization-Lifetime
291
Unsigned32
Auth-Grace-Period
276
Unsigned32
Auth-Session-State
277
Enumerated
Re-Auth-Request-Type
285
Enumerated
Class
25
OctetString
Destination-Host
293
DiamIdent
Destination-Realm
283
DiamIdent
Disconnect-Cause
273
Enumerated
E2E-Sequence
300
Grouped
Error-Message
281
UTF8String
Error-Reporting-Host
294
DiamIdent
Event-Timestamp
55
Time
Experimental-Result
297
Grouped
Experimental-Result-Code
298
Unsigned32
Failed-AVP
279
Grouped
Firmware-Revision
267
Unsigned32
Host-IP-Address
257
Address
Inband-Security-Id
299
Unsigned32
Multi-Round-Time-Out
272
Unsigned32
Origin-Host
264
DiamIdent
Origin-Realm
296
DiamIdent
Origin-State-Id
278
Unsigned32
Product-Name
269
UTF8String
Proxy-Host
280
DiamIdent
Proxy-Info
284
Grouped
Proxy-State
33
OctetString
Redirect-Host
292
DiamURI
Redirect-Host-Usage
261
Enumerated
Redirect-Max-Cache-Time
262
Unsigned32
Result-Code
268
Unsigned32
Route-Record
282
DiamIdent
Session-Id
263
UTF8String
Session-Timeout
27
Unsigned32
Session-Binding
270
Unsigned32
Session-Server-Failover
271
Enumerated
Supported-Vendor-Id
265
Unsigned32
Termination-Cause
295
Enumerated
User-Name
1
UTF8String
Vendor-Id
266
Unsigned32
Vendor-Specific-Application-Id
260
Grouped
状態機械
The RFC 3588 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.
Additionally, application specific state machines can be introduced either later or at a higher abstraction layer. The RFC 3588 defines an authorization and an accounting state machine.
Diameter Authorization State Machines (Client)
Diameter Authorization State Machines (Server)
Diameter Accounting State Machines (Client)
Diameter Accounting State Machines (Server)
メッセージ・フロー
アプリケーション
Diameter アプリケーション とはアプリケーションソフトウェア のことではなく、Diameter基本プロトコルに基づいたプロトコルのことである。各アプリケーションはアプリケーション識別子によって定義され、新しいコマンドコードや必須属性値ペアを追加することができる。新しいオプション属性値ペアを追加すること自体は新しいアプリケーションを必要とはしない。
Diameterアプリケーションの例:
Diameter Mobile IPv4 Application (MobileIP, RFC 4004 )
Diameter Network Access Server Application (NASREQ, RFC 4005 )
Diameter Extensible Authentication Protocol Application (RFC 4072 )
Diameter Credit-Control Application (DCCA, RFC 4006 )
Diameter Session Initiation Protocol Application (RFC 4740 )
IP Multimedia Subsystem で使われる様々なアプリケーション
外部リンク