TR069协议

CPE与ACS连接建立

CPE请求建立连接

在以下几种情况下,CPE必须跟ACS建立连接,并调用RPC Imform方法:

1.设备出厂后,首次连接网络时

2.断电重启

3.Periodic Inform interval

4.可选的schedul inform方法

5.acs url变化

6.参数被修改,并且需要通过inform通知本次更新

7.ACS标记参数为Active Notification,且该参数被非ACS修改时

8.upload/download完成时,无论失败或成功,特别是ACS发起的,关于非ACS发起,可有CPE决定是否通知

当ACS和CPE没有信息交互时,应该关闭两者之间的连接

会话重试机制

会话创建失败,应支持重试机制,并记录重试次数,除非重启,新的envent发生,不会重置重试间隔时间,会话创建成功后,应能重置重试信息。

随机源端口

每次CPE重启第一次连接ACS时,应该选择一个不同TCP端口连接ACS,避免当ACS处于time_wait状态时,拒绝CPE的连接请求。所以CPE应该提供一个健壮的随机选择端口机制

ACS请求建立连接

连接建立机制:

1.CPE必须接受验证通过的ACS连接

2.CPE在指定时间内应限制ACS连接次数,防止ACS攻击

3.CPE权限验证通过后,应在30秒内send response to ACS,并尝试建立会话

4.ACS接受到连接请求成功response后,若30秒(至少)后,CPE未与其建立会话,ACS可以重新发送连接请求

5.CPE权限验证通过,且send response to ACS,但在成功建立会话前,若同一个CWMP终端收到多个认证通过的连接请求,CPE应能响应每一个连接请求,但只建立一个会话

6.若CPE已经与ACS建立会话,此时再接受到连接请求,CPE不能过早地结束正在建立的会话,CPE应使用其它可供选择的方式进行传输。这要求CPE正在建立会话或已经建立会话时,应能hold住每个ACS请求

7.CPE不应拒绝任何认证通过的连接,除非由以上提到的几点引起的。若CPE拒绝了认证通过的连接,CPE不应为这次连接请求再建立会话。

HTTP建立连接特殊要求

基于HTTP发送请求连接,需要满足以下要求:

1.ACS发送请求连接,需基于HTTP 1.1 GET请求特定路径,请求路径是随机生成的,而且每个CPE唯一

2.连接请求必须基于HTTP,不是HTTPS,URL也是必须HTTP URL

3.HTTP GET连接不应该带任何数据,若带数据,CPE应忽略本次请求

4.CPE必须先对ACS进行HTTP摘要认证,然后再做后续处理。认证不通过,CPE不能与ACS建立连接。

5.CPE认证通过后,应发送200 OK或204 No Content Response状态码给ACS,而且Reponse实体长度为0。CPE应优先发送reponse响应,然后再创建会话。

6.CPE在指定时间内应限制ACS连接次数,防止ACS攻击。若CPE因为次数限制,拒绝ACS连接请求,应发送503 Reponse状态码给ACS,而且HTTP HEADER中不应包含Retry-After字段

7.若CPE已经与ACS建立会话,此时再接受到连接请求,CPE不能过早地结束正在建立的会话,CPE必须使用以下符合HTTP特定要求方式之一进行处理。

  • 拒绝每一个ACS连接请求,并发送503 Reponse状态码给ACS,而且HTTP HEADER中不应包含Retry-After字段
  • 如果当前连接请求CWMP终端已经在会话中,则当前会话结束后,再创建一个新的会话,若拒绝连接请求,应发送503 Response给ACS
  • 如果当前连接请求CWMP终端不在会话中,则可创建新的会话,并应不影响原来会话

采取以上方式,应确保CPE正在建立会话或已经建立会话时,应能hold住每个ACS请求。


使用TLS和TCP

CWMP建议使用安全传输层协议(TLS),尽管大部分情况下常常使用TCP协议来替代TLS。如果不使用TLS协议,也应该采纳TLS一些安全特性,特别是保密性、数据完整性,使用证书认证,而不是基于共享密钥认证。

使用TLS和TCP应满足一下几条规则:

1.CPE应支持TLS 1.2以上版本

2.CPE应能按RFC 5246约定传达它的功能给ACS,并允许ACS来选择协议。

3.如果ACS URL使用HTTPS协议,则CPE应该使用TLS 1.2以上版本与ACS建立安全连接。

4.TLS 1.2以上版本不应使用基于RC4密码协议

5.CPE应该能够发起与ACS交互连接

6.ACS应能够接受CPE发送的连接

该部分剩余部分待续。。。


使用HTTP

如果CPE和ACS基于HTTP协议,则CPE和ACS应使用HTTP 1.1进行SOAP进行信息交互。

基于HTTP进行SOAP编码

从通过HTTP进行SOAP编码扩展到SOAP绑定HTTP,其规范约定如下:

1.ACS发送给CPE的SOAP请求基于HTTP Response,而CPE返回给ACS请求的SOAP应答是基于后续的HTTP POST

2.若在HTTP Request中有一个Response SOAP包或有个SOAP包中有个错误的Response,则在HTTP Request中SOAPAction的值必须为空

3.若HTTP Request/Response中包含SOAP包,则HTTP Content-Type header中的type/subtype必须是text/xml

4.空的HTTP POST必须不能包含SOAPAction header

5.空的HTTP POST必须不能包含Content-Type header

6.如果HTTP Request有CWMP负载信息(发送SOAP请求给CPE、发送成功的Response给CPE或SOAP中Response有错误的元素定义),则Request要用HTTP Status 200 (OK)


会话

当会话有一系列的交互,CPE应维持一个TCP连接,直到会话结束后才能关闭TCP连接。如果会话在一系列Request/Response之后完成关闭,或会话在接受到一个Response之后终止,则CPE应该创建新的TCP连接,维持该会话发送下一个Request请求。

如果接收到认证要求,则CPE必须在下一个HTTP Request header中必须包含Authorazition在同一个tcp connection,除非ACS在下一个Request header中包含Connection:Close,要求CPE关闭连接。在这种情况下,CPE应服从ACS要求,关闭连接。并新的TCP连接中发送一个带有Authorazition header的Request。

如果CPE因为某些原因造成建立TCP Connection失败或发送HTTP消息失败或接收Reponse失败,CPE应认定会话被异常终止。CPE一般在认定这些失败之前,应至少等待30秒。

ACS应该使用session cookie来维持会话的状态,ACS应该将cookie中的会话的状态标记为discard,不应该假设CPE维护的cookie对于会话已经过期

为了确保ACS使用cookie机制,CPE应该支持cookie,并在随后的每个HTTP POST中包含cookie的值,并要求CPE在会话之外不应再存储cookie。CPE必须支持ACS使用多cookie机制,而且CPE应至少分配512字节来存储cookie

当会话被终止后,CPE应关闭与ACS的连接。

CPE必须支持重定向功能,CPE与ACS通过HTTP重定向建立联系,需要满足:

1.CPE必须支持302、307状态码

2.CPE也应该支持301状态码

3.CPE在会话中时,也应该支持重定向,ACS在会话过程中,也应该能否启动重定向

4.如果CPE进行重定向,则CPE应使用重定向的Reponse返回的URL来继续会话。特别是,CPE应该重新使用HTTP POST发送重定向response结果给重定向后的ACS

5.如果CPE进行重定向,则重定向的URL仅应用到当前会话的剩余部分,重定向的URL不能被CPE保存用于随后的会话。

6.CPE最多支持连续5次重定向,如果超过5次,则CPE应该认为会话被异常终止

7.HTTP重定向后的URL可能是HTTP或HTTPS协议,CPE应该重新选择合适的方式TCP或TLS来与目标服务器交互。

8.如果重定向后CPE选择TLS方式进行会话,则CPE应重新向ACS进行认证,认证服务器应该是重定向后的URL,而不是先前配置的URL

9.如果ACS发送的HTTP Response包含重定向状态码,则HTTP Entity-Body的长度必须为0,若不为0,则CPE也应忽略entity-body的内容

10.如果重定向之后,CPE发送request给重定向的ACS必须包含与会话相关的所有cookie。CPE必须认为ACS的重定向是认证过的交互,CPE发送cookie给重定向后的ACS不用对每个cookie进行验证

文件传输

如果ACS要求CPE传输文件通过Download/ScheduleDownload/Upload/ChangeDUState(install or update)方法,如果文件路径是一个特定的HTTP URL,并且与ACS的服务器地址相同,则CPE应该选择以下几种方式之一处理这种行为:

1.CPE在已建立连接的基础上发送HTTP GET/PUT,一旦文件被传输,则CPE需要继续发送额外的信息给ACS来维持该连接。这种方式不适用于ScheduleDownload/ChangeDUState

2.CPE重新打开一个连接进行文件传输,同时也应发送消息给ACS维持当前会话连接。

3.CPE终止当前会话,然后执行文件传输

如果文件路径不是HTTP URL,或与ACS的域名不一致,或端口号不同,则CPE只能从后两种方式中选择。

若CPE使用TLS协议,CPE也必须支持创建一个独立的TCP连接使用HTTP传输文件。如果文件路径是HTTPS URL,则CPE必须使用TLS协议

CPE传输文件必须支持HTTP基本认证和摘要认证。认证方法可由文件服务器通过基本认证或摘要认证的质询指定。如果认证方式是文件服务器指定的,则ACS必须通过RPC方法(Download/ScheduleDownload/Upload/ChangeDUState(install or update))指定凭证去启动文件传输。


安全认证

如果CPE未使用TLS进行认证,则ACS须使用HTTP认证CPE。如果使用了TLS进行了加密,则ACS应该使用HTTP基本认证。如果未使用TLS,则ACS必须使用摘要认证。

CPE必须支持HTTP基本认证和摘要认证。ACS可通过基本认证或摘要认证的质询指定认证方法。如果使用了TLS进行了加密,则CPE应先发送HTTP基本认证凭证。

如果CPE接收到ACS的认证质询,则CPE应在TCP连接期间,每次发送HTTP请求都要带Authorization header,无论CPE是否这样做,ACS可以在会话中任意时刻质询CPE凭证。

不论CPE使用任何认证方式,每个CPE必须有一个全局唯一的username/userid。username/userid可以是以下两种形式之一:

1.oui-productclass-serialnumber

2.oui-serialnumber

如果使用以上形式的username/userid,则oui、productclass、serialnumber应该与Inform中的DeviceStruct中的一致。

为了确保Struct中的值取自username/userid,则productclass、serialnumber中非0-9、a-z、A-Z或'_'字符应该被URI%编码,%编码使每个字符转化为utf-8,然后进行16进制编码。

HTTP认证中每个CPE的密码是唯一的,密码是ACS与CPE共享的。如何在CPE安装时使ACS与CPE之间知道共享密码的方法不在本节讨论范围。CPE和ACS都应该禁止未认证的方式来获取密码和密码列表。


摘要认证

若RPC方法进行交互时,需要对连接进行认证。CPE和ACS在HTTP客户端和服务端因为连接类型不同起的作用不同,ACS的作用是发送连接请求,CPE的作用是与ACS建立连接。

CPE和ACS必须支持RFC 2617规范约定值为auth的qop字段,根据RFC2617规范,当HTTP服务端提供qop字段时,CPE必须使用新的摘要认证方式。如果使用摘要认证,对于每一个新打开的连接,ACS应该使用一个新的nonce值,CPE应该使用一个新的cnonce值。

CPE和ACS必须支持MD5摘要算法,除此之外,CPE也必须支持MD5-Sess摘要算法

HTTP额外要求

1.如果ACS发送一个空的Response,必须包含204状态码

2.CPE不能使用HTTP 1.1定义的管线化技术

HTTP压缩

使用HTTP协议进行内容交换应该使用HTTP压缩编码,其要求如下:

1.ACS应该支持RFC 3.5节内容编码定义的编码方式的内容交换

2.CPE应该支持RFC 3.5节内容编码定义的编码方式的内容交换

为了使CPE和ACS有效地交换压缩信息,CPE发送的压缩信息中header必须有ManagerServer.HTTPConpress参数定义的Content-Encodiing字段,除非ManagerServer.HTTPConpress参数定义为disabled

如果ACS不支持Content-Encodiing header,ACS必须发送415repsonse状态码,CPE接收到415状态码后,应该移除http压缩,并重试会话。

ACS可以通过设置ManagerServer.HTTPConpress参数来打开或关闭HTTP压缩功能,CPE通过ManagerServer.HTTPCompressionSurported参数列出所支持的压缩机制


使用SOAP

CWMP协议使用SOAP 1.1语法来编码RPC方法调用和Response传输内容。以下是SOAP对RPC方法进行编码的规则:

1.编码要使用标准SOAP 1.1 Envelope和Serialization命名空间:

Envelope命名空间定义为:http://schemas.xmlsoap.org/soap/envelope/

Serialization命名空间定义为:http://schemas.xmlsoap.org/soap/encoding/

2.附录A中定义数据类型与SOAP 1.1是一致的

3.根据SOAP规范,元素指定为anySimpleType且包含一个类型属性,则该元素的类型必须有一个实际的类型

4.如果元素有一个类型属性但不是anySimpleType,且该元素被约定使用附录A RFC方法中XML schema声明的数据类型。如果该元素包含类型属性,则其必须与schema中声明的数据类型一致

5.soap数组参数使用见规范

6.Soap对RPC方法的约定有,对于附录A定义的每个方法,方法调用所列出的内容是输入参数,方法Response所列出的参数是输出参数

7.RPC方法的命名是依据标准SOAP命名规范,与Reponse消息对应的方法,其方法名后缀应该加上Reponse标记

8.一个SOAP Envelope只能包含一个Body元素

9.CPE必须至少能够接收大小为32KB字节SOAP请求Envelope,且不生成“Resource Exceed"的响应

10.CPE必须能够生成任意大小的SOAP EnVelope Response,且不生成“Resource Exceed"的响应

11.CPE必须至少能够接收大小为32KB字节SOAP请求Envelope,且不生成“Resource Exceed"的响应

12.CPE必须能够生成任意大小的SOAP EnVelope Response,且不生成“Resource Exceed"的响应

13.fault Reponse必须使用SOAP Fault标记规范:

  • SOAP fault标记必须表明错误的来源,客户端或服务端,在这里,客户端是指SOAP请求的发起者,服务端是指SOAP响应者。SOAP faultcode的值,要么是无效的,要么带有Soap Envelope命名空间的前缀。接收到错误响应后可以不使用faultcode的值,也可以完全忽略faultcode标记。
  • SOAP faultstring子元素必须字符串”CWMP fault"
  • SOAP detail元素必须包换一个fault结构,附录A中RPC方法 XML Schema中有对该结构定义。该结构元素有:
  1. FaultCode元素,包含附录A定义的一个数字型的错误码
  2. FaultString元素,包含可阅读的文字描述
  3. SetParameterValuesFault元素,仅用来回应SetParameterValues方法调用错误,该元素包含一个结构列表,每个结构列表对应一个发生错误的参数,该结构包含参数有:(1)ParameterName(2)FaultCode(3)FaultString

fault响应只能发送给SOAP请求,不能发送给SOAP Respone或者另外一个fault Response.

如果fault响应不满足以上要求,则该SOAP消息必须被认定无效的。

14.解析SOAP Envelop时,CPE和ACS应该忽略:(1)所有不认识XML元素(SOAP Body或子元素或内容)(2)所有不认识的XML属性和值(3)所有嵌入的XML注释(4)所有XML处理指令。或者CPE和ACS应该明确地验证接受到的XML,并拒绝包含不认识XML元素的SOAP Envelope.这样会阻止(preclude)通过包含另外的元素而不修改消息名的方法来对已有消息的扩充。

15.如果一个 RPC 方式要求参考 XML Schema 命名空间(for example for the “type” attribute, or for references to XML Schema data types),这些参考必须是针对这些命名空间定义的 2001 版本,特别指,http://www.w3.org/2001/XMLSchema-instance和 http://www.w3.org/2001/XMLSchema。接收者可以拒绝一个参考跟他们命名空间不同的其它版本的 RPC 方式。

RPC支持需求

表 5 是对所有RPC方法的一个概要,并且指明了附录 A 中每个 RPC 方式执行的环境是必须的还是可选的。



基于别名的寻址机制需求

这部分是TR069协议可选的,待续。

会话流程

所有的会话必须开始于CPE端的HTTP POST中的Inform消息,这有助于启动一系列交互和传达CPE消息编码的局限性。在一次会话中Inform消息不能多于一次,除非收到unauthorized 401 或者重定向状态码3.xx。

会话必须终止,当ACS和CPE没有请求和响应信息要交互,同时CPE必须关闭连接。

CWMP endpoint和ACS之间同时只能存在一个会话


CPE操作
会话启动

在3.2.1节的条件下,CPE将会与ACS建立会话。一旦TCP连接建立,CPE发送一个初始的Inform请求给ACS,告知ACS CPE当前的状态,以及已经准备好接收ACS请求。

CPE必须等待接受到ACS发送的InformResponse,才能认为会话建立成功。

会话从开始创建到结束,CPE必须保证CWMP协议所涉及参数的事务完整性。在会话过程中,CPE的所有配置参数只有ACS能修改。因此会话时CPE应避免配置参数被第三方修改。它包括可配置参数的值,那些 presence 或 absence 的可配置参数和对象,如何达到事务完整性是CPE端的问题。

CPE必须采取必要的措施来保证事务的完整性,例如,在某些异常的情况下,为了满足 CWMP 会话连接需求,可能需要 CPE 来终止一个 LAN 侧的管理会话。

接收请求

在会话过程中,如果CPE接收到来自ACS端的SOAP请求,CPE必须响应这个Request在下一个发送ACS的HTTP POST中

发送请求

在会话过程中,如果CPE有一个或多个Request要发送到ACS,CPE必须在下一个HTTP POST中发送其中一个Request给ACS,当且仅当以下所有条件成立时:

1.最近接收到ACS HTTP Response中没有SOAP请求

2.ACS 已经指示 HoldRequests 为 false。此条件当且仅当在从 ACS 收到的最近的HTTP 响应中包含下面情况时会满足:

  • 一个 HoldRequests 头的值设置为 false 的 SOAP 封装包
  • 一个没有 HoldRequests 头的 SOAP 封装包
  • 没有 SOAP 封装的空 HTTP 响应。

3.在当前会话之前一段时间,在 ACS 已经指示 HoldRequests 为 false后,CPE没有发送过一次空的HTTP POST。

如果CPE有多个请求且满足以上条件,选择哪个请求由CPE来决定,除非有特殊规定。

在会话过程中,若不满足以上条件或者CPE没有Request要发送给ACS,并且CPE收到的ACS HTTP Resopnse中没有包含SOAP Request,则CPE应该发送一个空的HTTP POST。

一旦在最近的 HoldRequest 为 false(见 3.5)且 CPE 已经发送了一个空 HTTP POST,CPE必须不能在这个会话的接下来的时间里发送任何更多的请求。在这种情况下,如果 CPE
还有其他的请求需要发送到 ACS,CPE 必须等到接下来的会话中发送这些请求。

表7总结了在会话过程中,要求CPE发送给ACS的内容


结束会话

当以下所有条件均满足时,CPE必须结束会话:

1.CPE没有ACS发送的请求要接收,该结论可以根据ACS最后一次发送的Response是否为空来判断。

2.CPE没有要发送的请求给ACS,并且当HoldRequest为false时,CPE已经发送了空的HTTP POST给ACS(这告诉ACS CPE没有要发送的请求了),正如表7定义,如果该条件不满足,但是CPE没有要发送的请求或Response,则CPE必须发送一个空的HTTP POST,以满足该条件。

3.CPE已经接收了所有ACS发送的Response

4.CPE已经对所有ACS发送的Request进行了回应

如果CPE 30秒内接收不到ACS的Response,则CPE应该认定会话被异常结束。如果CPE未接收到Reponse,CPE不应该再尝试发送HTTP Request。

如果CPE接收到针对Inform请求的SOAP层的错误,且错误码不是“Retry Request"(即8005),则CPE必须认定该会话被异常结束。

如果CPE接收到的ACS Response,该Response中XML格式不正确,SOAP Struct无效,SOAP Fault Code未在3.4.7表中定义,或者违反协议,则CPE必须认定该会话被异常结束。

如果CPE接收到ACS Response且状态码为4.xx或5.xx,CPE必须认定该会话被异常结束。如果状态码是401 Unauthorized,CPE尝试认证,若仍接收到状态码为401 Unauthorized,则CPE必须认定该会话被异常结束。

如果以上条件都不满足,则会话不能被终止。

如果 CPE 在响应除了 Inform 之外的其他的方法时收到一个 SOAP 层的错误码,且不是“Retry request”(错误码 8005)的错误响应(见 3.5),则CPE 必须继续这个会话。也就是说,这个类型的错误响应必须不能导致会话的异常结束。
如果在会话过程中信息交换需要CPE重启才能完成ACS的请求操作,则CPE必须等到会话完全退出后才能进行重启。

如果会话被异常终止,则CPE必须重试建立会话,重试次数应该有所限制。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值