项目场景:
项目场景:在ACS与CPE之间,使用TR069协议完成数据交换以及参数配置。
问题描述
在运行过程中,出现了CPE的POST请求之后,一直保持TCP的keep alive状态;不在响应其他处理;
原因分析:
发送现象有以下几个:
- CPE主动请求之后,过了30秒之后,会发送FYN,断开TCP;
- 异常时,CPE请求之后,过了30秒,没有主动关闭,导致一直与ACS保持Keep alive;
解决方案:
在处理CPE主动请求之后,发送了一个空包处理,关于空包的描述;
理论依据:《TRO69交互协议》
3.7.1.4 会话终止
如果满足了下面所有的条件时,CPE 必须终止这个事务处理会话:
- ACS 没有更多的要发送给 CPE 的请求。当且仅当来自 ACS 的最近的 HTTP 响应是空
时 CPE 才可以做出这个推断。 - CPE没有更多的需要发送ACS的请求,且CPE已经向ACS发送了一个空HTTP POST
并包括 HoldRequests 为 false(用于指示 ACS,表示 CPE 在这个会话中已经没有更多
的需要发送的请求)。如表 6 所定义,如果这个条件并没有满足,但是 CPE 已经没有
更多的请求或响应需要发送,它必须发送一个空 HTTP POST,这样就可以达到这个
状态。 - CPE 已经从 ACS 接收了所有的响应消息。
- CPE 已经发送了所有的响应消息给 ACS 作为已经收到的请求的回应。
如果在一个本地规定的不小于 30 秒的周期内没有收到来自 ACS 的 HTTP 响应,CPE 必须认
为一个会话被异常终止了。如果 CPE 接收 HTTP 响应出错,CPE 必须不能在同一个会话中尝
试重传这个对应的 HTTP 请求。
如果 CPE 在响应一个 Inform 请求时收到了一个错误码不是“Retry request”(错误码 8005)的
SOAP 层错误,CPE 必须认为这个会话已经被异常终止了。
如果 CPE 从 ACS 收到一个 HTTP 响应来指示不合适(not well-formed)的 XML,认为无效的
SOAP 结构,包含一个 3.5 中没有描述的 SOAP 错误,或者 CPE 认为这个协议已经收到了侵
犯,CPE 必须认为这个会话已经被异常终止了。