Diameter协议
来源:互联网 发布:网络维护的工作内容 编辑:程序博客网 时间:2024/05/01 15:45
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协议
- Diameter 协议
- Diameter 协议
- Diameter协议
- Diameter协议
- diameter协议
- DIAMETER基础协议
- DIAMETER基础协议
- Diameter基础协议摘要
- Diameter协议与SIP
- 关于Diameter协议安全性分析
- 关于Diameter协议安全性分析
- Diameter协议被广泛采用
- Radius/Free Radius/Diameter协议
- Diameter协议被广泛采用
- AAA协议:Radius和Diameter
- Diameter协议学习笔记一(协议介绍)
- DIAMETER 协议(DIAMETER protocol) http://www.networkdictionary.cn/Security/DIAMETER-Protocol.php
- 学霸是怎样炼成的(大一上篇)
- eclipse优化以及jvm内存的讲解与设置
- 串行口API的使用
- 数据结构实验之求二叉树后序遍历和层次遍历
- Android突破二之WindowManager、Display、DisplayMetrics类
- Diameter协议
- 如果当初学习编程时能有人给我这些忠告该多好
- oracle中to_char后查询当天在今年的第几周ww和iw的区别
- 15个你可能不知道的开源云平台
- Unity3d TweenPosition.Begin()的使用浅析
- ios Asynsocket 接收数据委托函数不执行
- 【Leetcode】Add two numbers JAVA
- service的生命周期
- 怎么建立优质外链