3. Diameter 头部
3. Diameter 头部
Diameter 头部格式的摘要如下所示. 字段按网络字节序传输.
0 1 2 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 | Message Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Command Flags | Command Code |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Application-ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Hop-by-Hop Identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| End-to-End Identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| AVPs ...
+-+-+-+-+-+-+-+-+-+-+-+-+-
Version (版本)
此版本字段必须设置为 1 以表示 Diameter 版本 1.
Message Length (消息长度)
消息长度字段为三个八位字节, 表示包括头部字段和填充后的 AVP 在内的 Diameter 消息的长度. 因此, 消息长度字段始终是 4 的倍数.
Command Flags (命令标志)
命令标志字段为八位. 分配了以下位:
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|R P E T r r r r|
+-+-+-+-+-+-+-+-+
R(equest) (请求)
如果设置, 则消息是请求. 如果清除, 则消息是应答.
P(roxiable) (可代理)
如果设置, 则消息可以被代理、中继或重定向. 如果清除, 则消息必须在本地处理.
E(rror) (错误)
如果设置, 则消息包含协议错误, 并且消息将不符合此命令描述的 CCF. 设置了 'E' 位的消息通常称为错误消息. 此位不得在请求消息中设置 (参见第 7.2 节).
T(Potentially retransmitted message) (可能重传的消息)
此标志在链路故障切换过程后设置, 以帮助删除重复请求. 它在重新发送尚未确认的请求时设置, 作为由于链路故障可能出现重复的指示. 此位必须在首次发送请求时清除; 否则, 发送方必须设置此标志. Diameter 代理只需要关心它们基于单个接收到的请求发送的请求数; 无需跟踪其他实体的重传. 接收到设置了 T 标志的请求的 Diameter 代理必须在转发的请求中保持 T 标志设置. 如果已经为较早的消息接收到错误应答消息 (例如, 协议错误), 则不得设置此标志. 只有在没有从服务器收到请求的应答并且请求已再次发送的情况下才能设置. 此标志不得在应答消息中设置.
r(eserved) (保留)
这些标志位保留供将来使用; 它们必须设置为零并由接收方忽略.
Command Code (命令代码)
命令代码字段为三个八位字节, 用于传达与消息关联的命令. 24 位地址空间由 IANA 管理 (参见第 3.1 节). 命令代码值 16,777,214 和 16,777,215 (十六进制值 FFFFFE-FFFFFF) 保留供实验使用 (参见第 11.2 节).
Application-ID (应用 ID)
Application-ID 为四个八位字节, 用于标识消息适用于哪个应用. 应用可以是认证应用、计费应用或供应商特定应用.
头部中 Application-ID 字段的值必须与消息中包含的任何相关 Application-Id AVP 的值相同.
Hop-by-Hop Identifier (逐跳标识符)
逐跳标识符是一个无符号 32 位整数字段 (以网络字节序), 有助于匹配请求和应答. 发送方必须确保请求中的逐跳标识符在给定连接上的任何给定时间都是唯一的, 并且它可以尝试确保该数字在重启后也是唯一的. 应答消息的发送方必须确保逐跳标识符字段包含在相应请求中找到的相同值. 逐跳标识符通常是单调递增的数字, 其起始值是随机生成的. 接收到的具有未知逐跳标识符的应答消息必须被丢弃.
End-to-End Identifier (端到端标识符)
端到端标识符是一个无符号 32 位整数字段 (以网络字节序), 用于检测重复消息. 重启后, 实现可以将高位 12 位设置为包含当前时间的低位 12 位, 并将低位 20 位设置为随机值. 请求消息的发送方必须在每条消息上插入唯一标识符. 标识符必须在至少 4 分钟的时间内保持本地唯一, 即使在重启后也是如此. 应答消息的发起方必须确保端到端标识符字段包含在相应请求中找到的相同值. 端到端标识符不得被任何类型的 Diameter 代理修改. Origin-Host AVP (第 6.3 节) 和此字段的组合用于检测重复项. 重复请求应导致传输相同的应答 (除了逐跳标识符字段和可能存在的任何路由 AVP 之外), 并且它们不得影响在处理原始请求时设置的任何状态. 要在本地消费 (参见第 6.2 节) 的重复应答消息应被静默丢弃.
AVPs
AVP 是封装与 Diameter 消息相关的信息的一种方法. 有关 AVP 的更多信息, 请参见第 4 节.