TR069 协议基本流程

关键字:CPE操作 ACS操作

CPE发起连接的情况:

  • 初始安装时第一次向接入网发起连接。
  • 上电或重启。
  • 在每一个通知周期间隔。
  • 被optional ScheduleInform method 所指示需要如此执行。
  • 接收到ACS的有效链接请求。
  • ACS的URL发生改变。
  • 一个在修改后需要初始化一个Inform的参数变化时。
  • 不正常终结的会话根据会话重新建立规则发起重建。

CPE操作:
 
1.会话发起
 
  和ACS的连接建立成功后,CPE发送Inform请求到ACS来发起会话。指示CPE当前状态,表示已经准备好接收ACS的请求。
 
  收到一个成功的Inform响应,CPE才会认为会话成功建立。
 
2.接收请求
  
  在一个会话中,收到来自ACS的SOAP请求,CPE必须在下一个发送给ACS的HTTP响应此请求。

3.发送请求

  在一个已经成功发起的会话中,如果CPE要发送一个或多个请求,必须满足以下条件:

  •   最近从ACS收到的HTTP响应不包含SOAP请求。
  •   ACS已经指示HoldRequests为false的SOAP封装包包括(HoldRequests为false、没有HoldRequests头的SOAP封装包、没有SOAP封装的空HTTP响应)
  •   在当前会话已经运行的这段时间,在ACS已经指示HoldRequests为false后,CPE没有发送一个空HTTP POST。

    在一个会话中,如果没有满足上面任何一种情况或者CPE没有给ACS的请求,并且ACS最近发送的HTTP响应没有包含一个SOAP请求,则CPE必须发送一个空HTTP POST。

    一旦最近的HoldRequests为false,且CPE发送了一个空HTTP POST,CPE必须不能在这个会话的接下来的时间里发送任何更多的请求。只能在接下来的会话中发送。

4.会话终止

  满足一下所有条件,CPE必须终止这个事务会话:

      1) ACS没有更多的请求,根据ACS的最近HTTP响应为空判断。
  
      2) CPE没有更多的请求,并已经向ACS发送了一个空HTTP POST,并包括HoldRequests为false。

      3) CPE已经从ACS接收了所有的响应消息。

      4) CPE已经发送了所有的响应消息给ACS作为已经收到的请求的响应。

    如果一个本地规定的不小于30秒的周期内没有收到ACS的HTTP响应,CPE必须认为一个会话被异常终止了。如果CPE接收HTTP响应出错,CPE必须不能在同一个会话中尝试重传这个对应的HTTP请求。

    如果CPE在响应一个Inform请求时收到了一个错误码不是“Retry request”
8005的SOAP层错误,CPE必须认为这个会话已经被异常终止了。

    如果CPE从ACS收到一个HTTP响应来指示不合法的XML,认为此SOAP结构无效或者这个协议已经受到了侵犯,CPE必须认为这个会话已经被异常终止了。

    如果CPE从ACS收到的不是由自己处理的错误状态码的HTTP响应,那么CPE必须认为这个会话已经被异常终止了。

    如果没有以上情况,则继续此会话。

5.事件

   事件即指示,CPE必须至少一次的尝试递交每个事件。一旦CPE递交成功了一个事件,就不能再一次发送同样的事件。ACS必须准备多次接收一个事件,因为ACS已经发送了一个响应,但CPE一直收不到。某些事件可以合法的重复发送,即使已经在一起的会话中发送成功(如periodic,value change)。

    事件类型分为非累计single和累积multiple两种。如果CPE在“1 BOOT”事件还没提交时就重启了,则没有必要在下一个Inform中包含两个“1 BOOT”。但是在“M Download”还没提交时一个下载完成了,下一个Inform里则包含两个“M Download”事件,因为每一个都关联了一个不同的ACS请求。

single和multiple定义如下:

    如果发生了一个single累积行为的事件,这一列事件中下一个Inform中必须只能包含一个此事件码(EventCode)的实例,无论是否有同类型未发送的事件。

    如果发生了一个multiple累积行为的事件,这个新的事件码(EventCode)必须包含在事件列表中,不受同一类型的任何没有提交的事件的影响。它必须不能影响那些没有提交的事件。

  当一个或多个事件跟同一个根源相关联,所有事件必须包含在一个事件列表中。

6.方法重试行为

   如果对来自CPE的请求的响应,CPE收到一个重试请求(响应代码8005),CPE必须在当前会话的下一个HTTP POST中重新发送一个请求,此行为适用于所有的ACS方法。

    如果CPE受到一个非Inform方法和错误码不是8005的响应,CPE必须继续本次会话,且不能尝试重试发送这个方法。

ACS操作

1.会话发起
 
   当收到了CPE的初始Inform请求,如果ACS此时希望发起会话,必须响应一个Inform方法。

2.接收请求
 
    在一个会话中,接收到一个来自CPE的SOAP请求,ACS必须在下一个发送给CPE的HTTP响应中回复这个请求。

    如果ACS希望在这个会话的某段时间内阻止CPE发送请求,可以在每个发送给CPE的封装包中设置HoldRequest为true。直到希望允许来自CPE的请求为止。ACS必须允许CPE的请求直到此会话完成(可以通过HoldRequests或发送空HTTP响应实现)

3.发送请求

   在一个会话中,如果ACS有一个或多个请求,并且最近收到的CPE的HTTP POST中没有包含SOAP请求,ACS必须在下一个HTTP响应中发送这些请求中的一个请求。

   ACS没有给CPE的请求,并且CPE最近发送的HTTP响应没有包含一个SOAP请求,则ACS必须发送一个空HTTP POST。

4.会话终止

   CPE是对ACS的HTTP连接的操纵方,由CPE来负责连接的发起和终止。
  
    ACS必须在以下条件均成立时才认为此会话终止:

      1) CPE已经没有更多的请求。ACS当且仅当中HoldRequests为false时收到CPE的空HTTP POST才能认为满足此条件。

      2) ACS没有更多的请求发送,并且最近发送给CPE的HTTP响应是空的。

      3) ACS已经针对先前收到的所有请求都回复了响应。

      4) ACS已经从CPE收到了所有自己发送的请求的响应消息。

    如果ACS发送最后一个HTTP响应之前以上的条件都满足,则ACS的最后一个HTTP的响应必须是空的。

    如果以上条件并未全部满足,当ACS已经在一个本地定义的不少于30s的时间段内没有收到对应CPE的一个HTTP POST,它可以认为此会话终止。在此情况下,ACS可以通过执行一个连接请求来重建一个会话。

    如果ACS收到一个来自CPE的HTTP POST,且对应的xml不是well-formed,或它包含了一个不在3.5中描述的SOAP错误的格式,ACS必须用一个HTTP 400状态码来回复CPE,并必须认为此会话异常终止。这个错误响应必须不能包含一个SOAP内容,但可以包含可理解的文本内容用于详细描述此错误原因。

    如果ACS从一个它认为已经超时的会话中收到一个请求,或ACS认为发生了一些其他协议的攻击,ACS可以通过用HTTP 400状态码回复CPE来异常终止这个会话。这个HTTP响应必须不能包含任何的soap内容,但可以包含可理解的文本内容用于详细描述此错误原因。

    如果ACS从CPE收到了一个SOAP错误响应,ACS可以选择如下操作之一:

      1) ACS可以强制异常终止此会话。通过HTTP 400状态码

      2) ACS可以正常终止此会话,这样CPE就不会来尝试重建这个会话。为了实现它,ACS不能发送更多的请求。且遵循上面定义的规则来判断此会话何时会终止。

      3) ACS可以继续这个会话,并发送其他的请求到CPE。

猜你喜欢

转载自forhope.iteye.com/blog/781643
069