热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

网络协议篇之CWMP协议(二)——CWMP(TR-069)业务流程

一、CWMP(TR-069)业务流程软件架构以及协议的具体解析过程二、CWMP(TR-069)通信过程我们来看一个tr069协议完整的通信过程.(1)建立TCP

一、 CWMP(TR-069)业务流程

        软件架构以及协议的具体解析过程



二、 CWMP(TR-069)通信过程

        我们来看一个tr069协议完整的通信过程. 

(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对参数的检查严格程度不一样, 建议一定要加上.









推荐阅读
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • 开发笔记:(002)spring容器中bean初始化销毁时执行的方法及其3种实现方式
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了(002)spring容器中bean初始化销毁时执行的方法及其3种实现方式相关的知识,希望对你有一定的参考价值。 ... [详细]
  • http头_http头部注入
    1、http头部注入分析1、原理 ... [详细]
  • 在一对一直播源码使用过程中,有时会出现软键盘切换闪屏问题,就是当切换表情的时候屏幕会跳动,因此要对一对一直播源码表情面板无缝切换进行优化。 ... [详细]
  • 这两天用到了ListView,写下遇到的一些问题。首先是ListView本身与子控件的焦点问题,比如我这里子控件用到了Button,在需要ListView中的根布局属性上加上下面的这一个属性:and ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
author-avatar
DomeSmart
这个家伙很懒,什么也没留下!
RankList | 热门文章