3. Packet Format (分组格式)
恰好一个 RADIUS Accounting 分组封装在 UDP Data (UDP 数据) 字段 [4] 中, UDP Destination Port (UDP 目的端口) 字段指示 1813 (十进制).
生成应答时, 源端口与目的端口对调.
本备忘录记录 RADIUS Accounting 协议. RADIUS Accounting 的早期部署使用 UDP 端口号 1646, 与 "sa-msg-port" 服务冲突. RADIUS Accounting 的官方分配端口号为 1813.
下文给出 RADIUS 数据格式概要. 字段从左到右传输.
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Code | Identifier | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| Authenticator |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Attributes ...
+-+-+-+-+-+-+-+-+-+-+-+-+
Code (代码)
Code 字段占一个 octet (八位组), 标识 RADIUS 分组的类型. 当收到的分组 Code 字段无效时, 应将其静默丢弃.
RADIUS Accounting 的 Code (十进制) 分配如下:
| 值 | 含义 |
|---|---|
| 4 | Accounting-Request |
| 5 | Accounting-Response |
Identifier (标识符)
Identifier 字段占一个 octet, 用于匹配请求与应答. 若在短时间内来自同一 Client 源 IP 地址与源 UDP 端口且 Identifier 相同, RADIUS Server 可以据此检测重复请求.
Length (长度)
Length 字段占两个 octet. 指示分组长度, 包括 Code, Identifier, Length, Authenticator 以及 Attribute 字段. 超出 Length 字段范围的 octet 必须视为 padding (填充) 并在接收时忽略. 若分组短于 Length 字段所指示的长度, 则必须将其静默丢弃. 最小长度为 20, 最大长度为 4095.
Authenticator (认证器)
Authenticator 字段为十六 (16) 个 octet. 最高有效 octet 先传输. 该值用于在 Client 与 RADIUS accounting server 之间认证消息.
Request Authenticator (请求认证器)
在 Accounting-Request 分组中, Authenticator 值为 16 octet 的 MD5 [5] 校验和, 称为 Request Authenticator.
NAS 与 RADIUS accounting server 共享一个密钥 (secret). Accounting-Request 分组中的 Request Authenticator 字段包含按如下 octet 流计算的单向 MD5 散列: Code + Identifier + Length + 16 个零 octet + 请求属性 + shared secret (其中 + 表示拼接). 得到的 16 octet MD5 散列值存放在 Accounting-Request 分组的 Authenticator 字段中.
注意, Accounting-Request 的 Request Authenticator 不能采用与 RADIUS Access-Request 的 Request Authenticator 相同的方式计算, 因为 Accounting-Request 中没有 User-Password 属性.
Response Authenticator (响应认证器)
Accounting-Response 分组中的 Authenticator 字段称为 Response Authenticator, 包含按如下 octet 流计算的单向 MD5 散列: Accounting-Response 的 Code, Identifier, Length, 所应答的 Accounting-Request 分组中的 Request Authenticator 字段, 以及任意响应属性, 其后为 shared secret. 得到的 16 octet MD5 散列值存放在 Accounting-Response 分组的 Authenticator 字段中.
Attributes (属性)
属性可以出现多个实例; 在此情况下, 应保留相同类型属性的顺序. 不要求保留不同类型属性之间的顺序.