TR069浅析

article/2025/10/18 21:35:00

何为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调用和应答方法

信包 名称空间标识:"http://schemas.xmlsoap.org/soap/envelope/"

序列号 名称空间标识:"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 或者发送消息

 

 

uploading.4e448015.gif转存失败重新上传取消uploading.4e448015.gif正在上传…重新上传取消

获取参数调用 RPC 方法:SetParameterValues,在下行中选择SetParameterValues 的适配函数 si_tr069_set_mesh_config_val,具体函数调用流程如下图所示

uploading.4e448015.gif转存失败重新上传取消uploading.4e448015.gif正在上传…重新上传取消


http://chatgpt.dhexx.cn/article/PXNLWhcx.shtml

相关文章

TR069

tr069简介 全称是“用户终端设备广域网管理协议&#xff08;CWMP&#xff09; 用于远程终端管理&#xff0c;比如远程的配置阿什么的&#xff08;对远程的设备进行配置等管理&#xff09; 1. TR069协议网络架构 ACS为自动配置服务器&#xff0c;负责对终端设备CPE进行管理…

CWMP协议(TR069协议)学习

文中借鉴了一些大神的整理&#xff0c;后面会贴上链接&#xff0c;如侵删 目录 一、概念&#xff08;来自百度百科&#xff09; 二、网络元素 三、基本功能 四、CWMP协议栈 五、远程调用方法&#xff08;RPC&#xff09;详细的RPC方法定义请参见TR-069 六、inform的事件…

TR069是什么鬼

一&#xff0c;TR069是什么 1&#xff0c;概念 搞嵌入式或通信设备的&#xff0c;或多或少都会听说TR069。那他是什么鬼&#xff1f; TR069&#xff0c;就是CPE广域网管理协议。 它用于ACS和CPE之间的自动协商交互&#xff0c;能够实现终端的自动配置。&#xff08; ACS&#x…

TR069协议详解

一、关于TR069协议 TR069, 全称“Technical Report 069”是由DSL Forum&#xff08;一个非盈利性的全球行业联盟,致力于发展宽带网络范&#xff0c; 其成员包括通讯、设备、计算机、网络和服务提供商等行业的领先厂商&#xff0c;现已更名为“Broadband Forum”&#xff09;修…

TR-069协议介绍

一、概念 关于TR-069 ①协议命名 TR-069, 全称“Technical Report 069”是由DSL Forum&#xff08;一个非盈利性的全球行业联盟,致力于发展宽带网络范&#xff09;。其成员包括通讯、设备、计算机、网络和服务提供商等行业的领先厂商&#xff0c;现已更名为“Broadband Forum…

apache多个php版本fcgi,apache使用mod_proxy_fcgi实现多版本php共存

2019-08-02 apache使用mod_proxy_fcgi实现多版本php共存 首先配置php 安装你想用的php版本&#xff0c;找到你的php-fpm.conf配置文件 将listen换成你想要的端口 比如listen 127.0.0.1:9099 注意&#xff0c;如果你的fpm系变量配置文件在php-fpm.d的www.conf下面&#xff0c;请…

搭建nginx+fcgi并使用Holer实现内外网访问

1、环境搭建 本文使用了ubuntu20.04系统进行搭建。 1.1搭建nginx服务器 到Nginx的官网(http://nginx.org/en/download.html)上去下载最新的源码包&#xff0c;本文使用的是nginx-1.20.0.tar.gz &#xff08;1&#xff09;执行tar -zxvf nginx-1.20.0.tar.gz 命令解压文件到当…

web服务选择lighttpd,采用fcgi组件技术扩展处理业务层

目录 一、简介fcgi&#xff1a;web和web服务器间数据传输的桥梁... 2 二、源码编译配置ARM Lighttpd Fastcgi C.. 3 【1】交叉编译。源文件都从官网下载。 Fcgi lighttpd zlib. 3 【2】配置服务器server.document-root"/www" fastcgi.server "bin-path&quo…

Nginx运行FastCGI程序(ngx_http_fastcgi_module模块、fcgi库、spwan-fcgi进程管理器)

一、什么是CGI 通用网关接口&#xff08;Common Gateway Interface、CGI&#xff09;描述了客户端和服务器程序之间传输数据的一种标准&#xff0c;可以让一个客户端&#xff0c;从网页浏览器向执行在网络服务器上的程序请求数据。 CGI 独立于任何语言的&#xff0c;CGI 程序可…

php运行方式fpm fcgi,php如何从fpm-fcgi切换运行模式到cli

在使用一个php爬虫的时候提示一定要用cli环境 我查看了当前php版本信息如下: 我打印 PHP_SAPI 显示 fpm-fcgi 如何才能变成 cli 服务器环境是linux+nginx 补充:我能不能理解为cli一定是要命令行模式? 刚刚在命令行里测试了PHP_SAPI 输出了cli 问:能不能http模拟调用实现cli…

spwan-fcgi和fcgi 关系

spwan-fcgi: 举个例子&#xff1a; spawn-fcgi -a 127.0.0.1 -p 10000 -f ./login spwan-fcgi.c: main 函数 会执行参数解析过程 获得 ip 端口 和 执行文件的路径。 bind_socket 函数会执行 sockt 的 绑定监听过程&#xff0c; 函数 fcgi_spawn_connection 会通过系统调用d…

nginx+spawn-fcgi+demo+fcgi库函数

由于项目中用到了nginxFastCGI相关内容&#xff0c;所以这段时间学习了一下&#xff0c;顺便记下相关内容。 我是在远程工作机上实验的&#xff0c;有个缺点就是没有root权限&#xff0c;所以有些步骤我就没做了&#xff0c;比如make install&#xff08;nginx&#xff09;、添…

【fcgi-2.4.0】移植fcgi-2.4.0到armv7平台

源码下载链接 Index of /lookaside/extras/fcgi/fcgi-2.4.0.tar.gz/d15060a813b91383a9f3c66faf84867e (fedoraproject.org)https://src.fedoraproject.org/lookaside/extras/fcgi/fcgi-2.4.0.tar.gz/d15060a813b91383a9f3c66faf84867e/下载fcgi-2.4.0.tar.gz 解压源码 tar …

程序异常捕获库 - CrashRpt

CrashRpt.dll用来在应用程序出现异常crash时&#xff0c;捕获到错误&#xff0c;并收集出错信息&#xff1a;MiniDump文件、硬件信息、系统信息、出错信息、进程信息、服务信息、驱动信息、启动信息、软件列表、端口信息、磁盘分区、WinSock LSP、IE插件、网卡信息。 1、使用方…

CrashRpt.dll用来在应用程序出现异常crash

欢迎加入我们的QQ群&#xff0c;无论你是否工作&#xff0c;学生&#xff0c;只要有c / vc / c 编程经验&#xff0c;就来吧&#xff01;158427611 欢迎加入我们的QQ群&#xff0c;无论你是否工作&#xff0c;学生&#xff0c;只要有c / vc / c 编程经验&#xff0c;就来吧&a…

crashRpt使用方法

从官网上下载crashRpt的源码&#xff0c;按说明编译出相应的lib和dll 1 在编译crashRpt的时候&#xff0c;在环境变量中设置 crashrptDirD:\work\AIW\WebMicaps\WebMicapsServer\src\CrashRpt&#xff0c;以简化编译 2 在主程序运行的工作目录下要拷贝crashRpt编译后生成…

CrashRpt使用

CrashRpt 中除了错误处理之外值得学习的地方还是不少的&#xff0c;如屏幕截图、邮件 发送。 这里主要提取屏幕截图的功能。 1. 从 CrashRpt 源码目录中分别复制 minizip 、 zlib 、 libpng 到一个目录作为公 共库使用&#xff0c;并分别编译它们生成 lib &#xff0c;需要设置…

crashRpt用法

从官网上下载crashRpt的源代码&#xff0c;按说明编译出对应的lib和dll 1 在编译crashRpt的时候&#xff0c;在环境变量中设置 crashrptDirD:\work\AIW\WebMicaps\WebMicapsServer\src\CrashRpt&#xff0c;以简化编译 2 在主程序执行的工作文件夹下要拷贝crashRpt编译后生…

捕获Windows C/C++程序异常奔溃工具CrashRpt

背景 在Windows环境下做C/C程序开发有段时间了&#xff0c;经常遇到程序奔溃时缺无法捕获&#xff0c;经同事推荐&#xff0c;知道了CrashRpt这个捕获C/C程序异常的工具&#xff0c;让我省去了通过增加打印调试去查询程序异常的繁琐方式。下面记录下使用这个工具的一些方法。 …

关于CrashRpt的研究

CrashRpt是轻量级的开源错误报告库 官网下载链接 ##编译工程 从官网下载下最新版&#xff08;v.1.4.3_r1645&#xff09;&#xff0c;解压后发现是visual studio的工程&#xff0c;使用的是vs2010。但我用得是vs2017&#xff0c;所以在编译之前要做一下处理&#xff1a; 对于…