Diameter是新一代AAA协议,可以承载与TCP或者SCTP协议之上,被广泛应用于IMS,LTE网络中。RFC3588定义了Diameter的基础协议,各种应用可以在此基础上对其进行扩展(主要是定义新的Application ID,Command和AVP);基础协议中包括一个基本的Accounting功能,如果需要Authentication或者Authorization通常需要进行对基础协议扩展。 1. 基本概念: · Connection: 是传输层的概念,负责在两端直接传输Diameter消息; · Session: 是应用层的概念,可以用Session-id 这AVP来标识;下图展示了Connection与Session的区别; +--------+ +-------+ +--------+
| Client | | Relay | | Server |
+--------+ +-------+ +--------+
<----------> <---------->
peer connection A peer connection B
<---------------------------------------------------->
User session x · Destination Host:用于标识一台运行Diameter应用的主机,命名方式类似DNS格式,但并不是域名,只是一个标识符而已,一台运行Diameter应用的主机可以支撑一个或者多个Diameter应用; · Destination Realm:用于标识一组运行Diameter应用的主机,可以将多台Host划归为一个Realm中; · Peer Table:用于消息路由的数据配置, Peer table中的主机都是能和本地主机之间通信的(也就是说中间无需经过消息转发),格式如下表: · Realm-Based Routing Table : 用于消息路由的数据配置,格式如下表: 2. Diameter Agents: · Relay Agents:对消息进行转发,只增加或者删除路由信息,而不会修改任何应用层信息;在CER/CEA进行能力交互时,需要返回自己支撑的Application ID为Relay Application Identifier ;使用Relay Agents的好处是简化网络的复杂性,不需要对所有Diameter节点都进行复杂的配置,比如只需配置节点让Diameter消息转发到Relay Agents,然后在Relay Agents上进行比较全面的路由配置即可。 · Proxy Agents:Proxy Agents也负责转发消息,与Relay Agent不同的是,它需要理解应用层的信息,进而维护Transaction的状态;在CER/CEA进行能力交互时,需要返回自己支撑的所有Application ID; · Redirect Agents:收到Diameter消息后不进行转发,而是回复一个应答消息给发送者,应答消息中包含一个或者多个地址,告诉发送者应该将消息发往这些地址; · Translation Agents:完成Radius和Diameter协议之间的转换; 3. 消息格式: 1) Diameter header: · Version: Diameter的版本号,目前为1; · Message length:包含头部在内的消息长度,也就是头部+所有AVP的长度之和; · Flags:
R(equest):如果 置位表示这是一个Request消息;
P(roxiable):如果被置位说明该消息可以被转发,否则必须本地处理;
E(rror):如果置位,说明产生了一个协议错误,只能出现在Answer消息中;
T:如果被置位,说明该消息有可能是一个被重传的消息;
r:保留位; · Code:消息命令码,用来标识各种Diameter消息,由IANA负责统一分配; · Application ID:用来表示不同的Diameter应用,由IANA负责统一分配; · Hop by Hop ID:用来匹配Request和Answer消息,在一个指定的Connection上的任何时间都必须是唯一的;该值在Diameter消息转发时会被Agent修改; · End to End ID:用来识别重复消息;该值在本地的一段时间内必须是唯一的,传输过程中一直保持不变;目标主机会根据该值和Original-Host AVP来判读是否是重复消息; 2) AVP header: · AVP code:用来标识一个AVP,由IANA来统一分配; · AVP flags:
V, Vendor specific: 如果置位说明 Vendor ID 存在;
M, Mandatory:如果置位说明该AVP是必须的;
P:如果置位说明需要保证该AVP端到端的安全性;
r:reserved · AVP length:AVP长度; · Vendor ID:可选的,如果AVP flags中的V被置位,说明该域存在;该值也是由IANA分配的; 4. Diameter和连接相关的三对基本消息: Diamete通过传输层TCP/SCTP建立连接后,传输的第一个消息就是CER/CEA,通过该消息的交互了解对端都支撑哪些应用,看是否有共同的应用;如果对端是Relay Agent,则认为肯定存在共同应用;获知对方支撑你哪些应用后,发送消息的时候就不会发送对方不认识的消息,对方对收到的不认识的消息也不会处理。此外双方的IP地址也会在CER/CEA消息中交换。CER/CEA是不能被Proxy,Relay或者是Redirection的,所以说CER/CEA只能是直连节点之间的交换,如果节点A经过Relay Agent发送消息到节点B,那么需要建立两个连接,进行两次CER/CEA的交互。当需要断开连接时,主动方需要发起DPR消息给对端指示断开传输层连接。在连接期间,双方需要互发DWR/DWA (Watching Dog) 消息,用来检测对方是否处于Active状态. 5. 如何看规范中的Diameter命令的ABNF 定义: 具体参见协议的3.2,这里用一个例子大概总结一下: Example-Request ::= < "Diameter-Header: 9999999, REQ, PXY,123456 >
<Session-Id> //该AVP必须存在一个,且位置固定
{ User-Name } //该AVP必须存在一个
[ Destination-Host ] //该AVP可存在一个或者不存在
1*{ Origin-Host } //该AVP可存在一个或者多个
*[ AVP ] //该AVP可存在零个或者多个
|