组织:中国互动出版网(http://www.china-pub.com/)
RFC文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook.htm)
E-mail:ouyang@china-pub.com
译者:刘伟娜(superwinner, starfield@xanet.edu.cn)
译文发布时间:2001-3-30
版权:本中文翻译文档版权归中国互动出版网所有。可以用于非商业用途自由转载,但必须保留本文档的翻译及版权信息。


Network Working Group                                          C. Rigney
Request for Comments: 2866                                    Livingston
Category: Informational                                        June 2000
Obsoletes: 2139



RADIUS(远程用户拨号认证系统)记帐协议
(RFC2866  ADIUS Accounting)


Status of this Memo

   This memo provides information for the Internet community.  It does
   not specify an Internet standard of any kind.  Distribution of this
   memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (2000).  All Rights Reserved.


摘要
本文描述了在网络接入服务器和共享的记帐服务器之间传送记帐信息的协议。
实现RADIUS记帐协议的注意事项
本文证明了RADIUS记帐协议。早期开发的RADIUS记帐协议使用的是端口号为1646的UDP端口,它和“sa-msg-port"服务互相冲突。为RADIUS协议正式分配的端口号为1813。

                    目  录

RADIUS(远程用户拨号认证系统)记帐协议 1
摘要 1
实现RADIUS记帐协议的注意事项 1
1.简介 2
1.1 必要的说明 2
1.2 术语 2
2.操作 2
2.1 代理 3
3.包格式 3
4.包的类型 4
4.1 记帐请求 4
4.2 记帐响应 4
5. 属性 5
5.1 记帐状态类型 6
5.2 记帐延迟时间 6
5.3 输入字节数 7
5.4 输出字节数 7
5.5 会话Id 7
5.6 授权 8
5.7 会话时间 8
5.8 输入数据包 8
5.9 输出包总数 9
5.10  记帐中止事件 9
5.11  多会话Id 10
5.12  记帐链路计数 10
5.13  属性列表 11
6. IANA(国际互联网分配的数字标准)因素 12
7. 安全因素 12
8. 更改记录 12
9.参考文献 12
10. 说明 13



1.简介
经营为众多的用户提供的串口线路和modem池会带来巨大的管理支持方面的需求。由于根据定义,modem池是通向外部世界的链路,因此它对安全、认证、记帐都有很高的要求。这些需求可以通过维护一个用户数据库来实现,该数据库包含认证(验证用户的名字和密码)和配置细节——为用户提供的服务的类型(如:SLIP,PPP,telnet,rlogin等)。
RADIUS(远程用户拨号认证系统)文档【2】详细说明了用于认证和授权的RADIUS协议。本文扩展了RADIUS协议的应用,使其包括了从网络接入服务器给RADIUS记帐服务器传递信息的应用。
本文废弃了RFC 2139【1】。它与RFC 2139之间的差别的概要在附录“更改记录”中可以找到。
RADIUS记帐协议的主要特征如下:
客户/服务器模式
网络接入服务器是RADIUS记帐服务器的客户端。客户端负责将用户的记帐信息传递给指定的RADIUS记帐服务器。
RADIUS记帐服务器负责接收记帐请求,并给客户端返回一个响应信息,表明记帐请求被成功的接收。RADIUS记帐服务器可以作为其他类型的记帐服务器的代理。
网络安全
客户端与RADIUS记帐服务器之间的交互是通过共享密钥的使用来鉴别的,这个共享密钥根本不会通过网络传送。
协议的可扩充性
所有的事务都是由不同长度的属性-长度-值的三元组构成的。新的属性值的加入不会影响到原有协议的执行。
1.1 必要的说明
本文中的关键词"MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",   "SHOULD", "SHOULD NOT", "RECOMMENDED",  "MAY", 以及"OPTIONAL"与RFC 2119【3】中的描述的意义是相同的。这些关键词意义与其是否大写无关。
1.2 术语
本文使用了以下的术语:
服务  网络接入服务器为拨入用户提供的某种服务,如:PPP或者Telnet。
会话  网络接入服务器为拨入用户提供的每一个服务都会建立一个会话。会话的开始给出了最初提供服务的位置,会话的最后给出了服务结束的位置。如果网络接入服务器支持的话,一个用户可以有多个并行或者串行的会话。对于每一个会话,都会产生一个独立的H会话ID(Acct-Session-ID)。
直接丢弃
      这就是说应用程序不对包进行任何处理就直接丢弃。SHOULD的执行提供了记录错误的能力,其中包括了被直接丢弃的包的内容;而且,SHOULD会记录下统计计数器中的事件。
2.操作
当一个客户端的配置采用RADIUS记帐协议时,在开始提供服务的时候它会生成一个记帐包,该记帐包描述了正在提供的服务的类型以及为之提供服务的用户,它将被送至RADIUS记帐服务器。记帐服务器会返回一个表明该记帐包已经收到的应答。服务中止时,客户端会产生一个记帐中止数据包,该数据包中描述了提供的服务的类型以及随机统计报表(如:服务所用的时间、输入输出的字节数或者输入、输出包的情况)。该数据包会被送至RADIUS记帐服务器,服务器会返回一个表示该数据包已经收到的应答。
记帐请求(无论是开始记帐还是中止记帐的请求)是通过网络提交给RADIUS记帐服务器的。最好是让客户端使用某种形式的后退机制,使得客户端不断的发送记帐请求包直到收到应答信息为止。如果在一段时间内没有收到返回的响应信息,记帐请求就会被重发几次。如果主服务器坏掉或者是无法到达客户端可以向后备服务器转发记帐请求信息。可以规定在对主服务器重试失败一定的次数之后或者是采用循环调度算法的方式允许使用后备服务器。重试和放弃算法是目前正在研究的一个课题,在本文中就不再赘述了。
RADIUS记帐服务器可以向其他的服务器发出请求,来满足记帐请求,被请求的服务器充当一个客户端。
如果RADIUS记帐服务器不能成功的处理记帐包,服务器一定不能(MUST NOT)给客户端发送应答信息。
2.1 代理
参阅“RADIUS”RFC【2】中关于RADIUS代理的描述,RADIUS记帐代理服务器的工作方式与RADIUS代理服务器是相同的,如下例所示。
1. NAS向转发服务器发送记帐请求。
2. 转发服务器将记帐请求记录下来(如果必要的话),在其他的代理服务器的状态属性之后增加自己的代理状态信息(如果必要的话),更新鉴别码,将这些请求转发给远程服务器。
3. 远程服务器将记帐请求记录下(如果必要的话),将所有的代理状态属性按顺序原封不动的从请求数据报复制到响应数据包,把记帐响应送给转发服务器。
4. 转发服务器剥离最后的代理状态(如果在第二步加了的话),更新响应鉴别码,将记帐响应发给NAS。
转发服务器不得更改当前数据包中已经存在的代理状态或者类属性。
转发服务器可能以通过(pass through)的方式完成转发的功能,也就是说,转发服务器一收到数据包就重新发送;或者转发服务器自身完成重发功能,例如:在转发服务器和远程服务器之间的网络链接与网络接入服务器(NAS)和转发服务器之间的链接相比有很大不同的情况。
当代理服务器被用来执行转发功能的时候,要特别的注意确保转发算法是健壮的、可扩展的。
3.包格式
严格的讲,RADIUS记帐协议包应该位于UDP数据域【4】,它的目标端口号是1813(十进制数)。
当产生一个应答的时候,源端口和目的地址端口互换。
本文定义了RADIUS协议。早期的RADIUS记帐是通过端口号为1646的UDP端口来实现的,它和“sa-msg-port”服务相冲突。为RADIUS记帐服务正式分配的端口号是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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     编码      |  标识符  |              长度               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                            |
   |                          鉴别码                            |
   |                                                            |
   |                                                            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  属性 ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-
编码
编码域是一个八位字节,用来标识RADIUS包的类型。当收到的包的编码域非法时,该数据包将会被自动丢弃。
RADIUS记帐编码分配如下:
4 记帐请求
5 记帐相应
标识符
标识符域是一个八位字节,用于请求和应答的匹配。如果请求包具有相同的源ip地址、源UDP端口号,并且在很短的一段时间内出现了相同的标识符,RADIUS就可以检测到重复的请求。
长度
长度域占有两个八位的字节。它表明了该包所包含的编码、标识符、长度、鉴别码以及属性域的总长度。在长度域限定的范围之外的八位字节必须作为填充字节,在接收时不予处理。如果包的实际长度小于长度域中给出的值,该包必须被直接丢弃。包的最小长度是20,最大长度是4095。
鉴别码
鉴别码域占有16个八位的字节。最重要的字节先传输。该域的值用来鉴别客户端和RADIUS记帐服务器之间的信息。
请求鉴别码
在记帐请求包中,鉴别码的值是一个占有16个八位字节的MD5【5】校验和,称作请求鉴别码。
网络接入服务器(NAS)和RADIUS记帐服务器共享一个密钥。记帐请求包中的鉴别码中包含对一个由编码+标识符+长度+16个为0的八位字节+请求属性+共享密钥(在这里,+表示将各个字符连接起来)所构成的八位字节流进行某种方式的MD5哈希计算得到的代码。这个占有16个8位字节的MD5哈希值被存储到记帐请求包的鉴别码域中。
注意记帐请求中的请求鉴别码不得与RADIUS接入请求的请求鉴别码的生成方式相同,因为在记帐请求中没有用户口令这一属性。
响应鉴别码
在记帐响应包中的鉴别码域称作响应鉴别码。它包含对一个由记帐响应编码、标识符、长度、来自于将要被应答的记帐请求包的请求鉴别码以及响应属性(如果有的话)、共享密钥构成的八位字节流进行某种方式的MD5哈希计算得到的代码。这个占有16个8位字节的MD5哈希值被存储到记帐响应包的鉴别码域中。
属性
属性可能会包含多个实例,在这种情况下同种类型的各个属性的排列应当保持一定的顺序。但是,不同类型的各个属性的排列顺序是任意的。
4.包的类型
RADIUS包的类型是由位于包的第一个八位字节的编码域的值决定的。
4.1 记帐请求
描述
记帐请求包是由客户端(典型的情况是网络接入服务器或者它的代理)送到RADIUS记帐服务器,并将用于为某个用户提供的某种服务提供记帐的信息通知RADIUS记帐服务器。客户端发送一个将编码域置为4(记帐请求)的RADIUS数据包。
一收到记帐请求,如果服务器能够成功的记录下记帐包的话,必须马上发送一个记帐响应应答;如果记录记帐包失败,不得发送任何应答。在RADIUS接入请求和接入许可包中的任何有效属性出了一下的几种属性:用户密码、CHAP密码、应答信息、状态不能出现在RADIUS记帐请求包中之外,其他的属性在RADIUS记帐请求包中都是有效的。在RADIUS记帐请求中必须包含NAS-IP-Address(网络接入服务器的IP地址)或者NAS-Identifer(网络接入服务器标识符)。在请求包中还应当包含NAS-port(网络接入服务器端口号)或者NAS-Port-Type(网络接入服务器端口类型)属性,或者两者都包含;除非该服务不会设计任何端口或者网络接入服务器(NAS)对它的各个端口不作区分。
如果记帐请求包包含了一个Framed-IP-Address,该属性中必须包含用户的IP地址。如果接入许可使用了一个专门的值以告诉网络接入服务器(NAS)为用户分配一个IP地址,记帐请求中的Framed-IP-Address(如果有的话)必须包含实际分配给用户的IP地址。
记帐请求包的格式概况如下所示。各个域是自左向右传输的。
   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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     编码      |   标识符   |              长度             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |                        请求鉴别码                             |
   |                                                               |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  属性...
   +-+-+-+-+-+-+-+-+-+-+-+-+-
编码
4代表记帐请求
标识符
当属性域的内容发生改变或者是已经收到当前请求的有效的应答,标识符域必须改变。在内容不发生任何改变的情况下的重发,标识符必须保持不变。
需要注意的是,如果记帐请求属性中包括访问延迟时间,该包重发时,访问延迟时间值会被更新。同时也改变了属性域的内容,需要新的新的标识符和请求鉴别码。
请求鉴别码
记帐请求的请求鉴别码是一个占有16个8位字节的MD5哈希值,该值的计算方法已在上述的“请求鉴别码”中给出。
属性
属性域的长度各不相同,其中包含着一系列的属性。
4.2 记帐响应
描述
记帐响应包是由RADIUS记帐服务器发给客户端的,用来通知客户端记帐请求已被接收,并且成功的记录下来。如果记帐请求被成功的记录下来,RADIUS记帐服务器必须发送一个编码域被置为5(记帐响应)的数据包。客户端一收到记帐响应,标识符域就会去和一个等待应答的记帐请求相匹配。响应鉴别码域必须含有对等待应答的记帐请求的正确响应。无效的数据包会被直接丢弃。
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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      编码      |   标识符   |             长度            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   |                           响应鉴别码                          |
   |                                                               |
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  属性 ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-
编码
5代表记帐响应
标识符
标识符域是对引起这次响应的记帐请求的标识符域的一个拷贝。
响应鉴别码
记帐响应的响应鉴别码是一个占有16个8位字节的MD5哈希值,该值的计算方法已在上述的“响应鉴别码”中给出。
属性
属性域的长度各不相同,它可能包含了一系列的零或者更多的属性。
5. 属性
RADIUS属性包括有请求和响应的鉴别、授权、记帐方面的详细信息。
有些属性可能会不止一次的被包括进去。这样做的结果是该属性在每个属性域中都得到详尽的描述。
属性列表的结束是由RADIUS包的长度来决定的。
属性域格式的概况如下所示。各个域是自左向右发送的。
    0                   1                   2
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      类型      |     长度     |  值 ...
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
类型
类型域是一个八位字节。到目前为止,RADIUS类型域的值在最新的“Assigned Number”RFC【6】中给出了详细的描述。192-223是留给实验使用的,224-240用于描述执行的细节,241-255是预留的,不能使用。本文中涉及到一下的数值:
1-39  (参考RADIUS document【2】)
40 记帐状态类型
41 记帐延迟时间
42 输入字节数
43 输出字节数
44 会话ID
45 授权
46 会话时间
47 输入包总数
48 输出包总数
49 记帐中止事件
50 多会话ID
51 记帐链路计数
60+     (参考RADIUS document【2】)
长度
长度域占有一个字节,表示包括类型、长度、属性值在内的属性的长度。如果收到的记帐请求属性的长度无效,整个请求必须直接丢弃。

属性值域有零个或者更多的字节,包含有属性信息的详细描述。值域的格式和长度是由类型和长度域决定的。
注意,在RADIUS中没有任何的类型是以NUL(十六进制的00)结尾的。在RADIUS中特别是“text”和“string"类型不能以NUL(十六进制的00)结尾。属性具有长度域,因而不必使用中止符号。文本(text)含有用UTF-8编码的10646【7】的特性,字符串(string)含有8位二进制数据。服务器和客户端必须能够处理嵌入的null。
在使用C语言编写RADIUS程序时,注意不要使用strcpy()来处理字符串。
值域的格式是五种数据类型之一。注意:类型“text”是类型“string"的一个子集。
text     1-253个字节,包含UTF-8编码的1046【7】特性。长度为零的文本(text)不必发送;取而代之的是,整个属性域会被直接忽略。
string   1-253个字节,包含二进制数据(数值值从0到十进制数255)。长度为零的字符串(string)不必发送;取而代之的是,整个属性域会被直接忽略。
address  32位的数值,最重要的字节优先。
integer  32位的无符号数,最重要的字节优先。
time    32位的无符号数,最重要的字节优先——seconds since 00:00:00 UTC, January 1, 1970。标准的属性是不使用该数据类型的,但是在这里提到该数据类型主要是以备在将来的属性中使用。
5.1 记帐状态类型
描述
该属性表明当前的记帐请求是表示用户服务开始(start)还是结束(stop)。
它可能被客户端通过指出记帐开始的方式来表示开始记帐(例如:在启动之前),或者通过指明记帐完成的方式来结束记帐(例如:在预定的重新启动之前)。
记帐状态类型的格式概况如下所示。各个域是按照自左向右的顺序发送的。
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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      类型      |     长度     |             值
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                  值(cont)         |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
类型
40表示记帐状态
长度
6

值域占有四个字节。
1 Start(开始)
2 Stop(停止)
3 Interim-Update(过渡更新)
7 Accounting-On(开始记帐)
8 Accounting-Off(结束记帐)
9-14  Reserved for Tunnel Accounting(为隧道记帐保留)
15 Reserved for Failed(为记帐失败预留)
5.2 记帐延迟时间
描述
该属性表明客户端试图发送该记录所用的时间。用该数据包到达服务器端的时间减去记帐延迟时间就可以知道生成该数据包的大概时间。(网络传输时间被忽略了)。
注意,记帐延迟时间的改变会引起鉴别码的变化;详细资料参见上面关于鉴别码的讨论。
记帐延迟时间的格式概况如下所示。各个域是按照自左向右的顺序发送的。
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      类型      |      长度     |             值
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
               值 (cont)         |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
类型
41代表记帐延迟时间
长度
6

值域共占有四个字节
5.3 输入字节数
描述
该属性表明在提供用户所需的服务的过程中从端口接收到的字节总数。该属性只有在要求停止记帐的记帐请求数据包中才会出现。
输入字节数的基本格式如下所示。各个域是自左向右传送的。
   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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    类型    |   长度    |             值
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
               值 (cont)         |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
类型
42代表输入字节数
长度
6

值域所占的空间是四个字节
5.4 输出字节数
描述
该属性表明在交付用户所需的服务的过程中发送给端口的字节总数。该属性只有在要求停止记帐的记帐请求数据包中才会出现。
输出字节数的基本格式如下所示。各个域是自左向右传送的。
   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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    类型    |   长度    |             值
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
               值 (cont)         |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
类型
43代表输入字节数
长度
6

值域所占的空间是四个字节
5.5 会话Id
描述
该属性是便于在日志文件中的开始和停止记录匹配的唯一的记帐ID。对于一个给定的会话,它的开始和停止记录必须有相同的记帐会话Id。记帐请求包必须有一个记帐会话Id。接入请求包可能含有记帐会话Id;如果接入请求包中含有记帐会话Id的话,NAS(网络接入服务器)在为该会话产生的记帐请求数据包中必须使用相同的记帐会话Id。
记帐会话Id应当含有UTF编码的10646【7】字符。
例如:有一种实现方式是使用一个8位的16进制数表示,该数的前两位每次重新启动后加一(重启256次之后循环),后六位数字从0到2^24-1,大约共一千六百万,用来计数重启之后登录的用户的个数,
记帐会话Id的属性的大致格式如下。各个域是自左向右传送的。
  0                1                 2
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     类型     |     长度     |  文字 ...
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
类型
44代表记帐会话Id
长度
>=3
字符串
字符串域应当是一个UTF-8编码的10646【7】字符串
5.6 授权
描述
该属性可能包含在记帐请求数据包中,用来说明是怎样给用户授权的:是通过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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      类型      |      长度     |             值
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 值 (cont)         |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
类型
45表示记帐包的授权属性
长度
6

值域占四个字节的空间
1 RADIUS
2 Local
3 Remote
5.7 会话时间
描述
该属性表明用户接受服务的时间。这个属性只在记帐状态类型为记帐停止的记帐请求数据包中出现。
该属性的大致格式如下。各个域是自左向右传送的。
   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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      类型      |      长度     |             值
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 值 (cont)         |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
类型
46代表会话时间
长度
6

值域共占四个字节的空间
5.8 输入数据包
描述
该属性表明在为某个用户提供服务的过程中从端口接收到的数据包的总数。该属性只能在记帐状态为记帐停止的数据包中出现。
记帐输入数据包的大致格式如下。各个域是自左向右传输的。
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      类型      |      长度     |             值
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 值 (cont)         |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
类型
47代表输入包总数
长度
6

值域共占四个字节的空间
5.9 输出包总数
描述
该属性表明在给某个定的用户提供服务的过程中给端口发送的数据包的总数。这个属性只能在记帐状态类型为记帐停止的记帐请求数据包中出现。
记帐输出包属性的大致格式如下。各个域是自左向右传送的。
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      类型      |      长度     |             值
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 值 (cont)         |
        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
类型
48代表输出包
长度
6

值域总共占有四个字节的空间
5.10  记帐中止事件
描述
该属性表明对话是怎样中止的。这属性只能在记帐状态为记帐停止的记帐请求数据包中出现。
该属性的大致格式如下。各个域是自左向右传送的。
    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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |      类型      |      长度     |             值
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                 值 (cont)         |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
类型
49代表记帐中止事件
长度
6

值域共占四个字节的空间。包含一个表示记帐中止事件的数字。数字和事件的对应关系如下:
1 用户请求
2 数据丢失
3 服务丢失
4 休息时间到
5 会话超时
6 管理员重置
7 管理员重启
8 端口错误
9 NAS(网络接入服务器)错误
10 NAS请求
11 NAS重启
12 端口不再需要
13 端口被抢占
14 端口挂起
15 服务难以获得
16 回调
17 用户错误
18 主机请求
中止事件描述如下:
用户请求    用户请求中止该项服务。例如:用LCP(连接控制协议)中止或者退出。
数据丢失    DCD(数据载波检测)在端口处丢失。
服务丢失    无法再提供服务;例如:用户与主机之间的连接中断。
休息时间到  休息计数器满。
会话超时    最大会话时间长度已到
管理员重置  管理员从新分配端口或者会话
管理员重启  管理员结束NAS(网络接入服务器)的服务,例如:在重新启动NAS之前。    
端口错误    NAS(网络接入服务器)在端口检测到错误,这就要求中止会话。
NAS请求    NAS(网络接入服务器)不是由于故障而要求中止会话,具体原因不在这里另外列举。
NAS重启   NAS(网络接入服务器)结束会话,以进行非管理性的重启(“系统性事故”——“crash”)。
端口不再需要  NAS结束会话是因为资源的使用已经低于最低水平线了。(例如:带宽需求算法判定该端口已经不再需要了)。
端口被抢占  NAS(网络接入服务器)结束会话以便于将端口分配给优先级更高的应用。
端口被挂起  NAS(网络接入服务器)结束对话以便于挂起一个虚拟会话。
服务难以获得  NAS(网络接入服务器)无法提供要求的服务。
回调        NAS(网络接入服务器)中止当前的会话,以便于为新的会话执行回调操作。
用户错误    用户的输入有错,导致中止会话。
主机请求    登录主机正常中止会话。
5.11  多会话Id
描述
该属性是唯一的一个便于在同一个日志文件中的多个相关的会话联系起来的记帐ID。连接起来的每个会话都有自己唯一的会话Id,但是它们有相同的多会话Id。强烈建议多会话Id使用UTF-8编码的10646【7】字符。
该数性的大致格式如下。各个域是自左向右传输的。
0                   1                   2
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     类型     |     长度     |  字符串 ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
类型
50代表多会话Id
长度
>=3
字符串
字符串域应当使用UTF-8编码的10646字符
5.12  记帐链路计数
描述
该属性给出了生成记帐记录是所知道的一个给定的多链路会话的链路总数。NAS(网络介入服务器)在所有的可能含有多条链路的记帐请求中都有可能含有记帐链路计数这个属性。
该属性的大致格式如下。各个域是自左向右传输的。
   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
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     类型      |      长度     |             值
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                值(cont)           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
类型
51代表记帐链路数
长度
6

值域占四个字节。其内容是在多会话中目前所知道的链路的数目。
它可能会被用来便于记帐服务器知道到何时为止给定的多链路会话的所有记录都已经到了。当记帐服务器收到的记帐请求的状态类型=stop(停止),而且具有相同的多会话Id、唯一的会话Id的会话记录的总数等于目前知道记帐链路计数的最大值时,多链路会话的所有记帐停止请求已经全部收到了。
下面给出一个8个记帐请求的例子,以便于理解。为了清楚起见,只给出了相关的属性,但是,其他的属性也是在记帐请求中存在的。
多会话Id     会话Id    状态类型     链路计数
"10"          "10"       start           1
"10"          "11"       start           2
"10"           "11"      Stop           2
    "10"          "12"      Start            3
"10"           "13"      Start           4
"10"           "12"      Stop           4
"10"           "13"      Stop           4
   "10"            "10"      Stop           4
5.13  属性列表
下表中给出了在记帐请求包中可能会遇到的属性的概览。除了代理状态以及服务提供商的信息(可能有)之外,没有其他的属性会在响应数据包中出现。

#                属性
0-1              用户名
0 用户密码
0 CHAP密码
0-1              网络接入服务器(NAS)IP地址【Note 1】
0-1              网络接入服务器(NAS)端口
0-1              服务类型
0-1              帧协议
0-1              帧IP地址
0-1              帧IP子网掩码
0-1              帧路由
0+               过滤器编号
0-1              帧MTU(移动式测试装置)
0+               帧压缩
0+               登录主机IP
0-1              登录服务
0-1              登录TCP端口
0 应答消息
0-1              回调数值
0-1              回调Id
0+               帧路由
0-1              IPX(以太网的一个协议)网络帧
0 状态
0+               类
0+               服务提供商信息
0-1              会话超时
0-1              空闲时间到
0-1              中止动作
0-1              被叫终端的IP
0-1              呼叫终端的IP
0-1              网络接入服务器(NAS)标识符
0+               代理状态
0-1              登录局域网运输协议(LAT)服务
0-1              登录局域网运输协议(LAT)节点
0-1              登录局域网运输协议(LAT)组
0-1              用AppleTalk协议(mac机所用的一种网络协议)链接的帧
0-1              AppleTalk网络帧
0-1              AppleTalk区域的帧
1 记帐状态类型
0-1              记帐延迟时间
0-1              输入字节总数
0-1              输出字节总数
1                 记帐会话Id
0-1              授权
0-1              会话时间
0-1              输入数据包
0-1              输出数据包
0-1              记帐中止事件
0+               多会话Id
0+               链路计数
0 CHAP难题
0-1              网络接入服务器(NAS)端口类型
0-1              端口局限
0-1              登录局域网运输协议(LAT)接口
【Note 1】记帐请求包中必须含有一个网络接入服务器(NAS)IP地址或者一个网络接入服务器标识符(或者两者都有)。
下表中给出了上面的表格中输入的定义。
0  禁止该属性存在
0+   可能存在该属性的0个或者更多个实例
0-1  可能有零个或者一个该属性存在
1 刚好有一个属性存在,而且该属性是必须的
6.  IANA(国际互联网分配的数字标准)因素
在本文中给出的包的类型编码、属性类型、属性值的定义都已经被国际互联网分配的数字标准(IANA)注册在RADIUS名称范围内,并且在RFC2865【2】的“IANA 因素”部分给出了详细的描述。
7. 安全因素
安全问题已经在记帐请求、记帐响应中的关于鉴别码的部分中讨论过了。采用的是一个从不再网络上传输的公共密钥的形式。
8. 更改记录
* 用UTF-8编码代替US-ASCII编码。
* 增加了关于代理的附加注释。
* 要求帧IP地址应当包含用户的真正的IP地址。
* 如果会话ID是在接入请求中发送的,它必须在该会话记帐请求中也使用这个ID。
* 在记帐状态类型中的添加了一些新值。
* 增加一个关于IANA因素的部分。
* 更新了参考文献。
* 将文本字符串定义成字符串的字集,从而更加明确了UTF-8编码的使用。
9.参考文献
[1]  Rigney, C., "RADIUS Accounting", RFC 2139, April 1997.
   [2]  Rigney, C., Willens, S., Rubens, A. and W. Simpson, "Remote
        Authentication Dial In User Service (RADIUS)", RFC 2865, June
        2000.
   [3]  Bradner, S., "Key words for use in RFCs to Indicate Requirement
        Levels", BCP 14, RFC 2119, March, 1997.
   [4]  Postel, J., "User Datagram Protocol", STD 6, RFC 768, August
        1980.
   [5]  Rivest, R. and S. Dusse, "The MD5 Message-Digest Algorithm", RFC
        1321, April 1992.
   [6]  Reynolds, J. and J. Postel, "Assigned Numbers", STD 2, RFC 1700,
        October 1994.
   [7]  Yergeau, F., "UTF-8, a transformation format of ISO 10646", RFC
        2279, January 1998.
   [8]  Alvestrand, H. and T. Narten, "Guidelines for Writing an IANA
        Considerations Section in RFCs", BCP 26, RFC 2434, October 1998.
10. 说明
RADIUS协议和RADIUS记帐协议最初是由利文斯敦(Livingston)公司的Steve
   Willens为他们的PortMaster系列网络接入服务器设计的。

RFC2866  RADIUS(远程用户拨号认证系统)记帐协议            RFC2866  RADIUS Accounting




1
RFC中文翻译计划