何为TR069?
TR069, 全称“Technical Report 069”是由DSL Forum修订的一份技术规范,该规范是应用层的管理协议,命名为“CPE广域网管理协议”。
TR069定义了一套全新的网管体系结构,包括管理模型,交互接口及基本的管理参数,能够有效地实施对家庭网络设备的管理。
协议栈
CPE/ACS Management Applicantion | 用于CPE广域网管理协议的CPE和ACS |
RPC Methods | 协议定义的特定RPC方法 |
SOAP | 消息传输基于HTTP1.1,消息内容使用SOAP包进行封装,包含SOAP head和SOAP body两部分组成的XML数据 |
HTTP | 要求支持HTTP1.1 |
SSL/TSL | 标准的 internet 传输层安全协议 |
TCP/IP | 标准TCP/IP传输 |
SOAP报文实例解析
src:192.168.65.111:41917 dst:192.168.65.3:9090 time:2019/10/15 14:07:23POST / HTTP/1.1Host: 192.168.65.3:9090Content-Type: text/xml; charset="utf-8"Keep-Alive: Connection: TE, Keep-AliveTE: trailersContent-Length: 2814<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:cwmp="urn:dslforum-org:cwmp-1-0"><SOAP-ENV:Header><cwmp:ID SOAP-ENV:mustUnderstand="1">21299202</cwmp:ID></SOAP-ENV:Header><SOAP-ENV:Body><cwmp:Inform> //inform方法<DeviceId> //设备信息//设备厂商 及 厂商唯一标识<Manufacturer>SKYW</Manufacturer><OUI>3C1835</OUI>//设备类型 及 设备序列号<ProductClass>DT741v231</ProductClass><SerialNumber>413433C1835B523F1</SerialNumber></DeviceId>//引起会话的具体事件<Event SOAP-ENC:arrayType="cwmp:EventStruct[3]"><EventStruct><EventCode>4 VALUE CHANGE</EventCode><CommandKey></CommandKey></EventStruct><EventStruct>//CPE初次安装使用的时候. EventCode为 0 BOOTSTRAP<EventCode>0 BOOTSTRAP</EventCode><CommandKey></CommandKey></EventStruct><EventStruct><EventCode>X CMCC BIND</EventCode><CommandKey></CommandKey></EventStruct></Event>//接收响应的允许SOAP信包数目,0表示无限制<MaxEnvelopes>1</MaxEnvelopes><CurrentTime>1970-01-01T13:10:02</CurrentTime>//完成一次inform调用前,尝试次数每次加1<RetryCount>0</RetryCount>//CPE设备参数列表<ParameterList SOAP-ENC:arrayType="cwmp:ParameterValueStruct[10]"><ParameterValueStruct>//设备描述信息<Name>InternetGatewayDevice.DeviceInfo.SpecVersion</Name><Value xsi:type="xsd:string">1.0</Value></ParameterValueStruct><ParameterValueStruct>//设备的硬件版本信息<Name>InternetGatewayDevice.DeviceInfo.HardwareVersion</Name><Value xsi:type="xsd:string">V1.0</Value></ParameterValueStruct><ParameterValueStruct>//设备的软件版本信息<Name>InternetGatewayDevice.DeviceInfo.SoftwareVersion</Name><Value xsi:type="xsd:string">G231M299R1.0.0</Value></ParameterValueStruct><ParameterValueStruct><Name>InternetGatewayDevice.DeviceInfo.ProvisioningCode</Name><Value xsi:type="xsd:string">TLCO.GRP2</Value></ParameterValueStruct><ParameterValueStruct>//请求连接的URL(设备联系地址) <Name>InternetGatewayDevice.ManagementServer.ConnectionRequestURL</Name><Value xsi:type="xsd:string">http://192.168.65.111:58000</Value></ParameterValueStruct><ParameterValueStruct><Name>InternetGatewayDevice.ManagementServer.ParameterKey</Name><Value xsi:type="xsd:any"></Value></ParameterValueStruct><ParameterValueStruct><Name>InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.ExternalIPAddress</Name><Value xsi:type="xsd:string">192.168.65.111</Value></ParameterValueStruct><ParameterValueStruct>//认证密码<Name>InternetGatewayDevice.X_CMCC_UserInfo.Password</Name><Value xsi:type="xsd:string">wxw123</Value></ParameterValueStruct><ParameterValueStruct><Name>InternetGatewayDevice.X_CMCC_UserInfo.UserId</Name><Value xsi:type="xsd:any"></Value></ParameterValueStruct><ParameterValueStruct>//网络服务器URL<Name>InternetGatewayDevice.ManagementServer.URL</Name><Value xsi:type="xsd:string">http://192.168.65.3:9090</Value></ParameterValueStruct></ParameterList></cwmp:Inform></SOAP-ENV:Body></SOAP-ENV:Envelope>
发现过程
ACS的被发现:
1. CPE可以在本地配置ACS的URL,然后通过DNS来解析出URL中ACS主机部分所对应的IP地址
2. CPE可以设置默认ACS URL,当没有其它URL信息提供时,使用该默认值。(ACS的URL必须使用HTTP/HTTPS形式,所以ACS支持SSL,但CPE不支持SSL,所以它可以通过HTTP形式来保持URL不变)
在建立连接的过程中,ACS可以随时修改存储在CPE中的URL值;但CPE不应具备该能力,应该限制仅能在初始化安装时在本地设置ACS URL,后续只能通过ACS进行修改,以确保严格的安全机制。
连接的建立
CPE连接的发起
CPE可以在任何时刻使用之前决定的ACS地址发起与ACS服务器的连接
在下述情况中,CPE必须与ACS建立连接,并启用Inform RPC方法
l 在初始化安装时,CPE第一次建立与网络的连接 0 BOOTSTRAP
l 在加电或重置时 1 BOOT
l 在每个PeriodicInformInterval(比如,每24小时) 2 PERIODIC
l 当可选的ScheduleInform方法被要求时 3 SCHEDULED
l 当CPE接收到来自ACS的有效连接请求时
l 当ACS的URL变化时
l 当参数发生更改,而此参数要求在改变时发起Inform报文 4 VALUE CHANGE
对Internet网关设备,涉及改变的参数包括:默认宽带连接的IP地址 管理IP地址(与连接请求URL关联) 供给代码 软件版本
l 当由ACS通过调用SetParameterAttributes方法,标定为“主动通告”(active notification)的参数值发生了外在原因导致的改变。由ACS自身通过SetParameterValues对参数的改变不得引发初始化新会话。
l 当会话发起 6 CONNECTION REQUEST
ACS连接的发起
ACS可在任何时刻要求CPE使用连接请求(Connection Request)通告机制向ACS发起连接。
依赖条件:CPE拥有ACS通过路由可达到的IP地址(为什么是CPE发起连接? 因为可能存在防火墙或NAT设备)
连接请求通告机制定义如下:
l 连接请求通告是CPE指定的特定URL的HTTP Get。 该URL值是CPE的只读参数。URL值的路径应当由CPE随机产生,以使每台CPE的值不同。
l 连接请求通告必须使用HTTP,而不是HTTPS。因为CPE不支持SSL
l 在连接请求HTTP Get通告中不会承载数据。任何可能的数据都应当由CPE忽略。
l CPE应当在处理该报文之前,使用摘要认证来认证ACS ----- 如果认证失败,CPE不应当向ACS发起连接。认证ACS使用的共享密钥是CPE的可更改参数。
l CPE应当限制在指定时间段接收连接请求通告的次数以进一步减少可能发生的拒绝服务(DOS)攻击。
l 对指定端口和URL的HTTP Get成功认证后,CPE会执行一个固定的动作:它与预先已确定的ACS地址建立会话,并在成功建立会话连接后发送一条Event Code为
6 connection request 的Inform报文。
如果CPE接收到一条连接请求通告时,已经与ACS建立了一个会话,CPE应在结束当前会话之后,方能建立新的会话。
本机制的前提是ACS在此前至少有一次由CPE发起的通信。在该此通信中,如果ACS希望允许将来进行ACS发起的通信,则会读取InternetGatewayDevice.ManagementServer.ConnectionRequestURL参数的值。
安全机制SSL/TLS && TCP
SSL/TLS提供机密性和数据完整性,允许基于证书认证而不是共享密钥认证。
TCP是具有可靠性的安全连接
SOAP报文(MaxEnvelopes :单个HTTP Request报文包含最大信包数目)
CPE WAN管理协议定义SOAP 1.1为编码语法,用来传输RPC调用和应答方法
l 信包 名称空间标识:"http://schemas.xmlsoap.org/soap/envelope/"
l 序列号 名称空间标识:"http://schemas.xmlsoap.org/soap/encoding/"
l 本版本所有相关的属性与元素皆与该空间标识关联:urn:dslforum-org:cwmp-1-0
ACS发送给CPE的SOAP请求基于HTTP response,而CPE返回给ACS的SOAP应答则基于后续的HTTP post。
为保证对请求和应答的正确关联,请求者可以在SOAP包头中加入一个ID标识。
如果采用了这一标识,必须在应答中返回相同ID值。
l SOAP的faultcode元素必须指明该错误对应的源头是在客户方还是服务器方。 后面的错误码FaultCode:8000开头的为服务器方 9000开头的为CPE端
l SOAP的faultstring子元素必须包含字符串“CWMP fault”。
l SOAP的detail元素必须包含一个在“urn:dslforum-org:cwmp-1-0”名称空间中定义的错误结构
文件传输
CPE收到ACS的下载或上传请求,要求执行文件传输,并且标明该文件位置的HTTP URL中的主机名与ACS相同
传输方式:
l CPE可以在已经建立的连接上发送HTTP get/post。一旦文件传输结束,CPE可以继续发送其它信息给ACS并继续维持该连接。
l CPE可以打开另一条新的连接,通过它来传输文件,并同时维持与ACS的会话,在该会话中,CPE可以继续发送报文。
l CPE可以结束与ACS的会话,然后执行传输。
如果文件位置不是HTTP URL,或者文件不在ACS上,则只能使用后面的两种选项。
会话session
1. CPE发起会话
CPE向ACS发起一个事务会话。一旦与ACS的连接成功建立,CPE发送一条初始Inform请求(6 CONNECTION REQUEST)给ACS,以开始一个会话。
2. 进向请求 (ACS)
ACS必须按照接收来自CPE的soap包次序来依次作出应答,若ACS不希望CPE在会话期间发送请求的话,可以在传送回给CPE中的信包中,将HoldRequest值设置为true,反之则改为false。
3. 出向请求 (ACS)
对于ACS的出向请求,可以不必理会对CPE的应答信包,ACS可以在任何时候发送;只有在ACS没有请求和等待的应答时,才能发送一个空的HTTP response。
4. CPE结束会话(只有CPE能发起)
满足条件:a. CPE没有更多请求发送给ACS,体现在
1)ACS最近一次的HTTP post不含信包
2) ACS收到的信包中NoMoreRequests值为true
b. ACS没有更多请求发送给CPE
c. 所有的请求和应答都已经接收
超过30秒没有接受到CPE的HTTP post包后,ACS可以发起重新连接请求
EventCode值的描述
"0 BOOTSTRAP" | 表明会话发起原因是CPE首次安装或ACS的URL发生变化 |
"1 BOOT" | 表明会话发起原因是重启或加电 |
"2 PERIODIC" | 表明会话发起原因是定期的Inform引起。 |
"3 SCHEDULED" | 表明会话发起原因是调用了ScheduleInform方法。 |
"4 VALUE CHANGE" | 表明会话发起原因是一个或多个参数值的变化。该参数值包括在Inform方法的调用中。例如CPE分配了新的IP地址。 |
"5 KICKED" | 表明会话发起原因是为了web标识管理,及在本会话中将会调用Kicked方法 |
"6 CONNECTION REQUEST" | 表明会话发起原因是源自服务器的Connection Request notification。 |
"7 TRANSFER COMPLETE " | 表明会话的发起是为了表明以前请求的下载或上载(不管是否成功)已经结束,在此会话中将要调用一次或多次TransferComplete方法。 |
"8 DIAGNOSTICS COMPLETE" | 当完成由ACS发起的诊断测试结束后,重新与ACS建立连接时使用。如DSL环路诊断 |
"M "<method name> | 如果这是另一方法的结果,值“M”后紧接着一个空格和方法的名称。如:"M Reboot" 或 "M Download" |
相关参数:
MaxEnvelopes | 一个HTTP恢复中能包含的最大SOAP信包数目 |
RetryCount | 在一次成功调用inform前的调用失败的次数,在已经发送了Inform报文并且收到了成功应答后,该值重置为零 |
DeviceID | 唯一的CPE结构标识 |
ProductClass | 产品类型标识 |
Manufacturer | 设备的制造商 |
OUI | 设备的制造商组织的唯一标识 |
FaultStruct | 文件传输成功该值为0,失败具体体现在下面两个参数 |
FaultCode | 错误代码8xxx开头为ACS服务器出错,9xxx开头为CPE出错 |
FaultString | 错误描述 |
下图为现场报RMS注册失败的报文实例(过滤条件:HTTP && xml)
原因是注册上报缺少了相关必要参数导致。
常见的错误码
错误代码 | 描述 |
8000 | 方法不支持 |
8001 | 拒绝请求(未指明原因) |
8002 | 内部错误 |
8003 | 无效参数 |
8004 | 资源超限 |
8005 | 重试请求 |
8800 - 8899 | 厂商自定义错误代码 |
9000 | 方法不支持 |
9001 | 拒绝请求(未说明原因) |
9002 | 内部错误 |
9003 | 无效参数 |
9004 | 资源超限(当用于SetParameterValues的关联时,它不得用来指示参数错误) |
9005 | 无效参数名(与Set/GetParameterValues,GetParameterNames相关) |
9006 | 无效参数类型(与SetParameterValues相关) |
9007 | 无效参数值(与SetParameterValues相关) |
9008 | 试图设置不可写的参数(与SetParameterValues相关) |
9009 | Notification请求被拒(与SetParameterAttributes方法相关) |
9010 | 下载失败(与Download或TransferComplete方法相关) |
9011 | 上载失败(与Upload或TransferComplete方法相关) |
9012 | 文件传输服务器认证失败(与Upload,Download,TransferComplete方法相关) |
9013 | 文件传输的协议不支持(与Upload和Download方法相关) |
9800 - 9899 | 厂商定义的错误代码 |
常见的RPC方法
| 方法名称 | 描述 |
ACS方法 | Inform | CPE建立与ACS连接时调用该方法,初始化传输序列 |
| TransferComplete | CPE通知ACS由以前的 Download 或 Upload 方法调用而引起 的文件传输已经结束 |
|
|
|
CPE方法 | GetRPCMethods | ACS用来发现CPE所支持的方法集 |
| SetParameterValues | ACS可用此方法来修改CPE的一个或多个参数 |
| GetParameterValues | ACS用来获取一个或多个CPE参数的值 |
| AddObject | ACS使用来建立一个多实例对象的新实例 |
| DeleteObject | 用于删除一个对象的特定实例 |
| GetParameterNames | ACS用来发现CPE上的可访问的参数 |
| Download | 由ACS使用来指示CPE在指定的位置下载特定的文件 |
| Upload | ACS用本方法使CPE向指定的位置上载一个特定的文件 |
| Reboot | CPE重新启动 |
TR069与模块之间的交互
TR069在整体软件架构中是一个管理媒介,和几乎所有的业务模块都有交互,
具体业务实现需要调用相应模块的PMAPI 接口。可以将交互分为两个方向,
下图蓝线所示,TR069 跟其它模块交互通过调用对应模块 PMAPI;
下图绿线所示,其它模块跟 TR069 交互通过调用 TR069 的 PMAPI 或者发送消息
转存失败重新上传取消
正在上传…重新上传取消
获取参数调用 RPC 方法:SetParameterValues,在下行中选择SetParameterValues 的适配函数 si_tr069_set_mesh_config_val,具体函数调用流程如下图所示。
转存失败重新上传取消
正在上传…重新上传取消