首页 > 代码库 > Diameter协议

Diameter协议

       Diameter是计算机网络中使用的一个认证、授权和审计协议。它从功能更少的RADIUS协议进化而来,并且取代之。

       Dimater应用通过添加新的命令或属性扩展基础协议,例如使用扩展认证 协议(EAP)。

与RADIUS协议比较

       名字是一个单词游戏(从RADIUS,半径到DIAMETER,直径),从前任RADIUS协议演化而来(直径是半径的二倍)。Diameter不直接后向兼容,但是提供RADIUS升级路径。DIAMETER提供的主要特征(RADIUS中缺乏的)有:

* 可靠传输协议(TCP或SP,不是UDP)

* IETF正在标准化RADIUS的TCP传输

* 网络或者传输层安全(IPsec或TLS)

* IETF正在标准化话RADIUS的TLS

* 支持RADIUS过度,虽然Diameter不完全兼容RADIUS

* 属性值对(AVP)和标示符的更大地址空间(32bit替代8bit)

* 客户端服务器协议,除了支持一些服务器发起的消息

* 可以使用有状态和无状态的模型

* 对端动态自动发现(使用DNS SRV和NAPTR)

* 协商功能

* 支持应用层应答,定义容错方法和状态机(RFC 3539)

* 错误指示

* 更好的漫游支持

* 更容易扩展,能够定义新的命令和属性

* 32字节的边界对齐

* 用户会话和审计的基本支持

注:RADIUS协议http://en.wikipedia.org/wiki/RADIUS

应用

Diameter应用不是软件应用,而是一个基于定义在RFC 6733(过时:RFC 3588)Diameter基本协议的协议层应用。通过一个应用标识符定义每个应用,可以添加新的命令代码或者新的必选AVP。添加新的可选AVP不要求一个新的应用。

Diameter应用示例:

1) Diameter移动IPV4应用(MobileIP,RFC 4004)

2)Diameter网络访问服务应用(NASREQ,RFC 4005)

3)Diameter扩展认证协议应用(RFC4072)

4) Diameter信任控制应用(DCCA,RFC 4740)

5)3GPP IP多媒体子系统(IMS)中各种应用

6) 使用Diameter协议在HSS和SF之间进行通信。

通用自展结构:自举服务功能。

历史

       Diameter协议由Pat R. Calhoun、Glen Zorn和Ping Pan于1998年开始开发提供认证、鉴权和审计(AAA)框架,它克服了RADIUS的限制。RADIUS有可靠性、扩展性、安全性和灵活性的问题。RADIUS不能有效地处理远程访问、IP移动性和策略控制。Diameter协议定义一个策略协议,提供给客户端执行策略、AAA和资源控制。这允许单个服务处理许多服务的策略。

       就像RADIUS,Diameter提供AAA功能,但是使用TCP和SCTP替代UDP,因此通信问题的检测逻辑不包括在Diameter协议中(由TCP和SCTP保证)。Diameter协议通过开发3GPP IP多媒体系统(IMS)进一步增强。Diameter应用支持Cx、Dh、Dx、Rf和Sh接口。通过使用扩展,协议设计成可扩展支持代理、中间件、强安全性、移动IP、网络访问服务、账号和资源管理。

协议描述

       Diameter基础协议定义在RFC6733追踪,定义AAA协议的最小的需求。Diameter应用可扩展成基础协议,通过添加新的命令、属性。Diameter安全由IPsec和TLS提供。IANA已经提供TCP或SCTP端口号给Diameter,SCTP的PPI(负载协议标识)为46。

       报文格式:

       报文由Diameter头部和可变数量的属性-值对或AV组成,用于Diameter消息相关的封装信息。


       R(Request)位:如果设置,消息是请求,如果清除,消息是响应

       P(代理)位:如果设置消息可能是代理、中继和重定向,如果清除,消息必须被本地处理。

       E(错误)位:如果设置,消息包含协议错误,消息将不符合该命令的ABNF。带有E的消息位设置通常认为是错误消息。在请求消息中该位必须设置。

       T(潜在重传消息)位:在链路故障产生时设置该标志,帮助删除重复的请求。当重发请求时设置,不作为由于链路失效可能的指示应答。

命令:

每个命令赋予一个命令代码,它用于请求和应答。

值0-255保留作为RADIUS后项兼容。值256-16777213是永久的,由IANA分配标准命令。值16777214和1677725(0xfffffe和0xffffff)保留给实验和测试目的。其它的可以给扩展使用。

一些通用的Diameter命令:

Command-Name

Abbr.

Code

AA-Request

AAR

265

AA-Answer

AAA

265

Diameter-EAP-Request

DER

268

Diameter-EAP-Answer

DEA

268

Abort-Session-Request

ASR

274

Abort-Session-Answer

ASA

274

Accounting-Request

ACR

271

Accounting-Answer

ACA

271

Credit-Control-Request

CCR

272

Credit-Control-Answer

CCA

272

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

User-Data-Request

UDR

306

User-Data-Answer

UDA

306

Profile-Update-Request

PUR

307

Profile-Update-Answer

PUA

307

Subscribe-Notifications-Request

SNR

308

Subscribe-Notifications-Answer

SNA

308

Push-Notification-Request

PNR

309

Push-Notification-Answer

PNA

309

Bootstrapping-Info-Request

BIR

310

Bootstrapping-Info-Answer

BIA

310

Message-Process-Request

MPR

311

Message-Process-Answer

MPA

311

Update-Location-Request

ULR

316

Update-Location-Answer

ULA

316

Authentication-Information-Request

AIR

318

Authentication-Information-Answer

AIA

318

Notify-Request

NR

323

Notify-Answer

NA

323

       属性-值对(AVP)


       为了简化,“V”位表示厂商专用,M为意味着必须,P位意味着保护。

       V位:作为厂商专用位,表示可选的Vendor-ID字段是否出现在AVP头部中,当设置时,AVP代码属于专用厂商代码地址空间。

       M位:作为必选(强制)位,表示是否要求AVP支持。如果Diameter客户端、服务、代理和传输代理接收带有M位的AVP时,如果AVP或者它的值不能识别,消息必须被拒绝。Diameter中继和重定向代理绝不能拒绝带有不认识AVP的消息。

       P位表示是否需要加密,提供端对端的安全。

Attribute-Name

Code

Data Type

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

状态机

       RFC3588定义维护对端之间的连接状态机和消息处理。这是基本协议功能的一部分,所有栈必须支持它,虚拟的连接相关的操作也一样。

       参考网址:

http://en.wikipedia.org/wiki/File:RFC3588_peer_state_machine_1.png

http://en.wikipedia.org/wiki/File:RFC3588_peer_state_machine_2.png

       此外,应用专用状态机也随后或更高虚拟层上引入。RFC 3588定义一个认证和审计状态机。

http://en.wikipedia.org/wiki/File:RFC3588_auth_state_machine_client.png

http://en.wikipedia.org/wiki/File:RFC3588_acct_state_machine_client.png

http://en.wikipedia.org/wiki/File:RFC3588_auth_state_machine_server.png

http://en.wikipedia.org/wiki/File:RFC3588_peer_state_machine_1.png

消息流

       两个Diameter对之间的通信开始于传输连接的建立(TCP或SCTP)。然后发起者发送一个CER(能力交换请求)到对端,返回一个CEA的响应。对于RFC 3588服从对端TLS作为可选的协商。对于RFC 6733兼容的对端TLS协商在CER/CEA之前任意的出现。

       然后连接准备交换应用消息。

       如果一些时间之内没有消息交换,两端需要发送DWR(设备看门狗请求),并且另外一个对端必须响应DWA。

       两端都可以发送DPR(断开对端请求)来终止通信,另外一端必须响应DPA。之后可以端口传输连接。

RFC参考

       Diamter协议当前定义在下面的IETF中:

#

Title

Date published

Related article

Obsoleted by

Notes

RFC 3588

Diameter Base Protocol.

September 2003

RFC 6733

RFC 3589

Diameter Command Codes for Third Generation Partnership Project (3GPP) Release 5.

September 2003

RFC 4004

Diameter Mobile IPv4 Application.

August 2005

RFC 4005

Diameter Network Access Server Application.

August 2005

RFC 7155

RFC 4006

Diameter Credit-Control Application.

August 2005

Diameter Credit-Control Application

RFC 4072

Diameter Extensible Authentication Protocol (EAP) Application.

August 2005

RFC 4740

Diameter Session Initiation Protocol (SIP) Application. M.

November 2006

RFC 5224

Diameter Policy Processing Application.

March 2008

RFC 5431

Diameter ITU-T Rw Policy Enforcement Interface Application.

March 2009

RFC 5447

Diameter Mobile IPv6: Support for Network Access Server to Diameter Server Interaction.

February 2009

RFC 5516

Diameter Command Code Registration for the Third Generation Partnership Project (3GPP) Evolved Packet System (EPS).

April 2009

-

RFC 5624

Quality of Service Parameters for Usage with Diameter.

August 2009

RFC 6733

Diameter Base Protocol.

October 2012

RFC 6737

The Diameter Capabilities Update Application.

October 2012

RFC 7155

Diameter Network Access Server Application.

April 2014

 

Diameter协议