Diameter协议学习笔记一.docx
- 文档编号:6132529
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:12
- 大小:69.09KB
Diameter协议学习笔记一.docx
《Diameter协议学习笔记一.docx》由会员分享,可在线阅读,更多相关《Diameter协议学习笔记一.docx(12页珍藏版)》请在冰豆网上搜索。
Diameter协议学习笔记一
Diameter协议学习笔记一(协议介绍)
一、摘要:
Diameter协议主要为应用程序提供认证、鉴权、计费框架,即AAA,并支持本地AAA和漫游场景下的AAA。
二、介绍:
AAA协议、例如TACACS、RADIUS起初是为了提供PPP及终端接入,随着Internet及新的接入技术的发展,包括无线、DSL、移动IP,以太网路由、网络访问服务器(NAS)在复杂和密集性方面有所增强,这对AAA协议提出了新的要求。
例如,网络访问对AAA协议提出的要求总结有以下这些:
∙Failover(故障转移)
RADIUS协议没有定义failover机制,因此,failover的行为随着程序的实现不同而各异,为了提供一个明确定义的failover行为,Diameter支持应用层的应答,并定义failover的西装算法和偶联状态机。
∙传输层安全
RADIUS在定义了应用层的认证,但仅使用了响应包,RADEXT定义了另外的认证,但仅要求在EAPsession中使用,且支持属性隐藏。
RFC3162为RADIUS定义了IPsec,但对其支持并没有做要求,Diameter强制要求支持IPSec,TLS的支持可选择。
∙可靠传输
RADIUS运行在UDP上,且没有定义重传行为,所有,可靠性因实现不同而各异。
Diameter运行在可靠的传输层(TCP,SCTP)上。
∙代理支持
RADIUS没有明确地规定支持agent,包括Proxies,Redirects,Relays。
Diameter明确地定义了代理的行为。
∙服务器发起消息
RADIUS中对于服务器发起消息的支持是可选的,这就使用一些如主动断链、或者重新认证或重新鉴权等特性实现困难。
服务器发起消息在Diameter中强制要求支持。
∙可审核性
RADIUS没有定义数据对象安全机制,结果,不受信任的代理可能修改属性或都包头,并且不会被检测出来,结合对能力协商机制的缺失,无法预期结果会发生什么。
Diameter也没有定义数据对象安全机制,但支持能力协商。
∙转换支持
Diameter使用的通用协议数据单元(PDU)与RADIUS不同,但支持向前兼容RADIUS,所以两种协议可以部署在同一网络中。
∙能力协商
RADIUS不支持错误消息、能力协商、及表示属性强制/非强制的标志位。
因此RADIUS的客户端和服务端不担心对方的能力,它们可能不会成功地协商一个相互接受的服务,或者在一些情况下,需要知道哪些服务对端已经实现,以上几点Diameter均支持。
∙对端发现及配置
RADIUS要求人工配置服务端或客户端的名称或地址,相应地增加了秘密的共享,带来管理和安全上的负担。
通过DNS,Diameter可以动态发现对端,并通过传输层安全来保证。
∙漫游支持
RADIUS不提供对proxyr的明确支持,缺少可审核性、传输层安全,使得在漫游场景下容易引发安全问题,Diameter支持域内漫游、消息路由、可审核性、传输层安全特性,可提供可安全和可靠的漫游。
术语:
∙AAA
认证、鉴权、计费
∙Accounting(计费)
为能力计划制定、审计、账单、费用分配等目的而进行资源使用的信息的收集动作。
∙AccountingRecord(计费记录)
记录某个用户在整个会话期间资源消费的情况,
∙Authentication(认证)
校验一个实体一致性的动作。
∙Authorization(鉴权)
决定一个请求实体是否允许访问某项资源。
∙AVP(属性值对)
Diameter消息由一个报文头后跟一个或多个Attribute-Value-Pairs(AVPs),一个AVP包含一个头用于协议细节数据(例如路由信息)。
∙Broker(代理)
代理是一个用于AAA架构中的商业术语,可以是relay,proxy,或者redirectagent。
∙DiameterAgent(Diameter代理)
指一个提供relay、proxy、redirect或翻译服务的diameter结点。
∙DiameterClient(Diameter客户端)
为一个处于网络边缘的,提供访问控制的设备。
如NAS。
∙DiameterNode(Diameter节点)
为一个实现了diameter协议的主机进程,其行为为客户端、代理、服务端之一。
∙DiameterPeer(Diameter对端)
为一个具有直连连接的diameter节点。
∙DiameterSecurityExchange(diameter安全交换)
为一个进程,两个diameter节点可以通过它建立端到端的安全。
∙DiameterServer(diameter服务端)
用于处理指定域中认证、鉴权、计费请求。
∙End-to-EndSecurity(端到端安全)
TLS和IPSec提供逐跳的安全,当relays或proxy很复杂时,逐跳的安全不能保证全部的diameter用户会话,端到端安全为两个diameter节点间的安全,或者Agent间的,这种安全保证了整个dimeter传送路径上的安全。
∙HomeRealm(归属域)
为一个维护帐户关系的管理域。
∙Interimaccounting(临时计费)
一个临时计费消息提供一个用户会话的使用快照,通常为一个用户会话在设备重启或者网络问题出现时提供部分的计费。
∙LocalRealm(本地域)
一个提供服务的管理域。
∙Multi-Sessin(多会话)
一个多会话表示多个会话的逻辑连接,多会话使用Acct-Multi-Session-Id来跟踪。
∙NetworkAccessIdentifier(网络接入标识)
即NAI,用来在diameter协议中提取一个用户的标识及域。
用于在认证中识别用户,域用来消息路由。
∙ProxyAgentorProxy(代理)
除传输请求和响应外,代理制定与资源有关的策略,通常用来完成NAS设备状态的跟踪,代理在收到一个服务端的响应前不会对客户端的请求进行应答。
当策略被违反时,它们可能会生成一个拒绝消息。
因此,代理需要理解通过它们传输的消息的语义,它们可能不支持所有的diameter应用。
∙Realm(域)
在NAI中跟在@符号之后的字符串,NAI的域要求为唯一的,且为DNS域的分段,用于判断消息是否满足本地处理的条件,或者被路由或重定向。
∙Real-timeAccounting(实时计费)
它包含在一个限定的时间窗内处理资源使用的信息,时间限制通常用来限制风险。
∙RelayAgentorRelay(中继代理或转播)
转播请求和响应基于路由相关的AVPs和路由表,中继不会制定策略,他们不会检查或更改非路由AVPs,因此,中继从不产生消息,不需要理解消息的语义或者非路由AVPs,可能会处理八种diameter应用或消息类型,因此,中继依据路由和域来做决定,并且不保存NAS资源使用的状态或会话。
∙RedirectAgent(重定向代理)
与其在客户端和服务端间传递消息,重定向代理涉及客户端和服务端,并允许它们直接通信,所以重定向代理不出现在传输路径中,它们从不修改客户端和服务端传输的任何AVPs,也不产生消息,可以处理任何消息类型,尽管它们可能仅配置为重定向特定类型的消息,与Proxy代理相比,重定向代理不保存会话或NAS资源相关的状态。
∙SecurityAssociation(安全偶联)
一个安全的偶联是指两个端点之间的diameter会话,此会话允许端点完整且可信地通信,包括中继和/或Proxy。
∙Session(会话)
会话是指一个事件相关的活动。
每个应用应该为会话的开始和结束提供指导,所有具有相同会话标识的diameter包被认为同一个会话的一部分。
∙Sub-session(子会话)
一个子会话表示一个明确的服务(例如Qos),这些服务可能同时或连续发生(例如同时产生的语音和同一会话中传输的数据)。
此类会话由Accounting-Sub-Session-Id来跟踪。
∙Transactionstate(传输状态)
Diameter协议要求代理来维护传输状态,用于failover。
传输状态暗指一个请求,逐跳标识被保存,且原来存储对应应答接收时的初始值字段被本地唯一标识符替代,当拒绝一个应答时请求的状态被释放。
∙TranslationAgent(传输代理)
是指为一个具有状态的dimaeter节点,用于在diameter和其它的AAA协议(如RADIUS)间进行翻译。
∙TranslationConnection(传输连接)
一个传输连接是指直接存在于两个diameter对端间的TCP或SCTP连接,或者说端到端连接。
∙Upstream(上行)
用来标识一个特定的diameter消息从接入设备到归属服务器的传送方向。
∙User(用户)
产生请求或使用某些资源的实体,支持diameter客户端产生一个请求。
∙链接和会话的区别:
链接为传输层概念,会话为应用层的概念,通过AVPSession-Id来标识,两者之前没有联系。
如下图:
+--------+ +-------+ +--------+
|Client| |Relay| |Server|
+--------+ +-------+ +--------+
<----------> <---------->
peerconnectionA peerconnectionB
<----------------------------->
Usersessionx
Figure1:
Diameterconnectionsandsessions
∙对端表
用于消息传递和路由表全使用,包括以下信息:
1. Host标识:
包括Origin-HostAVP,在CER/CEA消息中使用。
2. StatusT:
对端实体的状态。
3. StaticorDynamic:
指对端是静态配置的还是动态发现。
4. Expirationtime:
指使用动态发现机制时刷新超时的时长。
5. TLSEnablee:
与对端通信时是否使用TLS。
∙基于域名的路由表
1. 域名:
用于查找路由表时使用的主键。
2. 应用程序标识:
使用一个Vendorid和一个applicaiontid标识,其为路由表的第二主键。
3. LocalAction:
决定消息如何处理,有以下几个选项:
LOCAL:
本地处理,不需要路由到下一个服务器。
RELAY:
路由到下一跳,注意不修改任何非路由的AVP。
PROXY:
路由到下一跳,注意可能会在消息中添加新的AVP。
REDIRECT:
具有一个源diameter服务器的标识,且将消息返回给发送者。
4. 服务器标识:
必须出现在对端表中,当LocalAction为RELAY或PROXY时,此字段标识消息被路由到的地址,当为REDIRECT时,表示消息应该重定向到的一个或多个服务器。
5. StaticorDynamic:
路由信息是静态配置还是动态发现。
6. Expiration time:
与对端表中的含义相同。
另外,路由表必须包含一条默认路由。
Diameter消息应用层的路由
1. 创建和发送Request消息:
1) 产生一个Request消息时,必须遵守下列规则:
设置头部的Commandcode;
设置头部的 'R' 位;
设置头部的End-to-End 为本地的唯一值;
Origin-Host 和 Origin-RealmAVPs 必须携带, 用来标识消息的源地址;
Destination-Host 和 Destination-RealmAVPs 需根据以下规则设置;
a) 不能被Proxy的消息一定不能带Destination-RealmandDestination-HostAVPs;
b) 如果消息是发往某个realm而不是具体的host,则只携带Destination-RealmAVP;
c) 如果消息是发往某个具体的host,则需要同时携带Destination-RealmandDestination-HostAVPs;
如果消息有可能被转发,则消息中还必须携带下列AVP之一:
anAcct-Application-IdAVP,anAuth-Application-IdAVPoraVendor-Specific-Application-IdAVP;
2) 当发送一个Request消息时,无论是源主机发送还是Agent转发,都需要执行下列操作:
a) 设置头部的Hop-by-Hop为本地的唯一值;
b) 将该消息放入PendingRequest消息队列;
2. 收到Request消息:
1) 当一个Diameter节点收到一个Request消息后,有如下四种可能的处理方式:
a) 如果满足如下条件,则本地处理:
Destination-HostAVP包含了本地host的标识,或者
Destination-HostAVP 不存在,Destination-RealmAVP 经过在路由表中查询被配置为本地处理, 或者
Destination-Host 和 Destination-Realm 都不存在;
b) 如果Destination-HostAVP存在于本地的Peertable中,则执行RequestForwarding:
c) 如果没有本地处理也没有进行Requestforwarding,则根据 Destination-RealmAVP 和 Auth-Application-Id 或 Acct-Application-Id 或 Vendor-Specific-Application-Id 查找RealmRoutingTable,执行RequestRouting;
d) 返回错误DIAMETER_UNABLE_TO_DELIVER ;
注意:
这里区分了Requestforwarding和RequestRouting;本文其它地方提到的“转发”都是泛指消息非本地处理的情况;
2) Request消息在被Relay或者Proxy的时候,RelayAgent和ProxyAgent需要做如下工作:
a) 在转发出去的Request消息中插入Route-RecordAVP,里面包含发送该Request消息的主机标识;
b) 保存和该Request消息相关的:
Protocol, IPAddress, Port, Hop-by-Hop标识;保存这些信息是为了收到与该Reqeuest消息对应的Answer消息后能够将Answer消息正确的转发出去;
3. 创建Answer消息:
当一个Request消息被本地处理后,必须按照如下规则创建并发送Answer消息:
从Request消息中拷贝Hop-by-Hop填入Answer消息;
将本地主机标识作为Origin-HostAVP;
Destination-Host 和 Destination-RealmAVPs 不允许出现在Answer消息中;
加上 Result-CodeAVP 指示成功与否.
如果Reqeust消息中包含了Session-Id,那么Answer消息中也应该包含该值;
在Request消息中的任何Proxy-InfoAVPs 都应原封不动的拷贝到Answer消息中;
'P' 位需要和Request消息中保持一致;
End-to-End 需要和Request消息中保持一致;
4. 收到Answer消息:
当收到一个Answer消息时需要如下操作:
检查其Hop-by-Hop,从PendingRequest队列中找到与其一致的Reqeust消息,然后将Reqeust消息从PendingRequest队列中删除;
如果是Agent收到Answer消息,Agent需要将Hop-by-Hop替换为先前保存的Reqeust中的Hop-by-Hop,然后再将Answer消息转发出去;
下图是Diameter节点经由RelayAgent发送一个Request消息给并收到Answer消息的示意图,该图主要为了说明Hop-by-Hop和End-to-End两个标识的作用:
Diameter基础协议摘要
Diameter是新一代AAA协议,可以承载与TCP或者SCTP协议之上,被广泛应用于IMS,LTE网络中。
RFC3588定义了Diameter的基础协议,各种应用可以在此基础上对其进行扩展(主要是定义新的ApplicationID,Command和AVP);基础协议中包括一个基本的Accounting功能,如果需要Authentication或者Authorization通常需要进行对基础协议扩展。
1. 基本概念:
Connection:
是传输层的概念,负责在两端直接传输Diameter消息;
Session:
是应用层的概念,可以用Session-id 这AVP来标识;下图展示了Connection与Session的区别;
+--------+ +-------+ +--------+
|Client| |Relay| |Server|
+--------+ +-------+ +--------+
<----------> <---------->
peerconnectionA peerconnectionB
<---------------------------------------------------->
Usersessionx
DestinationHost:
用于标识一台运行Diameter应用的主机,命名方式类似DNS格式,但并不是域名,只是一个标识符而已,一台运行Diameter应用的主机可以支持一个或者多个Diameter应用;
DestinationRealm:
用于标识一组运行Diameter应用的主机,可以将多台Host划归为一个Realm中;
PeerTable:
用于消息路由的数据配置, Peertable中的主机都是能和本地主机之间通信的(也就是说中间无需经过消息转发),格式如下表:
Hostidentity
StatusT
StaticorDynamic
Expirationtime
R-Open
statically
0
R-Open
dynamically
10
Realm-BasedRoutingTable :
用于消息路由的数据配置,格式如下表:
RealmName
ApplicationIdentifier
LocalAction
ServerIdentifier
StaticorDynamic
Expirationtime
example
16777250
RELAY
statically
0
example
16777272
RELAY
dynamically
10
2. DiameterAgents:
RelayAgents:
对消息进行转发,只增加或者删除路由信息,而不会修改任何应用层信息;在CER/CEA进行能力交互时,需要返回自己支持的ApplicationID为RelayApplicationIdentifier ;使用RelayAgents的好处是简化网络的复杂性,不需要对所有Diameter节点都进行复杂的配置,比如只需配置节点让Diameter消息转发到RelayAgents,然后在RelayAgents上进行比较全面的路由配置即可。
ProxyAgents:
ProxyAgents也负责转发消息,与RelayAgent不同的是,它需要理解应用层的信息,进而维护Transaction的状态;在CER/CEA进行能力交互时,需要返回自己支持的所有ApplicationID;
RedirectAgents:
收到Diameter消息后不进行转发,而是回复一个应答消息给发送者,应答消息中包含一个或者多个地址,告诉发送者应该将消息发往这些地址;
TranslationAgents:
完成Radius和Diameter协议之间的转换;
3. 消息格式:
MACheader
IP header
SCTP | TCP header
Diameterheader
Data:
:
:
1) Diameterheader:
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
Messagelength
Fla
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Diameter 协议 学习 笔记