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 |
| CCR | 272 | |
| 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 |
|
|
| ||||
| Diameter Command Codes for Third Generation Partnership Project (3GPP) Release 5. | September 2003 | ||||
| Diameter Mobile IPv4 Application. | August 2005 | ||||
|
|
| ||||
| Diameter Credit-Control Application. | August 2005 | ||||
| Diameter Extensible Authentication Protocol (EAP) Application. | August 2005 | ||||
| Diameter Session Initiation Protocol (SIP) Application. M. | November 2006 | ||||
| Diameter Policy Processing Application. | March 2008 | ||||
| Diameter ITU-T Rw Policy Enforcement Interface Application. | March 2009 | ||||
| Diameter Mobile IPv6: Support for Network Access Server to Diameter Server Interaction. | February 2009 | ||||
| Diameter Command Code Registration for the Third Generation Partnership Project (3GPP) Evolved Packet System (EPS). | April 2009 | - | |||
| Quality of Service Parameters for Usage with Diameter. | August 2009 | ||||
| Diameter Base Protocol. | October 2012 | ||||
| The Diameter Capabilities Update Application. | October 2012 | ||||
| Diameter Network Access Server Application. | April 2014 |

4221

被折叠的 条评论
为什么被折叠?



