TR069协议

TR069协议


TR069协议简述

  • 简单来说,TR069协议就是ACS(自动配置服务器Automatic Configuration Serve)和CPE(用户终端设备Customer Premise Equipment)之间沟通的通讯协议

  • 用下面一张图来表示:图中的CWMP指的就是TR069协议

  • TR069协议_第1张图片

TR069协议的协议栈

TR-069 采用了许多现存的、标准的协议以获得广泛的设备支持。采用 TCP/IP 协议来 保证 TR-069 独立于网络传输的物理介质,XML 来对设备和服务进行统一的描述,HTTP 协 议方便建立设备间的信息交互,在 SOAP 之上定义了用于配置、查询、诊断等操作的 RPC 方法,实现 CPE 与 ACS 之间的交互,SSL/TLS 增加了网络传输的安全。采用这些现存的、 广泛应用的协议能减少开发 TR-069 设备的工作量,使 TR-069 设备更好地融入现有网络

名称 解释
CPE/ACS 厂商自己实现
RPC RPC具体方法在TR069中定义
SOAP 使用XML
HTTP 使用HTTP1.1
SSL/TLS 标准传输层安全协议
TCP/IP 标准TCP/IP**

TR069协议的具体实现

1.宏观描述

如上面的协议栈所示,ACS和CPE之间通过调用PRC函数进行互操作。
CPE函数由ACS调用,用来对CPE进行管理如:设置CPE参数、获取CPE参数、硬件升级、重启设备等;
ACS函数由CPE调用,用来向ACS上报状态信息,请求硬件镜像文件下载(用来升级硬件)等等。

2.具体描述

  • 当调用函数时,ACS并不是直接调用CPE的函数,同理,CPE也不是直接调用ACS的函数。而是通过网络通信发送一段消息,消息中包含了调用哪个函数,以及函数相关参数,发送到对方后,对方调用对应的函数
  • 这段消息的包装就依靠上述协议栈实现。调用函数后,该函数首先使用SOAP(简单对象包装协议)包装,TR069中使用的是xml包装,解析
  • 然后将这段内容使用HTTP协议发送。这里使用的是HTTP中的POST,将上面所得到的xml作为POST的请求主题发送
  • 安全方面依靠SSL/TLS,HTTP具体数据传输依靠的是TCP

架构组件

1.RPC方法参数
- RPC方法:ACS可以根据它来读写参数已达到配置CPE和监控CPE的状态和统计信息。不同类CPE的参数定义在不同文档中
TR106:Data Model Template for TR069-Enabled Devices
TR098 : Internet Gateway Device Data Model for TR069
TR104 : Provisioning Parameters for VoIP CPE
- 参数的形式是键值对,并且拥有一个类似文件目录的分级结构,每一级之间用一个’.’分隔开。

2.文件传输
- 当由ACS发起时,CPE得到需要传输的文件的地址,使用HTTP/HTTPS,或者可选的使用FTP/SFTP/TFTP作为传输协议,然后CPE开始下载,并通知ACS传输失败或成功
- 当由CPE发起时,CPE首先向ACS请求一个特殊文件类型的下载,然后从ACS的响应开始,执行和由ACS发起时一样的下载过程
- 总的来说,就是ACS给CPE一个下载地址,然后CPE下载。

3.发起会话
- CPE发起会话

作用:CPE向对应的ACS通报各种状态,同时保证CPE-ACS通信的发生的最小频率

  • 发起会话的时机
    a.CPE初始安装发起建立通信的机制
    b.和ACS建立一个持续的周期性的会话(原文如下)
    (It also includes a mechanism to establish periodic communication with the ACS on an ongoing basis)
    c.事件发生时通知ACS,比如CPE的宽带IP地址改变时。
  • CPE标识自己的方法

    CPE使用工厂信息和序列号信息(以及可选的产品标识符)来唯一地标识自己,通过这种方式ACS可以知道自己和哪个CPE通讯

  • ACS发起的异步会话

    作用:异步地通知CPE配置的改变,使得自动配置机制服务能够用一种实时的方式配置CPE。可能用来提供给一个终端用户来立即接入或使用一个定制的服务或特征,而无需等待下一个通知间隔周期。

    a.ACS可以在任何时候向CPE发起连接请求的机制,通知CPE向ACS建立一个通讯会话。
    b.可以用CPE轮询代替ACS发起连接(我理解的CPE轮询就是CPE去挨个询问ACS是否需要建立连接)

ACS Discovery

通过在CPE上配置ACS的URL实现

  • CPE在本地配置好ACS的URL。例如:它可以通过LAN侧的CPE自动配置协议来实现。CPE通过DNS用URL中的host name组成部分找到ACS的IP地址。
  • 使用接入网的DHCP服务器可以把ACS URL作为DHCP option[14]来配置给CPE。如果CPE通过DHCP获取到一个无法到达的ACS URL(300s内无法建立TCP连接视为不可达),CPE必须发起一个DHCP Inform来重新搜索ACS URL如果CPE没有收到DHCP Inform的响应,它必须按照RFC2131来尝试重新获取
  • 关于使用上述两种机制中的哪一种?

    当CPE需要联系ACS时,首先自然是查看自己是否有本地配置好的ACS的URL,没有的话再看是否符合以下情况来使用DHCP:
    i)如果CPE拥有一个null值得ManagementServer.URL参数值
    ii)如果CPE不能联系到ACS,并且CPE**第一次**联系到ACS是通过DHCP

  • 关于失去联系要重新建立联系时采用哪种机制(下面是原文的描述)

    The CPE MUST remember the mechanism it used to locate the ACS the first time it successfully contacted it. If the CPE did not use DHCP to discover the ACS URL, then it SHOULD NOT fall back to using DHCP for ACS discovery. If the CPE originally used DHCP for ACS discovery, then when it fails to contact the ACS, it MUST perform re-discovery via DHCP. The last requirement holds even if the ACS URL has been subsequently set through a non-DHCP mechanism.

意思大致上就是说CPE第一次成功和ACS建立联系使用哪种方式,之后重新建立联系就使用哪种方式。

  • CPE有一个默认的ACS URL在没有其他的URL提供时使用
    这个ACS URL必须是一个有效的HTTP或HTTPS URL的格式。使用HTTPS URL 表示CPE必须跟ACS建立一个SSL或TLS链接。

CPE发起连接

CPE可以在任何时候使用预定的ACS地址向ACS发期建连下面情况下,CPE**必须**向ACS发起建连并发送Inform RPC method
a. CPE初始安装第一次向接入网发起建连
b. 上电或重启
c. 在每一个通知周期间隔
d. 当被optional ScheduleInform method 所指示需要如此执行
e. 一旦CPE接收ACS的有效链接请求时
f. 一旦ACS的URL发生改变时
g. 一旦一个在发生改变时需要发起一个Inform的参数发生了改变时
h. 一旦一个被ACS通过SetParameterAttributes method标识为”active notification”的参数由于一个外部修改而改变时,就是说不是ACS自己通过SetParameter Values改变的,就会引起一个新的会话发起。如果在CPE建立一个新的会话之前,这个参数发生了多次变化,CPE只发起一次会话。
当在会话过程中,这个被ACS通过SetParameterAttributes method标识为”active notification”的参数发生了改变,则在当前会话结束后发起一个通知的会话而不会去影响到当前的会话。
协议中还对不正常情况的时候做出了相应的建议(NOT MUST)

In order to avoid excessive traffic to the ACS, a CPE MAY place a locally specified limit on the frequency of parameter change notifications. This limit SHOULD be defined so that it is exceeded only in unusual circumstances. If this limit is exceeded, the CPE MAY delay by a locally specified amount initiation of a session to notify the ACS. After this delay, the CPE MUST initiate a session to the ACS and indicate all relevant parameter changes (those parameters that have been marked for notification) that have occurred since the last such notification.

意思就是说可以在CPE这里设置一个用于非正常情况下的对业务量进行限制的参数,使得在非正常情况下ACS的业务量不至于过多。实际做法就是延迟CPE会话发起的时间,周期增大。而每次发起通报就把上一次通报后发生的所有相关参数的修改给通报上去。
i. 当CPE进行下载或者上传时,无论操作成功与否,都需要(Must)通知ACS下载和上传的操作完成
j.不正常终结的会话要重建,重建时按照下述会话重建规程

会话重建规程

会话失败时,CPE需要记录会话失败的次数,按照次数选择一个时间再次发起会话,这个时间是有下述表格定义的,表中定义的只是一个时间范围,具体的时间CPE必须从post-reboot session retry count给定的一个范围中随机地选择一个值(秒级)来作为等待间隔时间。如果再次发生会话失败,就按照表格继续等待发起重建。
TR069协议_第2张图片

ACS发起连接

ACS可以在任何时候使用连接请求机制**请求CPE发起一个到ACS的连接**。CPE**需要(Requestd)**支持此机制,而在ACS侧**建议**支持此机制 此机制依赖于CPE要有一个可被ACS路由到的IP地址。在ACS和CPE之间,如果CPE在一个防火墙或NAT(网络转换技术,一种在IP封包通过路由器或防火墙时重写来源IP地址或目的IP地址的技术)欺骗设备后面,ACS将完全无法连接到这个CPE。 具体做法

ACS使用的连接请求时一个到CPE指定的URL的HTTP1.1(不能是HTTPS,并且这个GET不能带参数) GET。这个URL时CPE上随机生成的。CPE使用摘要鉴权来对ACS进行认证,成功的话使用HTTP的状态码“200(OK)”或“204(Not Content)”来响应。响应中的消息体长度必须为0。

SSL/TLS和TCP的使用

  • CPE必须支持SSL/TLS 中的一种或两种
  • 两种都支持的话具体使用哪一个由ACS选择
  • 使用客户端证书来唯一地标识一个CPE或者ACS都是可选的

HTTP的使用

CPE和ACS之间的SOAP消息承载于HTTP1.1上,CPE做客户端,ACS做服务器端。

SOAP的使用

使用的是HTTP的post,传送的内容是soap(这里用的是xml)
下面这个例子是ACS的一个相应,消息体是一个xml

HTTP/1.1 200 OK
Content-Type:text/xml;charset="utf-8"
Content-Length:xyz

<soap:Envelope
    xmlns:soap=http://schemas.xmlsoap.org/soap/envelope/
    xmlns:cwmp="urn:dslforum-org:cwmp-1-0">
        <soap:Body>
            <cwmp:Request>
                <argument>valueargument>
            cwmp:Request>
        soap:Body>
soap:Envelope>

再给一个更具体的例子感受下SOAP的使用

<soap:Envelope
    xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:cwmp="urn:dslforum-org:cwmp-1-0">
        <soap-env:Header>
            <cwmp:ID soap:mustUnderstand="1">0cwmp:ID>
        soap-env:Header>
        <soap-env:Body>
            <cwmp:GetParameterNames>
                <ParameterPath>ObjectParameterPath>
                <NextLevel>0NextLevel>
            cwmp:GetParameterNames>
        soap-env:Body>
soap:Envelope>

基于TR069实现的网管功能

(1)配置管理
TR069协议的配置管理由ACS控制发起,通过Get/SetParamerterValue RPC来完成对CPE参数的比较和设置,通过在ACS上配置管理策略,由CPE来主动请求管理,可以简化设备配置的工作量。
(2)版本管理
在TR069协议中CPE可以主动请求版本/固件更新,也可由以ACS强制进行版本的升级。无论是哪种方式,版本控制的决策都由ACS来控制。基于此功能不仅仅可以实现传统意义上的版本升级,同时还能与配置功能配合实现业务的动态下载控制,为运营商部署增值业务提供手段。
(3)性能监控
ACS可以通过使用GetParamerterValues RPC来实时查询设备状态,也可以通过上载(Upload)获取设备的日志文件来分析CPE的历史状态信息。
(4)诊断
在TR069中没有定义专门的诊断RPC,而是使用Set/GetParameterValues RPC的组合来实现诊断功能,通过设置操作设置诊断参数触发诊断处理,通过获取操作读取设备诊断结果。
(5)告警
CPE主动发送事件报告来实现设备的实时告警。

RPC方法

RPC方法分为ACS支持的方法和CPE支持的方法。ACS支持的方法实际上就是CPE能够远程调用的方法,CPE支持的方法实际上就是ACS能够远程调用的方法。

CPE支持的方法,就是说ACS可以远程调用的方法,换句话说,就是ACS让CPE执行,然后返回参数的话就返回到ACS这边

名称 解释
GetParameterValues 获得一个或多个CPE参数
SetParameterValues 修改CPE的一个或多个参数
GetParameterNames 获得参数名称
GetParameterAttributes 用来获得参数的特性如读写
SetParameterAttributes 用来设定参数的特性如读写
AddObject 增加对象,对象是参数的容器
DeleteObject 删除对象,应该就是删除自己定的参数
Reboot 重启终端
Download 让终端下载文件
Upload 终端上传文件,应该主要是日志文件
FactoryReset 回复出厂设置

上面的方法中,
Get方法所获得的参数就是要返回给ACS的,这样ACS就可以获得这些值,而Set方法就是ACS去设置CPE的时候用的,作用于CPE。
Download和Upload就是ACS告知CPE该上传或者下载了,然后CPE调用自己的Download从ACS上下载东西,具体下载过程在本文的文件传输那部分介绍。上传则是CPE上传给ACS,项目中的话我想应该就是传些日志文件吧,可以用于诊断CPE的状态这样
Reboot和FactoryReset也是指的CPE的重启和回复出厂设置
ACS支持的方法,就是说CPE可以远程调用的方法,换句话说,CPE让ACS执行的方法,返回值返回到ACS这边

名称 解释
Inform 通常终端调用这个是通知服务器开始传送消息,说自己上线了
TransferComplete CPE告诉服务器传送完毕
RequestDownload 请求下载

这几个方法就是由CPE调用,ACS执行的了,像Inform方法,应该就是说CPE通过远程调用,告知ACS自己上线了。ACS获知CPE上线这个消息就是去执行Inform这个方法。TransferComplete这个方法也是如此,就是让ACS获得某个消息的。

你可能感兴趣的:(协议)