RFC3588_Diameter_Description_of_the_Document_Set

英文在线参考:https://tools.ietf.org/html/rfc3588

完整中文版下载:http://download.csdn.net/detail/hopelin66/7048073#comment  

下文我自己弄的(support:有道翻译 百度翻译)

 

Page9:
1.1---------------------------------
Diameter Protocal-扩展的信用度控制协议
协议作用
--交付AVP(属性-值对)
--能力协商
--错误通知
--通过添加新的可扩展的AAAREQ
(Authentication, Authorization and Accounting REQ 
认证、授权和计费 请求)。
--提供基本服务,例如用户会话和计费处理

Diameter通过AVP的形式交付所有的数据。
一些AVP值由diameter本身使用;
而其他交付的数据采用diameter协议与特定应用程序联系;
diameter数据报可以添加任意的AVPs。
只要需要的AVPs列入而明确不需要的AVPs不列入。
diameter使用AVPs支持了以下所需特性

--传输用户鉴别信息,使diameter服务端能够鉴别用户。
--传输服务授权信息,使客户端和服务端节点能够决定用户的访问请求应该被授予。
--交换使用资源信息,可用于计费目的,容量预期等
--在服务层次的中继、代理以及重定向diameter数据报

diameter基础协议为AAA协议提供最简单需求模型,因为需要AAAREQ,
基础协议可能仅仅用于计费目的或者用于diameter应用程序,
例如移动ipv4或网络接入;在新的应用中程序中diameter基础
协议通过增加新的命令或AVPs可被扩展使用。这个时候diameter
的重点是网络接入和计费应用程序。一个通用的AAA协议被
许多没有装备diameter功能模块的应用程序使用,因此,
一些新应用程序的设计者在使用diameter之前需要了解他们的需求。

任何结点都可以发起一个请求。在一定程度上,diameter 是一个点
对点的协议,在这份文件中,一个diameter客户端是网络访问控制
边缘设备,例如网络访问服务器(NAS)或外地代理(FA),一个diameter 
客户端为用户生成请求认证、授权、计费服务diameter数据报。一个
diameter代理是处理否决或批准消息在本地结点。代理包括proxies、
重定向、中继代理。一个diameter服务端执行为用户鉴定或授权。一个
diameter结点可能是某些请求的代理兼服务器。

diameter协议也支持服务器发起消息,例如请求对特定用户终止服务。
--------------------------------------------------------
综上所述,该协议规范文件为AAA定义了基础协议说明书,包括计费支持。
移动IPv4和网络访问服务器请求 文件描述了使用该基础规范认证申请、
授权和计费。

1.2-------------------------------------------------------
扩展性方法
被设计为可扩展的diameter协议,使用了几种机制:
--定义新的AVP值
--创建新的AVP值
--创建新的认证/授权应用
--创建新的计费应用
--应用认证程序

重利用现有的AVP值 、AVPS,diameter应用是很推荐的,重用
重利用简化的标准化和实施和避免潜在的互操作问题。对于指令码
的重利用:新的指令码只能由IETF 共识创建。
----------------------------------------------
page12
--添加新的AVPs的命令,有"M"bit set
--需要一个命令有满足请求的不同数量的来回(例如应用foo有需要
  一个来回得到命令,但是新的应用bar有个需要两个来回才能完成
  的命令)
--为使用应用,增加支持认证方法请求定义的新AVPs。自从一个新的
  EAP认证方法能支持diameter不能需要新的AVPs,增加的EAP方法
  不需要创建新的认证应用。

创建一个新的应用需要卡最新的方法,一个
实现可以在程序中任意添加非强制性的AVP的任何命令定义,
包括特定于供应商的AVPS不需要定义一个新的应用程序。详情参阅
第11.1.1

为了证明一个新的应用程序标识符的分配是否合法,
diameter应用程序必须定义一个命令码,或添加新的
强制性AVP的ABNF(扩展巴克斯范式)-https://www.rfc-editor.org/search/rfc_search_detail.php?title=abnf&pubstatus%5B%5D=Any&pub_date_type=any

预期的AVPs一定要被定义在ABNF语法里面,如果diameter应用有计费需求
在diameter计费的消息报中一定要有指定的AVPs。然而,仅仅因为一个新的认证应用ID是必需的,不
意味着一个新的计费应用ID是必需。

如果有可能,一个新的diameter应用应该被用已有的diameter AVPs。
为了避免大量定义的AVPs具有相似的信息。
---------------------------------------------
page27
图2描述了网络访问服务器作为接入设备为用户 bob@example.com
发布了一条请求。在发布请求前,由接入设备(NAS)通过路由查询关键字
example.com以决定消息是否被终极到DRL(一个diameter中继).
接着DRL执行同样路由操作,并将消息中继给example.com的归属Diameter
服务器(HMS),归属服务器判断该请求可以在本地处理,则进行对该请求的认证和/或授权,并返回
应答。该应答通过保存的事务状态,被路由回接入设备。
由于中继不执行任何应用级别的程序,它们提供的中继服务可以用于所有Diameter应用,因此它们
必须广播中继应用标识符。

第一图为rfc3588的原文样例。第二图为我根据自己的理解修改过的

/*
   Diameter HEAD(网络字节序(i.e.,大端模式)    +AVPs
    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: 01| Message Length :字节数(header+body )        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | command flags |                  Command-Code                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                         Application-ID                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      Hop-by-Hop Identifier                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                      End-to-End Identifier                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  AVPs ...
   +-+-+-+-+-+-+-+-+-+-+-+-+-

   AVP HEAD(网络字节序(i.e.,大端模式)    +Data
    0                   1                   2                   3   /decimal十进制
    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 /十进制
   |-------0-------|-------1-------|-------2-------|-------3-------|第/byte字节
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                           AVP Code                            |--4字节
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |V M P r r r r r|                  AVP Length                   |--4字节
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                        Vendor-ID (opt)                        |--4字节
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    Data ...
   +-+-+-+-+-+-+-+-+

      grouped  AVP样例eg:
          0       1       2       3       4       5       6       7    第/byte字节
       +-------+-------+-------+-------+-------+-------+-------+-------+
     0 |     Example AVP Header (AVP Code = 999999), Length = 468(总)  |-----Father:AVPHEAD(缺省Vendor-ID)-总范围为4字节整数倍
       +-------+-------+-------+-------+-------+-------+-------+-------+
     8 |     Origin-Host AVP Header (AVP Code = 264), Length = 19(子)  |---sun avp:Origin-Host--该范围填充为4字节整数倍
       +-------+-------+-------+-------+-------+-------+-------+-------+
    16 |  'e'  |  'x'  |  'a'  |  'm'  |  'p'  |  'l'  |  'e'  |  '.'  |
       +-------+-------+-------+-------+-------+-------+-------+-------+
    24 |  'c'  |  'o'  |  'm'  |Padding|     Session-Id AVP Header     |---sun avp:Session-Id--该范围填充为4字节整数倍
       +-------+-------+-------+-------+-------+-------+-------+-------+
    32 | (AVP Code = 263), Length = 50 |  'g'  |  'r'  |  'u'  |  'm'  |
       +-------+-------+-------+-------+-------+-------+-------+-------+
                                     . . .
       +-------+-------+-------+-------+-------+-------+-------+-------+
    64 |  'A'  |  'F'  |  '3'  |  'B'  |  '8'  |  '1'  |Padding|Padding|
       +-------+-------+-------+-------+-------+-------+-------+-------+
    72 |     Session-Id AVP Header (AVP Code = 263), Length = 51(子)   |---sun avp:Session-Id--该范围填充为4字节整数倍
       +-------+-------+-------+-------+-------+-------+-------+-------+
    80 |  'g'  |  'r'  |  'u'  |  'm'  |  'p'  |  '.'  |  'e'  |  'x'  |
       +-------+-------+-------+-------+-------+-------+-------+-------+
                                     . . .
       +-------+-------+-------+-------+-------+-------+-------+-------+
   104 |  '0'  |  'A'  |  'F'  |  '3'  |  'B'  |  '8'  |  '2'  |Padding|
       +-------+-------+-------+-------+-------+-------+-------+-------+
   112 |   Recovery-Policy Header (AVP Code = 8341), Length = 223      |---sun avp:Recovery-Policy--该范围填充为4字节整数倍
       +-------+-------+-------+-------+-------+-------+-------+-------+
   120 |  0x21 | 0x63  | 0xbc  | 0x1d  | 0x0a  | 0xd8  | 0x23  | 0x71  |
       +-------+-------+-------+-------+-------+-------+-------+-------+
                                     . . .
       +-------+-------+-------+-------+-------+-------+-------+-------+
   320 |  0x2f | 0xd7  | 0x96  | 0x6b  | 0x8c  | 0x7f  | 0x92  |Padding|
       +-------+-------+-------+-------+-------+-------+-------+-------+
   328 | Futuristic-Acct-Record Header (AVP Code = 15930), Length = 137|---sun avp:Futuristic-Acct-Record--该范围填充为4字节整数倍
       +-------+-------+-------+-------+-------+-------+-------+-------+
   336 |  0xfe | 0x19  | 0xda  | 0x58  | 0x02  | 0xac  | 0xd9  | 0x8b  |
       +-------+-------+-------+-------+-------+-------+-------+-------+
                                     . . .
       +-------+-------+-------+-------+-------+-------+-------+-------+
   464 |  0x41 |Padding|Padding|Padding|--Data  end index=467/count=468
       +-------+-------+-------+-------+


Example-AVP  ::= < AVP Header: 999999 >
                       { Origin-Host }
                     1*{ Session-Id }
                      *[ AVP ]  

      Origin-Host= "example.com".
      Session-Id =  "grump.example.com:33041;23432;893;0AF3B81"
      Session-Id =  "grump.example.com:33054;23561;2358;0AF3B82"

   optional AVPs included( *[ AVP ]  ) are

      Recovery-Policy = <binary>
         2163bc1d0ad82371f6bc09484133c3f09ad74a0dd5346d54195a7cf0b35
         2cabc881839a4fdcfbc1769e2677a4c1fb499284c5f70b48f58503a45c5
         c2d6943f82d5930f2b7c1da640f476f0e9c9572a50db8ea6e51e1c2c7bd
         f8bb43dc995144b8dbe297ac739493946803e1cee3e15d9b765008a1b2a
         cf4ac777c80041d72c01e691cf751dbf86e85f509f3988e5875dc905119
         26841f00f0e29a6d1ddc1a842289d440268681e052b30fb638045f7779c
         1d873c784f054f688f5001559ecff64865ef975f3e60d2fd7966b8c7f92

      Futuristic-Acct-Record = <binary>
         fe19da5802acd98b07a5b86cb4d5d03f0314ab9ef1ad0b67111ff3b90a0
         57fe29620bf3585fd2dd9fcc38ce62f6cc208c6163c008f4258d1bc88b8
         17694a74ccad3ec69269461b14b2e7a4c111fb239e33714da207983f58c
         41d018d56fe938f3cbf089aac12a912a2f0d1923a9390e5f789cb2e5067
         d3427475e49968f841


*/

 

 

我根据上面样例计算长度,根据我理解的,样例中貌似没有严格根据样例给数值以及左边的字节数计算,于是我就根据样例模块中给的length重新表块。注意:没有根据样例中输出来的字符个数填。比如 grump.example.com:33041;23432;893;0AF3B81 数出来是41个,但是里面长度我用的是42下去填。而后面那些<binary>也是这样,我以length为主,重填,没有去数样例中的个数。如果我下文重填理解没有错,那么RFC3588的那个样例是不是只是给个前面样例。细节没有说明?对于初学者来说。我觉得样例的正确性是很重要的。如果以后知道这里理解有误,回来修改

 

 

 

grouped  AVP样例eg:
          0       1       2       3       4       5       6       7    第/byte字节
       +-------+-------+-------+-------+-------+-------+-------+-------+
     0 | Example AVP Header(AVP Code = 999999),Length=496(总   padding)|-----Father:AVPHEAD(缺省Vendor-ID)-总范围为4字节整数倍
       +-------+-------+-------+-------+-------+-------+-------+-------+
     8 | Origin-Host AVP Header(AVP Code = 264),Length=19(子 Nopadding)|---sun avp:Origin-Host--该范围填充为4字节整数倍
       +-------+-------+-------+-------+-------+-------+-------+-------+
    16 |  'e'  |  'x'  |  'a'  |  'm'  |  'p'  |  'l'  |  'e'  |  '.'  |
       +-------+-------+-------+-------+-------+-------+-------+-------+
    24 |  'c'  |  'o'  |  'm'  |Padding|     Session-Id AVP Header     |---sun avp:Session-Id--该范围填充为4字节整数倍
       +-------+-------+-------+-------+-------+-------+-------+-------+
    32 | (AVP Code = 263), Length = 50 |  'g'  |  'r'  |  'u'  |  'm'  |
       +-------+-------+-------+-------+-------+-------+-------+-------+
                                     . . .
       +-------+-------+-------+-------+-------+-------+-------+-------+
    72 |  'A'  |  'F'  |  '3'  |  'B'  |  '8'  |  '1'  |Padding|Padding|
       +-------+-------+-------+-------+-------+-------+-------+-------+
    80 |Session-Id AVP Header (AVP Code = 263) ,Length =51(子Nopadding)|---sun avp:Session-Id--该范围填充为4字节整数倍
       +-------+-------+-------+-------+-------+-------+-------+-------+
    88 |  'g'  |  'r'  |  'u'  |  'm'  |  'p'  |  '.'  |  'e'  |  'x'  |
       +-------+-------+-------+-------+-------+-------+-------+-------+
                                     . . .
       +-------+-------+-------+-------+-------+-------+-------+-------+
   128 |  'B'  |  '8'  |  '2'  |Padding|Recovery-Policy Header(AVP Code|---sun avp:Recovery-Policy--该范围填充为4字节整数倍
       +-------+-------+-------+-------+-------+-------+-------+-------+
   136 |=8341),Length =223(子Nopadding)|  0x21 | 0x63  | 0xbc  | 0x1d  |
       +-------+-------+-------+-------+-------+-------+-------+-------+
   144 | 0x0a  | 0xd8  | 0x23  | 0x71  | 0xf6  | 0xbc  | 0x09  | 0x48  |
       +-------+-------+-------+-------+-------+-------+-------+-------+
                                     . . .
       +-------+-------+-------+-------+-------+-------+-------+-------+
   348 |  0x2f | 0xd7  | 0x96  | 0x6b  | 0x8c  | 0x7f  | 0x92  |Padding|
       +-------+-------+-------+-------+-------+-------+-------+-------+
   356 |Futuristic-Acct-Record Header(AVP Code=15930),Length=137(子Nop)|---sun avp:Futuristic-Acct-Record--该范围填充为4字节整数倍。这里(子Nop)为(子Nopadding)
       +-------+-------+-------+-------+-------+-------+-------+-------+
   364 |  0xfe | 0x19  | 0xda  | 0x58  | 0x02  | 0xac  | 0xd9  | 0x8b  |
       +-------+-------+-------+-------+-------+-------+-------+-------+
                                     . . .
       +-------+-------+-------+-------+-------+-------+-------+-------+
   492 |  0x41 |Padding|Padding|Padding|--Data  end index=495/count=496
       +-------+-------+-------+-------+

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值