Diameter协议族包括基础协议(Diameter Base Protocol)和各种应用协议。本文介绍的基础协议提供了作为一个AAA协议的最低需求,是Diameter网络节点都必须实现的功能,包括节点间能力的协商、Diameter消息的接收及转发、计费信息的实时传输等。应用协议则充分利用基础协议提供的消息传送机制,规范相关节点的功能以及其特有的消息内容,来实现应用业务的AAA。基础协议可以作为一个计费协议单独使用,但一般情况下需与某个应用一起使用。
图1是Diameter的协议层次图。
Diameter网络节点
在Diameter协议中,包括多种类型的Diameter节点。除了Diameter客户端和Diameter服务器外,还有Diameter中继、Diameter代理、Diameter重定向器和Diameter协议转换器。
● Diameter中继 能够从Diameter请求消息中提取信息,再根据Diameter基于域的路由表的内容决定消息发送的下一跳Diameter节点。Diameter中继只对过往消息进行路由信息的修改,而不改动消息中的其他内容。
● Diameter代理 根据Diameter路由表的内容决定消息发送的下一跳Diameter节点。此外,Diameter代理能够修改消息中的相应内容。
● Diameter重定向器 不对消息进行应用层的处理,它统一处理Diameter消息的路由配置。当一个Diameter节点按照配置将一个不知道如何路由的请求消息发给Diameter重定向器时,重定向器将根据其详尽的路由配置信息,把路由指示信息加入到请求消息的响应里,从而明确地通知该Diameter节点的下一跳Diameter节点。
● Diameter协议转换器 主要用于实现RADIUS与Diameter,或者TACACS+与Diameter之间的协议转换。
上述各种Diameter节点,通过配置建立一对一的网络连接,组成一个Diameter网络。
Diameter网络节点间的对等连接
Diameter节点间的网络连接是在Diameter节点启动过程中动态建立的基于TCP或者SCTP传输协议上的套接字连接。
对于一个Diameter节点,其对端节点,或者基于静态配置,或者基于动态(利用SLP、DNS协议)发现。当Diameter协议栈启动时,Diameter节点会尝试与每一个它所得知的对端节点建立套接字连接。
在成功建立一个套接字连接,即对等连接后,两个Diameter节点将进行能力协商,交换协议版本、所支持的应用协议、安全模式等信息。能力协商是通过Diameter的能力交换请求(CER,Capabilities-Exchange-Request)和能力交换响应(CEA,Capabilities-Exchange-Answer)两个Diameter消息的交互实现的。能力协商之后,应该把有关对端所支持的应用等信息保存在高速缓存中,这样就可以防止把对端不认识的消息和AVP发送给对端。
对等连接可以被正常中止,这需要一个Diameter节点主动发起对等连接中止请求(DPR,Disconnect-Peer-Request)消息,对端收到此消息,并回答对等连接中止应答(DPA,Disconnect-Peer-Answer)消息后,先行中止底层连接。对于除此之外的对等连接的中止情况(如网络故障、一端系统故障等),在发现这类连接异常中止的一端时,要按照定时器设置,不断地尝试恢复建立对等连接。
正常的对等连接上可以传输各类Diameter消息,在连接空闲无消息传送超过一定时间时,对等连接两端将发送连接正常检测消息(DWR/DWA,Device-Watchdog-Request/Answer)。而一旦DWR/DWA消息收发异常,Diameter节点将认定对等连接故障,或者尝试恢复建立连接,或者将消息通路转换到备用的对等连接上。
Diameter的消息格式
Diameter消息的头部包括20个字节,结构如图2所示。头4个字节是8比特的版本信息和24比特的消息长度(包括消息头长度)。随后的4个字节是8比特的消息标志位和24比特的命令代码。
命令代码用来表示这个消息所对应的命令,请求消息和相应的回答消息共享一个命令代码。
应用标识、逐跳标识和端到端标识都有4个字节,其中应用标识用以指示消息适用的应用,逐跳标识用于判断请求与应答的对应关系,而端到端标识主要用于重复消息的检查。
消息头部后的全部字节就是消息的具体内容,以属性值对AVP(Attribute-Value-Pair)的形式逐个头尾衔接。AVP的格式也是由头部和数据组成,如图3所示,结构为:头4个字节是AVP代码,下四个字节由8比特的AVP标志和24比特的AVP长度(包括AVP头部长度)构成,AVP标志用于通知接收端如何处理这个属性。
头部后的字节就是数据内容。AVP内的数据类型,目前包括字符串、32比特整数、64比特整数、32比特浮点数、64比特浮点数,以及AVP组等。
Diameter的消息处理和用户会话
Diameter客户端与Diameter服务器都可以组成相应的请求消息,发送给对方。正是从这点考虑,Diameter属于对等协议(peer to peer),而不是如RADIUS一样的客户/服务器模式的协议。
为处理用户的接入,Diameter客户端通过Diameter基础协议和应用协议,与Diameter服务器进行一系列的信息交换,而这样一个从发起到中止的一系列信息交互,在Diameter协议里被称为一个用户会话(User Session)。
一般的AAA业务可以大致分成两类:一类包括用户的认证和授权,可能还包括计费(如移动电话业务);另一类则是仅包括对用户的计费(如目前的主叫拨号接入业务)。为此,Diameter基础协议提供对应的两类用户会话,为上层的应用服务。
一个用户会话的建立,一般是由Diameter客户端发起,中间可以途径若干Diameter代理、重定向器或协议转换器,一直延伸到Diameter服务器。
用户会话的结束,完全由Diameter客户端决定,但服务器也可以先行发出中止用户会话请求(ASR,Abort-Session-Request),在客户端同意中止请求的情况下,会响应中止用户会话应答(ASA,Abort-Session-Answer),然后再发出用户会话结束请求,通知服务器结束用户会话;否则用户会话仍得以保持。在未得到服务器请求的情况下,客户端也可以自行给服务器发出用户会话结束请求,例如在客户端自身异常,或是用户接入异常等的情况下。
通过对用户会话的建立和结束的控制,Diameter应用很容易实现可靠的以用户为单位的业务资源管理。
Diameter的计费
当用户被允许接入时,Diameter客户端将根据情况产生针对用户的计费信息。这些计费信息将被封装在具体Diameter应用专有的AVP内,由Diameter基础协议中定义的计费请求(ACR,Accounting-Request)消息,传送给Diameter服务器。服务器将响应计费应答(ACA,Accounting-Answer)消息,指示计费成功或拒绝。客户端只有在收到成功的计费响应时,才能清除已经被发送的计费记录。当收到计费拒绝指示时,客户端将中止用户接入。
Diameter支持实时的计费,客户端通过在首次计费请求/响应交互过程中协商好的计费消息间歇时间,定时向服务器发送已收集的计费信息。这种实时计费确保了对用户信用的实时检查。
Diameter消息的安全传输
Diameter客户端(如网络接入服务器)必须支持Ipsec,可以支持TLS;而Diameter服务器必须支持Ipsec和TLS。IPsec主要应用在网络的边缘和域内的流量,而域间的流量主要通过TLS来保证安全。
由于IPsec和TLS只能保证逐跳的安全,也就是一个传输连接上的安全。当消息通过Diameter代理时,代理会修改消息,这样通过IPsec或TLS取得的安全信息在通过代理时就丢弃了。而Diameter CMS应用提供了端到端的安全性。端到端的安全性是通过两个对等端点间支持AVP的完整性和机密性提供的。Diameter CMS应用中采用了数字签名和加密技术来提供所要求的安全业务。
尽管是由每个对等端的安全策略决定使用端到端的安全性的场合,如当TLS或IPsec提供的传输层面上的安全性足够时,可能不需要端到端的安全性,但Diameter基础协议中还是强烈建议所有的Diameter实现都支持端到端的安全性。这样Diameter CMS应用就有别于其他的Diameter应用,它一般是和Diameter基础协议共存的。