TCPIP常见问题

Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.


为什么连接服务器会失败?

  • 服务器必须是公网地址

  • 使用PC上的TCP UDP测试工具客户端、或者mqtt.fx,连接服务器确认一下是否可以连接成功,排除服务器故障

  • 如果连接SSL服务器,确认下core文件是否支持SSL功能(例如2G模块的某些core文件不支持ssl功能)

  • 2G网络不要使用中国联通卡

  • 检查下模块信号、网络注册、网络附着、PDP激活状态

  • 检查下SIM卡是否欠费(4G模块有一种欠费表现:无法注册4G网络,可以注册2G网络)

TCP有自动重连功能吗?

底层没有自动重连,重连机制在应用层处理。

DNS解析失败怎么排查原因?

检查SIM卡是否注网成功以及检查该地址的有效性再次进行尝试。

SIM卡进行插拔后网络请求失败是什么原因?

检查SIM卡是否注网成功以及检查该地址的有效性再次进行尝试。

如何设置APN信息?

如果是公网SIM卡,不需要用户主动设置APN,软件自动去网络端查询APN进行设置。

如果是专网SIM卡,首先咨询SIM卡提供商APN参数,然后在TCP发起连接前尽可能靠前的位置设置。

为什么同样的设备在某个地方可以上网,在另一个地方却不能上网?

首先确认是不是卡的问题,或者是当地网络影响导致。

为什么4G模块专网卡连接服务器失败?

  • 检查APN参数是否设置正确

  • 如果有其他厂家的模块,对比测试下是否连接正常

  • 如果无法百分百保证服务器配置没问题,最好在服务器端用wireshark抓包,或者在服务器上安装一个第三方工具,开启一个服务器端口来对比测试

  • 用定向IP的物联网卡,需要把域名或IP加入白名单才能使用

同型号的模块但不同的卡联网速度不同是什么问题?

确认卡有无限制,需要考虑网络制式的因素。

为什么数据收发延迟大、速度慢、经常失败、掉线断开?

  • 检查下是否存在代码逻辑错误,导致异常

  • 检查下是否不断重启,导致异常

  • 检查下服务器网络是否稳定,不要用内网穿透方式搭建服务器

  • 检查下使用环境是否网络覆盖不好,例如车库、地下、电梯、山区等

  • 检查下模块信号、网络注册、网络附着、PDP激活状态

  • 排查是否为设备天线问题:发出来设备的天线调试指标参数给我司技术支持人员

  • 如果经常出现连接被动断开:

    • 如果直接使用的是TCP UDP socket连接,检查心跳包的频率,基站策略会关闭长时间没有数据传输的连接,建议心跳包的频率不要超过4分钟,一般都是建议使用2分钟

    • 如果使用的是MQTT连接,检查MQTT Keep Alive的时间,基站策略会关闭长时间没有数据传输的连接,建议心跳包的频率不要超过4分钟,一般都是建议使用2分钟

    • 如果使用的是MQTT连接,检查是否在1.5倍的MQTT Keep Alive的时间,没有成功发送数据到服务器,就会被被服务器主动断开,这种情况一般都是发送数据超时引起的

  • 排查是否为网络问题:如果同一地点的所有设备都有问题,可能和网络环境有关系;使用手机设置为同样的网络模式,对比测试确认下;或者把设备移动到其他距离此地点比较远的地方对比测试。

  • 排查是否设备单体问题:如果同一地点,某些设备正常,某些设备异常,按照如下几种情况分析

    • 分析正常设备和异常设备的使用环境是否相同:

    • 如果不同,例如异常设备固定在钢制墙壁上,正常设备放置在桌子上,钢制墙壁可能对天线射频有干扰,将异常设备和正常设备放置在同样的使用环境中,再对比测试

    • 如果相同,参考下面的步骤

    • 分析正常和异常的设备,驻留的小区是否相同:

    • 如果相同,重点排查异常设备的天线射频部分,分析不出结果的话,异常设备寄给我司分析

    • 如同不同,多测试几次,确认下,是不是在异常小区内很容易出问题,如果异常小区很容易出问题,可能就是小区拥堵造成的

如何统计流量

运营商按照IP包来统计流量,IP包包含:IP包头 + TCP包头 + 用户数据,以IPv4为例:

  • IP包头包含固定的20字节 + 可选的4字节,至少20字节

  • TCP包头包含固定的20字节 + 可选的4字节,至少20字节

用户数据就是用户能够感知到的数据内容了,如果直接使用socket,就是用户感知的数据;如果使用HTTP、MQTT、SSL,这部分数据就不是用户能够感知的原始数据了,HTTP会加上HTTP包头,MQTT会加入MQTT的包裹部分,SSL会加密数据

TCP数据收发时,有ACK确认机制,例如设备发数据给服务器后,还会收到服务器返回的TCP ACK包,这个TCP ACK包(至少40字节)也是计算在流量之内的。接收到服务器下发的数据时,设备也会回复一个TCP ACK包,同样这个ack包仍然计算在流量之内

另外,socket连接以及断开连接,都有多次数据收发,这部分也会消耗流量

例如有一个TCP socket连接,连接成功后,每分钟设备发送2字节的心跳数据到服务器,服务器收到数据后,再回复2字节的心跳应答数据。这个过程中,每分钟消耗的流量至少有42(设备发送)+ 40(服务器回复ACK)+ 42(服务器发送)+ 40(设备回复ACK)= 164字节,实际处理中,服务器回复ACK和服务器发送可能合并成一个IP包42字节,这样的话,至少也要42 + 42 + 40 = 124字节。这是最简单的算法,实际应用中,还要考虑到重传、包头中的可选字节,应该会比这里计算的流量多一些。如果要准确计算,建议在服务器端用wireshark抓包分析

另外一个常见的例子是,为什么通过HTTP下载一个文件,实际消耗的流量比文件本身要多呢?跟上个例子类似,文件本身大小仅仅是用户数据,除了用户数据外,还有如下几部分的流量消耗:

  • 连接服务器消耗流量

  • HTTP请求时有HTTP头,服务器下发数据时也有HTTP头

  • 每包数据都有TCP头和IP头

  • 重传也会消耗流量

  • 与服务器断开连接也需要消耗流量

4G模块可以同时作为服务器和客户端使用吗

  • 对于IPv4协议来说,一般不能作为服务器使用, 模块能获取的是运营商分配的内网IP;对于专网卡,运营商分配的IP地址可以在专网内进行通信,因此可以作为服务器使用。

  • 对于IPv6协议来说,其全局链路地址就是公网IP地址,因为可以作为服务器使用。

为什么我一包数据只有不到50 KB,一天消耗的流量要远远大于实际传输值

如果使用的是TCP协议,需要三次握手四次挥手才算完成了一次数据交互,原始数据不多但是由于TCP协议决定的一包数据必须要加包头包尾帧校验等,所以实际消耗的流量不止50 KB,部分运营商有限制每一包数据必须1 KB起发,不足1 KB也会加各种校验凑足1 KB。

如果Keep Alive设置的时间长,会不会被基站断开

会,一般建议设置为2分钟,不建议超过4分钟,基站策略会关闭长时间没有数据传输的连接,太长时间可能会导致连接被基站关闭

如果有很多个MQTT设备连接到服务器,收发数据是怎样区分设备的

通过clientid确保设备唯一性,可以设置IMEI为clientid