一、
问题描述
1. 西安某地区连接TCP服务器失败,重连两次均失败。
2.
当地CSQ在15左右
3.
TCP服务器正常、SIM卡无欠费。
4.
发送CIPSHUT(去激活PDP命令)后恢复正常
二、
协议分析
1.
TCP层分析
连接TCP服务器需要经过三次握手。
从log中看,当模块发出第一次握手信息后,未收到服务器发出的第二次握手信息,因此开始重发第一次握手信息。重发了6次之后,始终未收到服务器的第二次握手信息,因此连接失败。
2.
RLC(无线链接路层)分析
TCP层的数据到达协议栈后,需要经过RLC(无线链接路层)发送给基站。RLC与TCP层类似,同样有滑窗机制、确认机制。
经过LOG分析,RLC上行数据成功发送给了基站,并且收到了基站的ACK。也就是说基站成功的收到了RLC完整、准确的数据包,而且模块也收到了基站
的确认数据。表明:模块与基站之间的信道通信是正常的。
3.
TBF分配情况分析
TBF的意思是Temporary Block Flow 临时块流。TBF是GPRS通信中基站分配的信道资源的基本单位,所有GPRS通信都建立上TBF的基础之上。
由RLC层分析的结果来看,RLC上行数据成功发送给了基站,表明上行TBF没有任何问题,我们重点要关注下行TBF的情况。
1)
下行TBF的分配触发机制
当核心网有下行GPRS数据要发送给模块时,触发基站分配下行TBF资源给模块。模块在这个过程中完全是被动的,无法参与其中的分配过程,因为无需和模块进行协商。
2) 下行TBF的两种分配方式
a.在CCCH上建立下行TBF
在没有上行TBF存活的情况下,基站通过立即分配的的方式通知模块建立下行TBF。
在正常情况下,我们的模块能收到立即分配的指令,并正常建立下行TBF. 如下图所示。
b. 在上行TBF上进行下行TBF的分配
在正常情况下,我们的模块能收到Downlink分配的指令,并正常建立下行TBF. 如下图所示。
而在TCP服务器连接失败的情况下,我们并没有在LOG中看到上述任意一种下行TBF的分配。
三、
综合分析
由此,我们可以确认,TCP服务器连接失败的原因是没有收到任何下行TBF的分配。可能性有以下几种:
1. TCP服务器没有响应。
2. 网关侧没有把TCP服务器的下行数据发过来。
3. 基站侧没有足够的下行TBF可以分配。
结合发送CIPSHUT(去激活PDP命令)后恢复正常的情况来看,第2点的可能性最大。
四、
结论
西安某地区连接服务器失败问题,我们分析结论如下:
1.
模块侧与基站的通信一切正常。
2.
问题可能是因为网关侧的临时性故障。
五、 解决办法
在TCP服务器连接失败后,发送AT+CIPSHUT指令再重试。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!