Diameter是计算机网络中使用的一个认证、授权和审计协议。它从功能更少的RADIUS协议进化而来,并且取代之。
Dimater应用通过添加新的命令或属性扩展基础协议,例如使用扩展认证 协议(EAP)。
名字是一个单词游戏(从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。之后可以端口传输连接。
Diamter协议当前定义在下面的IETF中:
# |
Title |
Date published |
Related article |
Obsoleted by |
Notes |
RFC 3588 |
|
|
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 |
|
|
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 |