分享

Diameter

 IT女女 2017-03-22
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中的主机都是能和本地主机之间通信的(也就是说中间无需经过消息转发),格式如下表:
Host identity         StatusT         Static or Dynamic        Expiration time
abc.example.com        R-Open         statically         0
xyz.example.net        R-Open         dynamically         10
· Realm-Based Routing Table : 用于消息路由的数据配置,格式如下表:
Realm Name         Application Identifier         Local Action        Server Identifier         Static or Dynamic         Expiration time
example        16777250        RELAY        abc.example.com        statically         0
example        16777272        RELAY        xyz.example.net        dynamically         10
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. 消息格式:
MAC header        IP header
SCTP | TCP header
Diameter header        Data :::
1) Diameter header:
00        01        02        03        04        05        06        07        08        09        10        11        12        13        14        15        16        17        18        19        20        21        22        23        24        25        26        27        28        29        30        31
Version
Message length

Flags
Code

R        P        E        T        r        r        r        r       
Application ID

Hop by Hop ID

End to End ID

AVP[] :::
· 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:
00        01        02        03        04        05        06        07        08        09        10        11        12        13        14        15        16        17        18        19        20        21        22        23        24        25        26        27        28        29        30        31
AVP code

AVP flags
AVP length

V        M        P        r        r        r        r        r       
Vendor ID (Optional)

Data :::
· 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可存在零个或者多个





    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多