http://blog.163.com/yuan_zhch/blog/static/1937900462012111113320220/
2012-12-01 23:33:20| 分类: CWMP相关 |字号 订阅
ACS:Auto-Configuration Server (自动配置服务器)
CPE:Customer Premise Equipment(用户终端设备)
CWMP:CPE WAN Management Protocol(用户终端设备广域网管理协议)
DSL: Digital Subscriber Line(数字用户线)
HTTP:Hypertext Transfer Protocol(超文本传输协议)
RPC: Remote Procedure Call(远程过程调用)
SOAP: Simple Object Access Protocol(简单对象访问协议)
SSL: Secure Socket Layer(安全套接层)
TLS: Transport Layer Security(安全传输层)
URL:Uniform Resource Location(统一资源定位)
XML: Extensible Markup Language(可扩展标记语言)
1、 TR069简介TR069 全称是“用户终端设备广域网管理协议(CWMP)”,是由DSL Forum制定的一种网管协议,适用于远程终端管理技术,DSL论坛中,用于承载该协议的文档编号为TR069,简称TR069协议。随着VoIP、 IPTV等大量IP终端设备(尤其在家庭中)的普及,设备的配置和维护变得越来越困难,传统的SNMP协议已不能满足相应的管理维护需求,而TR069协 议更适应于广域网终端上的应用。 TR069相对SNMP有如下的优点:
l 连接模型灵活,允许ACS和CPE两端都可以发起连接请求;
l 节省带宽,不必维护长期连接;
l 功能丰富,软件升级,业务推送等。
2、TR069协议组网模型TR069组网模式与SNMP类似,采用Server/Client(Agent)模式。
上图中,ACS为自动配置服务器,负责对终端设备CPE进行管理。ACS与CPE间的接口为南向接口,ACS与管理系统间的接口为北向接口。TR069协议定义了南向接口。
3、TR069协议功能CWMP支持管理CPE的一组功能,主要包括:
l 自动配置和动态服务供给: ACS可以在CPE第一次上线或上线后的任何时候对CPE进行配置(Set方法)。
l 软件/固件的映像管理: CPE和ACS都可以主动发起下载,CPE下载结果通知ACS( Download、Upload、Inform 方法)。
l 状态与性能监控:协议支持CPE向ACS提供可能用于状态和性能统计数据(Inform方法),如非ACS导致的参数更改、告警信息等。
l 诊断:协议支持CPE向ACS提供可用于诊断连接性和服务的信息。本协议定义一组公用参数集合,以及厂商添加自定制诊断能力的通用机制,如Ping命令、Reset命令等。
l WEB应用的身份管理。协议的可选功能,需要ACS支持Kicked方法,该功能允许用户通过统一的Website来对某台CPE进行管理。
===========================================================================
4、TR069协议组成
CPE/ACS Application: 运行于ACS和CPE的CWMP应用,可以理解为被管理的参数,如设备序列号、IP地址、注册服务器域名等信息,这些参数在其它TR称为Data Model,对不同类型的设置有不同的Data Model。Data Model本身不属于CWMP,但协议支持ACS对这些Data Modle的自动发现。与SNMP类似,Data Modle组成为树状结构,如:
l InternetGatewayDevice.ManagementServer.PeriodicInformEnable
l InternetGatewayDevice.ManagementServer.PeriodicInformInterval
l InternetGatewayDevice.Services.VoiceService.VoiceProfile.SIP.RegisterExpires
l InternetGatewayDevice.Services.VoiceService.VoiceProfile.SIP.RegisterRetryInterval
RPC Methods:由ACS/CPE提供、供对方调用的标准函数,用于承载ACS和CPE之间的管理请求和应答,TR069分别了规定由ACS和CPE提供的RPC方法,包括可选的方法和必选的方法,如下表所示。
每中方法都有请求和应答,请求和应答都包含的规定参数,应答中应该包含执行结果,由原因码体现,如果成功则原因码为0,否则使用协议定义的相应错误原因码。
======================================================================
SOAP: 简单对象访问协议,SOAP信元是一个包含可选的SOAP Head和必选的SOAP Body组成的XML文档,用于对RPC 编码,即RPC的具体体现形式。协议要求支持SOAP 1.1。一个HTTP报文可以包含若干个SOAP信元,该最大信元数由ACS和CPE分别指定并通知对方。所有的连接都是由CPE主动发起的,CPE发起 连接时先调用Inform方法,Inform中有一个参数是MaxEnvelopes,它告诉ACS CPE可以支持的最大SOAP信元,而ACS对Inform的响应中也包含着MaxEnvelopes告诉CPE它可以支持的最大SOAP信元。(有些版 本的TR069中MaxEnvelopes一直是1,接收方忽略响应中MaxEnvelopes的值)
SOAP构成如下图所示:
SOAP报文结构
HTTP:用于承载SOAP报文,要求支持HTTP1.1,协议允许ACS和CPE都可以主动发起连接。
SSL/TLS:可选的安全组件,TR069允许使用如下安全机制:
l ACE和CPE之间使用SSL/TLS,提供认证、保证数据机密和完整性;
l HTTP层提供的另一种基于共享密钥的CPE认证方法。
TCP:用于承载HTTP报文。
报文示例:ACS的HTTP应答报文,包含一个Inform方法的应答和一个GetRPCMethods方法的请求两个信元。
HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: nnn
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:cwmp="urn:dslforum-org:cwmp-1-0">
<soap:Header>
<cwmp:ID soap:mustUnderstand="1">919</cwmp:ID>
</soap:Header>
<soap:Body>
<cwmp:InformResponse>
<MaxEnvelopes>3</MaxEnvelopes>
</cwmp:nformResponse>
</soap:Body>
</soap:Envelope>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:cwmp="urn:dslforum-org:cwmp-1-0">
<soap:Body>
<cwmp:GetRPCMethods/>
</soap:Body>
</soap:Envelope>
5、TR069会话连接 5.1 由CPE主动发起(使用HTTP POST)前提:
CPE已经获取ACS的URL。获取方法:
l 本地配置。
l DHCP Option。
l 缺省。
触发会话连接请求条件:
l 上电或复位(包括初始化安装)。
l 每个PeriodicInformInterval。
l 由ScheduleInform 方法触发。
l 收到ACS的有效连接请求。
l ACS的URL发生变化。
l 部分参数由非ACS导致的变化,而这些参数的改变必须向ACS上报。
l Download或者upload完成后要ACS上报状态。
l 重新尝试一次失败的会话。
会话要求:
l 由CPE发起会话时,CPE必须首先调用Inform方法。
l 当一次会话非正常结束或者CPE向ACS上报事情的会话不能正常建立时,CPE必须根据“SessionRetry Policy”重新发起会话或者丢弃事件。
5.2 由ACS主动发起(使用HTTP GET)前提:
l ACS获取CPE的URL,该URL由ACS通过InternetGatewayDevice.ManagementServer. ConnectionRequestURL参数获取,这意味着ACS此前至少有一次由CPE发起的通信。
l 网络可达。
触发会话连接请求条件:
l ACS可以在任何时候用ConnectionRequest mechanism使CPE发起连接,使用HTTPGet通知CPE。经过必要的摘要认证后,CPE使用预先确定的URL发起会话连接请求。
会话要求:
l ACS必须使用HTTP 1.1 GET 语法CPE的URL,CPE的URL是随机生成的,也是唯一的。
l 必须使用HTTP,而不是HTTPS。
l ACS的HTTPGET不包含任何数据。
l CPE使用Digest认证,认证不过CPE不向ACS发起连接。
l CPE接受任何请求只要认证能通过。
l CPE向ACS回复200 (OK)或者204(No Content),而且回复优先于发起连接。
l CPE限制ACS的ConnectionRequest频率,如果频率高于限制,CPE向ACS回复503 (Service Unavailable)。
l ACS认证通过后,CPE必须在30秒内向ACS发起连接,在Inform中包含6 CONNECTION REQUEST 事件代码。
l 如果ACS认证通过但在30内没接受到CPE的连接请求就重复ConnectionRequest。
l 如果CPE发起连接请求之前又接受到几个ConnectionRequest,它发起一次连接。
l 如果CPE中会话状态中,那么它要么拒绝ConnectionRequest,要么会话结束后发起一次连接请求。
l 除了以上情况,CPE不能拒绝其它的ConnectionRequest。
5.3 会话终止
当没有需要处理的事务时(包括超时),CPE必须结束会话,并结束tcp连接。
只有如下条件都满足时,CPE才能终止会话。
l ACS没有向CPE的请求,CPE接受到的ACS的最后一个响应是空。
l CPE没有向ACS的语法,CPE向ACS发起一个空的HTTPPOST,而且HoldRequests为false。
l CPE接受能了所有曾经几ACS请求的响应。
l CPE向ACS发出了所有请求的响应。
l ACS响应超时或者接收到错误响应代码。
因为所有的连接都是CPE向ACS主动发起的,所以ACS不负责连接的发起和终止,但以下条件都满足时ACS认为连接已经终止。
l CPE没有更多的向ACS的请求,ACS接收到CPE的空HTTP POST,并且HoldRequests 为false。
l ACS没有向CPE的请求,并且向CPE发出了空的响应。
l ACS已经发出了所有请求对应的响应。
l ACS接收到了已经发出的所有请求对应的响应。
l CPE响应超时、返回错误代码或者CPE请求不对时给CPE返回错误代码。
5.3 会话示例
1. Perl CWMP Server
- https://github.com/dpavlin/perl-cwmp
2. mini-cwmp
- https://github.com/petersho/mini-cwmp
- http://mini-cwmp.sourceforge.net/
3. open-tr069
- http://code.google.com/p/open-tr069/
4. OpenACS
- http://sourceforge.net/projects/openacs/
5. jCPE
- http://code.google.com/p/jcpe/
6. netcwmp
- http://code.google.com/p/netcwmp/
7. jCWMPServer
- http://sourceforge.net/projects/jcwmpserver/
- http://ftp.heanet.ie/mirrors/sourceforge/j/project/jc/jcwmpserver/
8. cwmpclient
https://bitbucket.org/spapas/cwmpclient