当前位置: 首页 > news >正文

MQTT 异常断开(一)

分析问题总结:
前提:MQTT是基于TCP层再次封装,MQTT是不关心TCP层的实现与传输,但是如果TCP链路出现异常(丢失TCP ACK,网络延时TCP ACK等)一定会导致MQTT断开连接。
MQTT代理服务器存在如下问题:
a.代理服务器,对于 连接时没有及时处理收到模块关于TCP层的 TCP ACK(Seq确认包),出现重传MQTT Connect Ack。模块内部MQTT的处理逻辑,NQTT收到Connect Ack之后,模块已经准备就绪,回码OK,
但是客户端MQTT代理服务器,要等到模块发给代理服务器,MQTT连接Connect Ack关于TCP层的TCP ACK才认为链路已经建立(模块内部MQTT对此透明);
b.客户代理服务器,对于模块发布主题消息时,没有及时回复PUBACK,客户端等待超时,MQTT SDK内部启动关闭会话机制,关闭MQTT会话;
c.客户代理服务器,不仅仅处理MQTT这一种协议,还负责处理HTTP/HTTPS等协议,在分析时,也有发现HTTP/HTTPS协议关于TCP层的TCP ACK丢失,链路断开。
内部测试不能测试出来问题的推测:
a.内部搭建的MQTT代理服务器,基本仅做MQTT测试使用,代理服务器的性能,以及网络环境都比客户现场的要好,另外测试环境网络状态单一,不能模拟客户使用的MQTT代理服务器环境;
b.测试脚本,没有做到反复循环压测(前提是Qos=1)使MQTT的连接,订阅,发布频率达到代理服务的极限处理,即网络TCP层链路出现问题。
编译临时版本挂测
02、 03、 04版本内部挂测记录如下,每一次出现的Link Closed均已分析。
02版本挂测结果
原因客户MQTT代理服务器,没有响应TCP ack

原因:模块向MQTT代理服务器发送TCP ACK,但是代理服务器没有响应,TCP链路异常断开

原因:模块PUB主题消息成功,但是客户代理服务器在10秒内,没有回复模块PUBACK

原因:客户MQTT代理服务器没有发送给模块PUBACK,链路重置

03版本
原因:客户MQTT代理服务器回复TCP ACK延时,TCP已经发起链路重置

04版本测试:
原因:MQTT连接失败,客户MQTT代理服务器,没有收到确认的TCP ACK

相关文章:

  • 网络模型-Qinq配置与应用
  • 每日5题Day5 - LeetCode 21 - 25
  • jiebaNET中文分词器
  • 水平垂直居中的六种方法
  • 添加webpack.config.js配置
  • 三分钟学会视频号卖货,真的太简单了!
  • webgl three 模型操作
  • 【C++】特殊类设计 | 单例设计模式
  • 一、QGroundControl地面站使用介绍
  • 【python】使用函数名而不加括号是什么情况?
  • LeetCode刷题之HOT100之比特位计数
  • PHP在线制作表白网源码
  • 电脑usb数据线共享网络给手机
  • 必应崩了?
  • 高校网络安全管理运维赛WP
  • 时间复杂度分析经典问题——最大子序列和
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • javascript 总结(常用工具类的封装)
  • python学习笔记 - ThreadLocal
  • SpiderData 2019年2月23日 DApp数据排行榜
  • SpringBoot 实战 (三) | 配置文件详解
  • supervisor 永不挂掉的进程 安装以及使用
  • 安装python包到指定虚拟环境
  • 分类模型——Logistics Regression
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 巧用 TypeScript (一)
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 小程序01:wepy框架整合iview webapp UI
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (9)STL算法之逆转旋转
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (转)http-server应用
  • .bat文件调用java类的main方法
  • .NET NPOI导出Excel详解
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NetCore 如何动态路由
  • .NET的微型Web框架 Nancy
  • .Net小白的大学四年,内含面经
  • @GlobalLock注解作用与原理解析
  • @ModelAttribute使用详解
  • [1]-基于图搜索的路径规划基础
  • [16/N]论得趣
  • [android]-如何在向服务器发送request时附加已保存的cookie数据
  • [AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]
  • [Angular] 笔记 6:ngStyle
  • [BZOJ2850]巧克力王国
  • [Bzoj4722]由乃(线段树好题)(倍增处理模数小快速幂)