作者:DomeSmart | 来源:互联网 | 2023-08-21 13:39
一、CWMP(TR-069)业务流程软件架构以及协议的具体解析过程二、CWMP(TR-069)通信过程我们来看一个tr069协议完整的通信过程.(1)建立TCP
一、 CWMP(TR-069)业务流程
软件架构以及协议的具体解析过程
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwODEyMjEwNDMyNTg0P3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVuRnBlR2xoYjE4d09RPT0vZm9udC81YTZMNUwyVC9mb250c2l6ZS80MDAvZmlsbC9JMEpCUWtGQ01BPT0vZGlzc29sdmUvNzAvZ3Jhdml0eS9DZW50ZXI=)
二、 CWMP(TR-069)通信过程
我们来看一个tr069协议完整的通信过程.
![](https://www.#.com/go/aHR0cDovL2ltZy5ibG9nLmNzZG4ubmV0LzIwMTcwODEyMjEwNTQ4OTQyP3dhdGVybWFyay8yL3RleHQvYUhSMGNEb3ZMMkpzYjJjdVkzTmtiaTV1WlhRdmVuRnBlR2xoYjE4d09RPT0vZm9udC81YTZMNUwyVC9mb250c2l6ZS80MDAvZmlsbC9JMEpCUWtGQ01BPT0vZGlzc29sdmUvNzAvZ3Jhdml0eS9DZW50ZXI=)
(1) 建立TCP连接。
(2) SSL初始化,建立安全机制。
(3) CPE发送Inform报文,开始建立CWMP连接。Inform报文使用Eventcode字段描述发送Inform报文的原因,该举例为“6 CONNECTION REQUEST”,表示ACS要求建立连接。
(4 )如果CPE通过ACS的认证,ACS将返回Inform响应报文,连接建立。
(5) 如果CPE没有别的请求,就会发送一个空报文,以满足HTTP报文请求/响应报文交互规则(CWMP是基于HTTP协议的,CWMP报文作为HTTP报文的数据部分封装在HTTP报文中)。
(6) ACS查询CPE上设置的ACS URL的值。
(7) CPE把获取到的ACS URL的值回复给ACS。
(8) ACS发现CPE的ACS URL是本机URL的值,于是发起Set请求,要求将CPE的ACS URL设置为备用ACS的URL的值。
(9) 设置成功,CPE发送响应报文。
(10) ACS发送空报文通知CPE没有别的请求了。
(11) CPE关闭连接。
之后,CPE将向备用ACS发起连接。
一次GetParameterValues首先由CPE主动发送INFORM消息.
POST /openacs/acs HTTP/1.1
Host: 192.168.7.1:9090
User-Agent: BCM_TR69_CPE_04_00
Connection: keep-alive
SOAPAction:
Content-Type: text/xml
Content-Length: 2452
2044897763
Bellmann
001F8F
HA930e
27FD6001F8F748602
8 DIAGNOSTICS COMPLETE
1
2012-12-10T13:21:37+00:00
0
InternetGatewayDevice.DeviceSummary
InternetGatewayDevice:1.1[](Baseline:1, EthernetLAN:1, USBLAN:1, WiFiLAN:1, EthernetWAN:1, Time:1, IPPing:1, DeviceAssociation:1), VoiceService:1.0[1](Endpoint:1, SIPEndpoint:1)
InternetGatewayDevice.DeviceInfo.SpecVersion
1.0
InternetGatewayDevice.DeviceInfo.HardwareVersion
HA930e_N_V2.0
InternetGatewayDevice.DeviceInfo.SoftwareVersion
HA930e_N_V1.00S
InternetGatewayDevice.DeviceInfo.ProvisioningCode
InternetGatewayDevice.ManagementServer.ConnectionRequestURL
http://192.168.7.143:30005/
InternetGatewayDevice.ManagementServer.ParameterKey
unsetCommandKey
InternetGatewayDevice.WANDevice.1.WANConnectionDevice.1.WANIPConnection.1.ExternalIPAddress
192.168.7.143
ACS端回应INFORM Response.
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.4; JBoss-4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181439)/JBossWeb-2.0
Set-COOKIE: JSESSIOnID=5CEB426075A42489AC3A7E6BAE004C61; Path=/
Content-Type: text/xml
Content-Length: 574
Date: Sat, 01 Nov 2014 07:53:48 GMT
2044897763
0
1
然后CPE端回应一个空的HTTP POST请求.
HTTP/1.1
Host: 192.168.7.1:9090
User-Agent: BCM_TR69_CPE_04_00
Connection: keep-alive
SOAPAction:
COOKIE: JSESSIOnID=5CEB426075A42489AC3A7E6BAE004C61
Content-Type: text/xml
Content-Length: 0
下面开始进入RPC阶段.由ACS发送RPC REQUEST,这里就是GetParameterValues, 目的是获得InternetGatewayDevice.DeviceSummary的值.
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.4; JBoss-4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181439)/JBossWeb-2.0
Content-Type: text/xml
Content-Length: 722
Date: Sat, 01 Nov 2014 07:53:48 GMT
ID:intrnl.unset.id.GetParameterValues1414832028729.539118694
0
InternetGatewayDevice.DeviceSummary
CPE调用后台的脚本查找到InternetGatewayDevice.DeviceSummary的值, 然后回应ACS.
POST /openacs/acs HTTP/1.1
Host: 192.168.7.1:9090
User-Agent: BCM_TR69_CPE_04_00
Connection: keep-alive
SOAPAction:
COOKIE: JSESSIOnID=5CEB426075A42489AC3A7E6BAE004C61
Content-Type: text/xml
Content-Length: 941
ID:intrnl.unset.id.GetParameterValues1414832028729.539118694
InternetGatewayDevice.DeviceSummary
InternetGatewayDevice:1.1[](Baseline:1, EthernetLAN:1, USBLAN:1, WiFiLAN:1, EthernetWAN:1, Time:1, IPPing:1, DeviceAssociation:1), VoiceService:1.0[1](Endpoint:1, SIPEndpoint:1)
这个值是:InternetGatewayDevice:1.1[](Baseline:1, EthernetLAN:1, USBLAN:1, WiFiLAN:1, EthernetWAN:1, Time:1, IPPing:1, DeviceAssociation:1), VoiceService:1.0[1](Endpoint:1, SIPEndpoint:1.
最后, ACS结束这次会话.
HTTP/1.1 204 No Content
Server: Apache-Coyote/1.1
X-Powered-By: Servlet 2.4; JBoss-4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181439)/JBossWeb-2.0
Date: Sat, 01 Nov 2014 07:53:53 GMT
整个通信过程我们需要注意以下几点.
什么时候Inform以及EventCode
每次Inform上报代表一次会话的开始, 因此Inform的时机很重要.我们至少需要实现:
CPE初次安装使用的时候. EventCode为BOOTSTRAP.
上电或者重启的时候. EventCode为BOOT.
每一个PeriodicInformInterval周期到来的时候. EventCode为PERIODIC.
ACS通过CPE的Httpd服务向CPE请求CONNECTION REQUEST的时候. EventCode为CONNECTION REQUEST.
Monitor的值发生改变的时候. EventCode要包含VALUE CHANGE.
更详细的支持需要查看手册.
COOKIE的作用
我们注意到Inform完成后, ACS和CPE使用同一个COOKIE通信, 直到本次会话结束. 事实上由于HTTP协议是无状态协议, 为了能够建立通信过程的顺序,维持状态机的正常工作,两边都是通过COOKIE来进行的.
XML节点的type
我们注意到在SOAP消息中,XML节点是包含类别的.比如xsi:type=”xsd:string”, 说明这个Value值是String类型. 虽然在某些ACS上即使去掉这些值也能工作, 但是不同的ACS对参数的检查严格程度不一样, 建议一定要加上.