TR-069协议学习--Soap报文、事件、RPC方法

目录

一、SOAP报文

二、事件

三、RPC方法

四、错误码


一、SOAP报文

SOAP(Simple Object Access Protocol,简单对象访问协议)是一种基于XML的协议,用于在网络上交换结构化信息。SOAP报文是SOAP协议中用于传输数据的XML文档,它定义了消息的格式和传输规则,并被广泛用于Web服务之间的通信。

· SOAP报文的特点

  1. 基于XML:SOAP报文是一个XML文档,使用XML格式来编码消息内容,这使得SOAP具有良好的可读性和可扩展性。

  2. 传输协议独立:SOAP消息可以通过多种传输协议进行传输,如HTTP、SMTP、TCP等。这种传输协议独立性使得SOAP可以在不同的网络环境和应用场景中广泛应用。

  3. 可扩展性:SOAP协议设计为可扩展的,允许在消息中添加自定义的头部信息(Header),用于实现各种功能,如认证、事务处理、加密等。

· SOAP报文的组成部分

一个SOAP报文通常包含以下部分:

  • Envelope(信封):SOAP报文的根元素,用于标识这是一个SOAP消息,并包含其他所有部分。

  • Header(头部):可选部分,用于添加扩展信息,如认证信息、事务信息等。

  • Body(主体):必需部分,包含实际的请求或响应信息。

  • Fault(错误) :可选部分,用于描述在处理消息过程中发生的错误。

    示例:

    XML 复制代码
    <SOAP-ENV:Envelope
        xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
        xmlns:cwmp="urn:dslforum-org:cwmp-1-0"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <SOAP-ENV:Header>
            <cwmp:ID SOAP-ENV:mustUnderstand="1">CPE</cwmp:ID>
            <cwmp:HoldRequests SOAP-ENV:mustUnderstand="1">0</cwmp:HoldRequests>
        </SOAP-ENV:Header>
        <SOAP-ENV:Body>
            <cwmp:InformResponse>
                <MaxEnvelopes xsi:type="xsd:unsignedInt">1</MaxEnvelopes>
            </cwmp:InformResponse>
        </SOAP-ENV:Body>
    </SOAP-ENV:Envelope>

二、事件

TR069协议定义了一系列的事件类型,用于描述和管理用户设备(CPE)的状态和行为。每种事件类型都有一个对应的事件代码,以下是一些常见的TR069事件类型:

  • 0 BOOTSTRAP:指出由于CPE第一次安装或是ACS的URL改变而引起会话建立。

  • 1 BOOT:当给电或是复位时引起的会话建立,包括初始系统启动或是由于其他原因的再启动。

  • 2 PERIODIC:在周期通知间隔时会话建立,用作心跳包时间。

  • 3 SCHEDULED:由于调用ScheduleInform方法会话建立。

  • 4 VALUE CHANGE:指出从上次成功的Inform后,具有Passive和Active通知属性的一个或多个参数的值发生了非ACS配置而产生的改变。

  • 5 KICKED:指出会话建立的目的是网页验证,并且Kicked方法会在这个会话中调用一次或多次。

  • 6 CONNECTION REQUEST:由于ACS发送了连接请求而使会话建立。

  • 7 TRANSFER COMPLETE:由于先前请求的下载或上传完成而引起会话建立。

  • 8 DIAGNOSTICS COMPLETE:当完成了一个或多个由ACS启动的诊断,CPE会用该事件码重新建立起一个连接。

事件通过RPC方法Inform携带,由CPE通知向ACS,下面为2 PERIODIC事件上报soap报文示例:

XML 复制代码
<SOAP-ENV:Envelope
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:cwmp="urn:dslforum-org:cwmp-1-0"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <SOAP-ENV:Header>
        <cwmp:ID SOAP-ENV:mustUnderstand="1">CPE</cwmp:ID>
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
        <cwmp:Inform>
            <DeviceId>
                <Manufacturer xsi:type="xsd:string"></Manufacturer>
                <OUI xsi:type="xsd:string"></OUI>
                <ProductClass xsi:type="xsd:string"></ProductClass>
                <SerialNumber xsi:type="xsd:string"></SerialNumber>
            </DeviceId>
            <Event SOAP-ENC:arrayType="cwmp:EventStruct[1]">
                <EventStruct>
                    <EventCode xsi:type="xsd:string">2 PERIODIC</EventCode>
                    <CommandKey xsi:type="xsd:string"></CommandKey>
                </EventStruct>
            </Event>
            <MaxEnvelopes xsi:type="xsd:unsignedInt">1</MaxEnvelopes>
            <CurrentTime xsi:type="xsd:dateTime"></CurrentTime>
            <RetryCount xsi:type="xsd:unsignedInt">0</RetryCount>
            <ParameterList SOAP-ENC:arrayType="cwmp:ParameterValueStruct[*]">
                <ParameterValueStruct> 
                    <Name></Name>
                    <Value xsi:type="xsd:string"></Value>
                </ParameterValueStruct>
            </ParameterList>
        </cwmp:Inform>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

<SOAP-ENV:Envelope
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:cwmp="urn:dslforum-org:cwmp-1-0"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <SOAP-ENV:Header>
        <cwmp:ID SOAP-ENV:mustUnderstand="1">CPE</cwmp:ID>
        <cwmp:HoldRequests SOAP-ENV:mustUnderstand="1">0</cwmp:HoldRequests>
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
        <cwmp:InformResponse>
            <MaxEnvelopes xsi:type="xsd:unsignedInt">1</MaxEnvelopes>
        </cwmp:InformResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

三、RPC方法

RPC(Remote Procedure Call,远程过程调用)方法是用于ACS(Auto Configuration Server,自动配置服务器)与CPE(Customer Premises Equipment,客户端设备)之间进行通信和管理的一组标准方法。以下是TR069中定义的一些主要RPC方法及其功能:

ACS到CPE的RPC方法

  • GetParameterValues:获取设备上一个或多个参数的当前值。可以用于查询设备的配置信息或状态信息,携带ParameterNames。

  • SetParameterValues:设置设备上一个或多个参数的值。用于远程配置设备的参数,待配置参数列表ParameterList 中携带Name、Value。

  • GetParameterNames:获取设备上某个对象的所有参数名称。用于了解设备的参数结构;携带ParameterPath、NextLevel,如果nextlevel为1,则获取父节点下一层节点参数信息。

  • GetParameterAttributes:获取参数的属性信息,如是否可写、是否可订阅等,携带ParameterNames。

  • SetParameterAttributes:设置参数的属性信息;携带Name路径名,NotificationChange,如果为true,Notification的值将替换该参数或参数组的当前notification的设置,如果是false,则不作任何notification设置的改动;Notification为1被动上报,CPE发起一个到ACS的会话时携带变更参数信息,为2主动上报,立即创建会话上报。AccessListChange如果为true,AccessList的值会替换该参数或参数组的当前access list值,如果为false,access list不作改动。AccessList表示零个或多个实体的数组,该实体对指定的参数有写权限。如果数组中不包含条目,则只允许ACS有写权限。

  • GetRPCMethods:获取设备支持的RPC方法列表。用于了解设备的能力和功能。

  • AddObject:在设备上添加一个新的对象实例,携带objectName、ParameterKey。

  • DeleteObject:删除设备上已存在的对象实例,携带objectName、ParameterKey。

  • Reboot:触发设备重启。用于远程重启设备以应用配置更改或解决设备问题。

  • Download:请求设备下载文件,通常用于固件升级或配置文件下载。

  • Upload:请求设备上传文件,通常用于配置文件上传、日志文件上传。

  • FactoryReset:将设备恢复到出厂设置。用于清除所有用户配置并恢复设备的初始状态.

CPE到ACS的RPC方法

  • Inform :CPE向ACS报告其状态信息,如设备启动、参数值变化等。任何时刻要建立与ACS的连接,CPE必须调用Inform方法。这是CPE主动向ACS发送信息的主要方法;需要携带DeviceID、Event、MaxEnvelopes、CurrentTime、RetryCount、ParameterList信息;其中参数列表通常需要支持上报InternetGatewayDevice.DeviceInfo.SpecVersion

    InternetGatewayDevice.DeviceInfo.HardwareVersion

    InternetGatewayDevice.DeviceInfo.SoftwareVersion

    InternetGatewayDevice.DeviceInfo.ProvisioningCode

    InternetGatewayDevice.ManagementServer.ConnectionRequestURL

    InternetGatewayDevice.ManagementServer.ParameterKey

    InternetGatewayDevice.WANDevice.*.WANConnectionDevice.*.WANIPConnection.*.ExternalIPAddress;还需要携带CommandKey,有助于ACS匹配通知上报结果。

  • TransferComplete:在完成文件下载或上传后,CPE向ACS报告传输结果; 需要携带FaultStruct包含FaultCode和FaultString,StartTime、CompleteTime、CommandKey。该方法的错误码定义为9001,9002,9010,9011,9012。

  • **GetParameterValuesResponse:**响应ParameterList,如果错误返回Fault报文,该方法的错误码定义为9001-9005。

  • **SetParameterValuesResponse:**响应Status,如果错误返回Fault报文,该方法的错误码定义为9001-9008。

  • **GetParameterAttributesResponse:**响应ParameterList,包含Name、Notification、AccessList,如果错误返回Fault报文,该方法的错误码定义为9001-9005。

  • **SetParameterAttributesResponse:**响应无应答参数,如果错误返回Fault报文,该方法的错误码定义为9001-9005、9009。

  • **AddObjectResponse:**响应新增实例号InstanceNumber、Status,如果错误返回Fault报文,该方法的错误码定义为9001-9005.

  • **DeleteObjectResponse:**响应Status,如果错误返回Fault报文,该方法的错误码定义为9001、9002、9003、9005.

  • **DownloadResponse:**响应Status、StartTime、CompleteTime,如果错误返回Fault报文,该方法的错误码定义为9000-9003、9010、9012、9013.

  • UploadResponse: 响应Status、StartTime、CompleteTime,如果错误返回Fault报文,该方法的错误码定义为9000-9003、9011-9013.

    Download方法soap报文示例:

XML 复制代码
<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">192.168.1.100:8080</cwmp:ID>
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
        <cwmp:Download>
            <CommandKey></CommandKey>
            <FileType>1 Firmware Upgrade Image</FileType>
            <URL>http://192.168.1.100/version</URL>
            <Username></Username>
            <Password></Password>
            <FileSize>0</FileSize>
            <TargetFileName></TargetFileName>
            <DelaySeconds>2</DelaySeconds>
            <SuccessURL>success.html</SuccessURL>
            <FailureURL>fail.html</FailureURL>
        </cwmp:Download>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

<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">192.168.1.100:8080</cwmp:ID>
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
        <cwmp:DownloadResponse>
            <Status>1</Status>
            <StartTime>0001-01-01T00:00:00Z</StartTime>
            <CompleteTime>0001-01-01T00:00:00Z</CompleteTime>
        </cwmp:DownloadResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

<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">1</cwmp:ID>
    </SOAP-ENV:Header>
    <SOAP-ENV:Body>
        <cwmp:TransferComplete>
            <CommandKey></CommandKey>
            <FaultStruct>
                <FaultCode>9018</FaultCode>
                <FaultString>File transfer failure: file corrupted or otherwise unusable</FaultString>
            </FaultStruct>
            <StartTime>0001-01-01T00:00:00Z</StartTime>
            <CompleteTime>0001-01-01T00:00:00Z</CompleteTime>
        </cwmp:TransferComplete>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

四、错误码

  1. CPE常见对应错误代码和错误原因主要包括:

9003表示调用RPC方法传入了无效的参数,

9005表示传入无效的参数名(与Set/GetParameterValues,GetParameterNames,Set/GetParameterAttributes相关),

9006表示无效的参数类型(与SetParameterValues相关),

9007表示无效的参数值(与SetParameterValues相关),9010表示Download下载失败(与Download或TransferComplete方法相关),

9011表示Upload上载失败(与Upload或TransferComplete方法相关)等,

  1. 服务器常见对应错误代码和错误原因主要包括:

8000表示方法不支持,8003表示无效参数,8005表示重试请求。

相关推荐
路星辞*1 小时前
基于访问表的安全防范策略
运维·网络·安全·智能路由器·acl
跳跳的向阳花1 小时前
06、Docker学习,常用安装:Zookeeper、ES、Minio
学习·docker·zookeeper
kaixin_啊啊1 小时前
静态路由配置与调试——计算机网络实训day1
网络·计算机网络
tt5555555555551 小时前
机器学习学习笔记-20241204-注意力机制和空间归纳偏置
笔记·学习·机器学习
玖石书2 小时前
[IoT]物联网(IoT)网络的安全性
网络·物联网·智能路由器
sleP4o2 小时前
Git的学习和常见问题
git·学习·elasticsearch
DataDynamos数动实验室2 小时前
【计算机网络】IPSec的安全协议和封装模式
网络·计算机网络·网络安全
feiyangqingyun3 小时前
Qt监控系统远程网络登录/请求设备列表/服务器查看实时流/回放视频/验证码请求
服务器·网络·qt
JermeryBesian3 小时前
Flink系列知识讲解之:网络监控、指标与反压
大数据·网络·flink
xianwu5433 小时前
反向代理模块开发,
linux·开发语言·网络·c++·git