当前位置:首页 >> 信息与通信 >>

Diameter协议学习笔记一


Diameter 协议学习笔记一 协议介绍 协议学习笔记一(协议介绍 协议介绍)
一、摘要: Diameter 协议主要为应用程序提供认证、鉴权、计费框架,即 AAA,并支持本 地 AAA 和漫游场景下的 AAA。 二、介绍: AAA 协议、例如 TACACS、RADIUS 起初是为了提供 PPP 及终端接入,随着 Internet 及新的接入技术的发展,包括无线、DS

L、移动 IP, 以太网路由、网络访 问服务器(NAS)在复杂和密集性方面有所增强,这对 AAA 协议提出了新的要 求。 例如,网络访问对 AAA 协议提出的要求总结有以下这些:
?

Failover(故障转移)

RADIUS 协议没有定义 failover 机制,因此,failover 的行为随着程序的实现不同 而各异,为了提供一个明确定义的 failover 行为,Diameter 支持应用层的应答,并 定义 failover 的西装算法和偶联状态机。
?

传输层安全

RADIUS 在定义了应用层的认证,但仅使用了响应包,RADEXT 定义了另外的认 证,但仅要求在 EAP session 中使用,且支持属性隐藏。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(计费)

为能力计划制定、审计、账单、费用分配等目的而进行资源使用的信息的收集动 作。
?

Accounting Record (计费记录)

记录某个用户在整个会话期间资源消费的情况,
?

Authentication(认证)

校验一个实体一致性的动作。
?

Authorization(鉴权)

决定一个请求实体是否允许访问某项资源。
?

AVP (属性值对)

Diameter 消息由一个报文头后跟一个或多个 Attribute-Value-Pairs(AVPs),一个 AVP 包含一个头用于协议细节数据(例如路由信息)。
?

Broker (代理)

代理是一个用于 AAA 架构中的商业术语,可以是 relay, proxy,或者 redirect agent。
?

Diameter Agent(Diameter 代理)

指一个提供 relay、proxy、redirect 或翻译服务的 diameter 结点。
?

Diameter Client(Diameter 客户端)

为一个处于网络边缘的,提供访问控制的设备。如 NAS。
?

Diameter Node(Diameter 节点)

为一个实现了 diameter 协议的主机进程,其行为为客户端、代理、服务端之一。
?

Diameter Peer (Diameter 对端)

为一个具有直连连接的 diameter 节点。

?

Diameter Security Exchange (diameter 安全交换)

为一个进程,两个 diameter 节点可以通过它建立端到端的安全。
?

Diameter Server(diameter 服务端)

用于处理指定域中认证、鉴权、计费请求。
?

End-to-End Security (端到端安全)

TLS 和 IPSec 提供逐跳的安全,当 relays 或 proxy 很复杂时,逐跳的安全不能保 证全部的 diameter 用户会话,端到端安全为两个 diameter 节点间的安全,或者 Agent 间的,这种安全保证了整个 dimeter 传送路径上的安全。
?

Home Realm(归属域)

为一个维护帐户关系的管理域。
?

Interim accounting(临时计费)

一个临时计费消息提供一个用户会话的使用快照,通常为一个用户会话在设备重 启或者网络问题出现时提供部分的计费。
?

Local Realm(本地域)

一个提供服务的管理域。
?

Multi-Sessin(多会话)

一个多会话表示多个会话的逻辑连接,多会话使用 Acct-Multi-Session-Id 来跟 踪。
?

Network Access Identifier(网络接入标识)

即 NAI,用来在 diameter 协议中提取一个用户的标识及域。用于在认证中识别用 户,域用来消息路由。
?

Proxy Agent or Proxy (代理)

除传输请求和响应外,代理制定与资源有关的策略,通常用来完成 NAS 设备状 态的跟踪,代理在收到一个服务端的响应前不会对客户端的请求进行应答。当策略 被违反时,它们可能会生成一个拒绝消息。因此,代理需要理解通过它们传输的消 息的语义,它们可能不支持所有的 diameter 应用。

?

Realm(域)

在 NAI 中跟在@符号之后的字符串,NAI 的域要求为唯一的,且为 DNS 域的分 段,用于判断消息是否满足本地处理的条件,或者被路由或重定向。
?

Real-time Accounting(实时计费)

它包含在一个限定的时间窗内处理资源使用的信息,时间限制通常用来限制风 险。
?

Relay Agent or Relay(中继代理或转播)

转播请求和响应基于路由相关的 AVPs 和路由表,中继不会制定策略,他们不会 检查或更改非路由 AVPs,因此,中继从不产生消息,不需要理解消息的语义或者 非路由 AVPs,可能会处理八种 diameter 应用或消息类型,因此,中继依据路由和 域来做决定,并且不保存 NAS 资源使用的状态或会话。
?

Redirect Agent(重定向代理)

与其在客户端和服务端间传递消息,重定向代理涉及客户端和服务端,并允许它 们直接通信,所以重定向代理不出现在传输路径中,它们从不修改客户端和服务端 传输的任何 AVPs,也不产生消息,可以处理任何消息类型,尽管它们可能仅配置 为重定向特定类型的消息,与 Proxy 代理相比,重定向代理不保存会话或 NAS 资 源相关的状态。
?

Security Association(安全偶联)

一个安全的偶联是指两个端点之间的 diameter 会话,此会话允许端点完整且可信 地通信,包括中继和/或 Proxy。
?

Session(会话)

会话是指一个事件相关的活动。每个应用应该为会话的开始和结束提供指导,所 有具有相同会话标识的 diameter 包被认为同一个会话的一部分。
?

Sub-session(子会话)

一个子会话表示一个明确的服务(例如 Qos),这些服务可能同时或连续发生(例 如同时产生的语音和同一会话中传输的数据)。此类会话由 Accounting-SubSession-Id 来跟踪。
?

Transaction state(传输状态)

Diameter 协议要求代理来维护传输状态,用于 failover。传输状态暗指一个请 求,逐跳标识被保存,且原来存储对应应答接收时的初始值字段被本地唯一标识符 替代,当拒绝一个应答时请求的状态被释放。
?

Translation Agent(传输代理)

是指为一个具有状态的 dimaeter 节点,用于在 diameter 和其它的 AAA 协议(如 RADIUS)间进行翻译。
?

Translation Connection(传输连接)

一个传输连接是指直接存在于两个 diameter 对端间的 TCP 或 SCTP 连接,或者 说端到端连接。
?

Upstream(上行)

用来标识一个特定的 diameter 消息从接入设备到归属服务器的传送方向。
?

User(用户)

产生请求或使用某些资源的实体,支持 diameter 客户端产生一个请求。

?

链接和会话的区别:

链接为传输层概念,会话为应用层的概念,通过 AVP Session-Id 来标识,两者 之前没有联系。如下图: +--------+ +-------+ +--------+ | Client | | Relay | | Server | +--------+ +-------+ +--------+ <----------> <----------> peer connection A peer connection B <-----------------------------> User session x Figure 1: Diameter connections and sessions
?

对端表

用于消息传递和路由表全使用,包括以下信息:

1. Host 标识:包括 Origin-Host AVP,在 CER/CEA 消息中使用。 2. StatusT:对端实体的状态。 3. Static or Dynamic:指对端是静态配置的还是动态发现。 4. Expiration time:指使用动态发现机制时刷新超时的时长。 5. TLS Enablee: 与对端通信时是否使用 TLS。
?

基于域名的路由表

1. 域名:用于查找路由表时使用的主键。 2. 应用程序标识:使用一个 Vendor id 和一个 applicaiont id 标识,其为路由表的 第二主键。 3. Local Action:决定消息如何处理,有以下几个选项: LOCAL:本地处理,不需要路由到下一个服务器。 RELAY:路由到下一跳,注意不修改任何非路由的 AVP。 PROXY:路由到下一跳,注意可能会在消息中添加新的 AVP。 REDIRECT:具有一个源 diameter 服务器的标识,且将消息返回给发送 者。 4. 服务器标识:必须出现在对端表中,当 Local Action 为 RELAY 或 PROXY 时,此字段标识消息被路由到的地址,当为 REDIRECT 时,表示消息应该重定向到 的一个或多个服务器。 5. Static or Dynamic: 路由信息是静态配置还是动态发现。 6. Expiration time:与对端表中的含义相同。 另外,路由表必须包含一条默认路由。

Diameter 消息应用层的路由
1. 创建和发送 Request 消息: 消息:

1) 产生一个 Request 消息时,必须遵守下列规则: ? ? ? ? ? 设置头部的 Command code; 设置头部的 'R' 位; 设置头部的 End-to-End 为本地的唯一值; Origin-Host 和 Origin-Realm AVPs 必须携带, 用来标识消息的源地 址; Destination-Host 和 Destination-Realm AVPs 需根据以下规则设置; a) 不能被 Proxy 的消息一定不能带 Destination-Realm and Destination-Host AVPs; b) 如果消息是发往某个 realm 而不是具体的 host,则只携带 Destination-Realm AVP; c) 如果消息是发往某个具体的 host,则需要同时携带 Destination-Realm and Destination-Host AVPs; ? 如果消息有可能被转发,则消息中还必须携带下列 AVP 之一:an Acct-Application-Id AVP, an Auth-Application-Id AVP or a VendorSpecific-Application-Id AVP;

2) 当发送一个 Request 消息时,无论是源主机发送还是 Agent 转发,都需 要执行下列操作: a) 设置头部的 Hop-by-Hop 为本地的唯一值; b) 将该消息放入 Pending Request 消息队列;

2. 收到 Request 消息: 消息: 1) 当一个 Diameter 节点收到一个 Request 消息后,有如下四种可能的处理方 式: a) 如果满足如下条件,则本地处理: ? Destination-Host AVP 包含了本地 host 的标识,或者

? ?

Destination-Host AVP 不存在, Destination-Realm AVP 经过在路由表 中查询被配置为本地处理, 或者 Destination-Host 和 Destination-Realm 都不存在;

b) 如果 Destination-Host AVP 存在于本地的 Peer table 中,则执行 Request Forwarding: c) 如果没有本地处理也没有进行 Request forwarding,则根据 DestinationRealm AVP 和 Auth-Application-Id 或 Acct-Application-Id 或 VendorSpecific-Application-Id 查找 Realm Routing Table,执行 Request Routing; d) 返回错误 DIAMETER_UNABLE_TO_DELIVER ; 注意: 注意:这里区分了 Request forwarding 和 Request Routing;本文其它地方提 到的“转发”都是泛指消息非本地处理的情况; 2) Request 消息在被 Relay 或者 Proxy 的时候,Relay Agent 和 Proxy Agent 需 要做如下工作: a) 在转发出去的 Request 消息中插入 Route-Record AVP,里面包含发送该 Request 消息的主机标识; b) 保存和该 Request 消息相关的:Protocol, IP Address, Port, Hop-byHop 标识;保存这些信息是为了收到与该 Reqeuest 消息对应的 Answer 消息后能够将 Answer 消息正确的转发出去; 3. 创建 Answer 消息: 消息: 当一个 Request 消息被本地处理后,必须按照如下规则创建并发送 Answer 消息: ? ? ? ? 从 Request 消息中拷贝 Hop-by-Hop 填入 Answer 消息; 将本地主机标识作为 Origin-Host AVP; Destination-Host 和 Destination-Realm AVPs 不允许出现在 Answer 消 息中; 加上 Result-Code AVP 指示成功与否.

? ? ? ?

如果 Reqeust 消息中包含了 Session-Id,那么 Answer 消息中也应该包 含该值; 在 Request 消息中的任何 Proxy-Info AVPs 都应原封不动的拷贝到 Answer 消息中; 'P' 位需要和 Request 消息中保持一致; End-to-End 需要和 Request 消息中保持一致;

4. 收到 Answer 消息: 消息: 当收到一个 Answer 消息时需要如下操作: ? ? 检查其 Hop-by-Hop,从 Pending Request 队列中找到与其一致的 Reqeust 消息,然后将 Reqeust 消息从 Pending Request 队列中删除; 如果是 Agent 收到 Answer 消息,Agent 需要将 Hop-by-Hop 替换为先 前保存的 Reqeust 中的 Hop-by-Hop,然后再将 Answer 消息转发出 去;

下图是 Diameter 节点 abc.example.com 经由 Relay Agent 发送一个 Request 消息给 xyz.example.net 并收到 Answer 消息的示意图,该 图主要为了说明 Hop-by-Hop 和 End-to-End 两个标识的作用:

Diameter 基础协议摘要
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 abc.example.com xyz.example.net StatusT R-Open R-Open Static or Dynamic statically dynamically Expiration time 0 10

? ?

?

Realm-Based Routing Table : 用于消息路由的数据配置,格式如下表:
Realm Name example example Application Identifier 16777250 16777272 Local Action RELAY RELAY Server Identifier abc.example.com xyz.example.net Static or Dynamic statically dynamically Expiration time 0 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:
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 Version Flags R P E T r r r r Application ID Hop by Hop ID End to End ID AVP[] ::: Message length Code

? ? ?

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:用来识别重复消息;该值在本地的一段时间内必须是 : 唯一的,传输过程中一直保持不变;目标主机会根据该值和 OriginalHost AVP 来判读是否是重复消息;

?

2) AVP header:
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 AVP code AVP flags V M P r r r r r AVP length Vendor ID (Optional) Data ::: 2 2 2 2 2 2 2 2 2 2 3 3 0 1 2 3 4 5 6 7 8 9 0 1

? ?

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


相关文章:
Diameter协议学习笔记一
Diameter协议学习笔记一_信息与通信_工程科技_专业资料。Diameter 协议学习笔记一 协议介绍 协议学习笔记一(协议介绍 协议介绍) 一、摘要: Diameter 协议主要为应用程...
自定义协议学习札记
HTTP协议学习笔记 10页 1下载券 Diameter协议学习笔记一 14页 免费喜欢...自定义协议学习札记 很奇怪一件事情:我们在逛淘宝的时候,看中了一件宝贝,我们...
EddyPro学习笔记
EddyPro学习笔记_计算机软件及应用_IT/计算机_专业资料...Tube length Tube inner diameter Nominal tube flow...©2014 Baidu 使用百度前必读 | 文库协议...
LTE学习笔记(非常经典!!!)
12、 DRA:Diameter Routing Agent,路由代理。LTE 信令网,采用大区组网方式,目 ...137、 RRC 协议的功能分为三大类: (1)对 NAS 层提供连接管理、消息传递(2)...
WITSML学习笔记二
, innerDiameter? , outerDiameter? , driftDiameter...三治三提学习笔记二 1页 免费 学习笔记2 43页 免费...©2014 Baidu 使用百度前必读 | 文库协议...
CAD学习笔记
(半径标注) DDI, *DIMDIAMETER(直径标注) DAN, *DIMANGULAR(角度标注) DCE,...我的CAD学习笔记 4页 免费©2014 Baidu 使用百度前必读 | 文库协议...
FIDIA 学习笔记
学习笔记之一 14页 免费 C 学习笔记 197页 2下载...(3)DIAMETER-- 实际刀具直径 , 如 10R5 就输入 ...©2014 Baidu 使用百度前必读 | 文库协议...
OCP协议学习标记
OCP 协议学习笔记(协议结构和协议格式) (2011-06-10 22:00:37) 转载 标签: 杂谈 ▼ 分类: 学习笔记 一、OCP 协议结构: OCP 协议是建立在 Diameter 基础...
Diameter协议.doc
Diameter协议.doc_IT/计算机_专业资料。Diameter协议Diameter 协议 2009-10-23 09:43 Diameter 协议 Diameter 协议族包括基础协议(Diameter Base Protocol)和各种应用...
CAD学习笔记
CAD学习笔记1 7页 1财富值如要投诉违规内容,请到百度...(半径标注) DDI , *DIMDIAMETER(直径标注) DAN ,...©2014 Baidu 使用百度前必读 | 文库协议...
更多相关标签: