TCPIP常见问题

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

  • 服务器必须是公网地址
  • 使用PC上的TCP UDP测试工具客户端、或者mqtt.fx,连接服务器确认一下是否可以连接成功,排除服务器故障
  • 如果连接ssl服务器,确认下core文件是否支持ssl功能(例如2G模块的某些core文件不支持ssl功能)
  • 2G网络不要使用中国联通卡
  • 检查下模块信号、网络注册、网络附着、PDP激活状态
  • 检查下SIM卡是否欠费【4G模块有一种欠费表现:无法注册4G网络,可以注册2G网络】

TCP有自动重连功能吗?

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

TCP连接会自动发送ping包吗?

可以设置usocket.TCP_KEEPALIVE保活时间,建议自行编写定时发送ping包功能。

QuecPython MQTT支持的QoS有哪些?

目前不支持QoS2,支持QoS0、QoS1

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

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

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

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

自己搭建的MQTT客户端,有什么MQTT服务器调试工具吗

可以通过MQTT.fx工具来测试mqtt运行状况。

如何设置APN信息?

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

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

同样的设备在一个地方可以上网,在另一个地方不能上网

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

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

  • 检查APN参数是否设置正确
  • 如果有其他厂家的模块,对比测试下是否连接正常
  • 如果无法百分百保证服务器配置没问题,最好在服务器端用wireshark抓包,或者在服务器上安装一个第三方工具,开启一个服务器端口来对比测试
  • 用定向Ip的物联网卡,需要把域名或IP加入白名单才能使用

同种模块,不同的卡联网速度不同是什么问题?

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

各系列模组最多可同时创建多少路socket?

  • EC200A系列模组最多可同时创建 64 路socket。
  • ECxxxG/ECxxxU系列模组最多可同时创建 15 路socket。
  • BG95系列模组最多可同时创建 20 路socket。

各系列模组创建socket时返回的句柄fd的编号规则是什么?

  • ECxxxA/ECxxxM/ECxxxN系列的模组模组创建socket时返回的句柄fd从 3 开始累加,0、1、2 三个fd为内部保留用。
  • ECxxxG/ECxxxU/BG95系列的模组模组创建socket时返回的句柄fd从 0 开始累加。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 提供日志给QuecPython技术支持人员

如何统计流量

运营商按照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地址,因为可以作为服务器使用。

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

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

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

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

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

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