MQTT异常断开

2023-11-09

MQTT异常断开,讨论一下TCP链路的影响

MQTT异常断开,TCP链路原因的几种情况:

三种情况:

1、客户端发送了心跳请求,但是MQTT代理服务器Broker没有收到心跳请求,所以也不会回复客户端心跳响应。MQTT代理服务器Broker在 1.5T 心跳周期内没有收到心跳请求,主动断开MQTT连接。

        后续分析,怪异的现象是:发送端 send() 接口发送成功(注意:send接口返回值是正确的),客户端在发送时遇到了网络信号故障,send()接口发送数据交给系统之后就不关心了。这个在物联网中还是有概率发生的,是网络信号不稳定(往往是网络信号强度不够)导致的,与下面的一种TCP拥塞,情况还不太一样。

        这种信号差导致客户端的心跳请求发送失败,虽然概率比较低,但是MQTT应用在网络延时比较大,网络信号较差的环境中,所以还是有一定出现的次数。

2、客户端发送了MQTT心跳请求,但是TCP网络的原因出现多次重传,客户端发给了MQTT代理服务器Broker,但是代理服务器的网络故障问题,没有及时处理客户端发来的心跳请求。代理服务器Broker设置MQTT心跳 1.5T 心跳周期没有收到心跳请求包,将踢掉MQTT连接。

        使用wireshark抓包工具,看到网络拥塞,代理服务器端的网络状态极差。

3、客户端给MQTT代理服务器发送TCP层的ACK确认包,代理服务器没有收到TCP层的ACK确认,然后客户端发起TCP层链路重置。注意是TCP层的链路重置[RST, ACK],或者是[FIN, ACK]。然后TCP层链路中断,MQTT连接随之中断。

        这种情况也是代理服务器Broker的网络较差,不能及时处理收到的MQTT消息在TCP层的ACK确认。

4、连接时网络不稳定,双向的,或者是单向的原因。下图中红色标注部分,分别是客户端与代理服务器Broker之间相互等待,但是等待的时间点却不一样,注意这里面的区分。

附一张图:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MQTT异常断开 的相关文章

  • 字符和字符串(4)——C# 截取字符串:简单易懂,小白教程

    几个经常用到的字符串的截取 string str 123abc456 int i 3 取字符串的前i个字符 str str Substring 0 i or str str Remove i str Length i 去掉字符串的前i个字符
  • web3.js

    安装 别按照官网上面 npm install web3 下载 我已经吃过一次亏了 npm init npm install ethereum web3 js save 指令 web3 isConnected 检查结点的连接是否存在 web3
  • 知识蒸馏研究综述

    知识蒸馏研究综述 论文来源于 知识蒸馏研究综述 文章目录 知识蒸馏研究综述 知识蒸馏的提出 知识蒸馏的作用机制 蒸馏的知识形式 输出特征知识 中间特征知识 知识蒸馏的方法 知识合并 多教师学习 教师助理 跨模态蒸馏 相互蒸馏 终身蒸馏 自蒸

随机推荐