
MQTT
文章平均质量分 77
引壶觞以自酌,眄庭柯以怡颜
死磕技术
展开
-
MQTT 异常断开(一)
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,但是客户......原创 2024-05-21 09:31:27 · 3930 阅读 · 1 评论 -
MQTT 遗嘱消息(Will Message)发布
MQTT遗嘱消息,什么时候订阅者会收到代理服务器发布的遗嘱消息?以下四种情况: 1.服务端发生了I/O 错误或者网络失败; 2.客户端在定义的心跳时期失联; 3.客户端在发送下线包之前关闭网络连接; 4.服务端在收到下线包之前关闭网络连接。正常状态下发布者断开MQTT连接,AT+MQTTDISCONN,正常关闭MQTT链路,设置的遗嘱消息是不会被代理服务器发布出去的,......原创 2022-06-07 09:31:59 · 3339 阅读 · 0 评论 -
MQTT异常断开
MQTT异常断开,讨论一下TCP链路的影响MQTT异常断开,TCP链路原因的几种情况:三种情况:1、客户端MQTT发送了心跳包,但是MQTT代理服务器没有收到心跳包,所以MQTT代理服务器也就不会回复心跳响应包。TCP层出现网络故障,客户端发起链路重置;2、客户端发送了MQTT心跳包,但是TCP网络的原因没有发给代理服务器,代理服务器设置MQTT心跳,1.5T没有收到心跳包,将踢掉MQTT连接3、客户端MQTT,给MQTT代理服务器发送TCP层的ACK确认包,代理服务器没有收到TC.原创 2021-08-26 11:30:52 · 28295 阅读 · 2 评论 -
MQTT Qos降级(三)
基于标准MQTT 3.1版本MQTT Qos服务质量等级降级的情况服务端可以授予比订阅者要求的低一些的QoS等级。为响应订阅而发出的消息的有效载荷的QoS必须是原始发布消息的QoS和服务端授予的QoS两者中的最小值。如果原始消息的QoS是1而被授予的最大QoS是0,允许服务端重复发送一个消息的副本给订阅者。...原创 2021-07-01 11:44:29 · 837 阅读 · 0 评论 -
MQTT安全(非规范)
5.1 概述本章的内容仅供参考, 是非规范化的。 然而, 强烈推荐提供TLS的服务端实现应该使用TCP端口8883( IANA服务名: secure-mqtt) 。解决方案提供者需要考虑很多风险。 例如:设备可能会被盗用 客户端和服务端的静态数据可能是可访问的( 可能会被修改) 协议行为可能有副作用( 如计时器攻击) 拒绝服务攻击 通信可能会被拦截、 修改、 重定向或者泄露 虚假控制报文注入MQTT方案通常部署在不安全的通信环境中。 在这种情况下, 协议实现通常需要提供这些机制:原创 2021-06-30 17:15:16 · 1198 阅读 · 0 评论 -
MQTT心跳 Keep Alive
简介在建立连接的时候,我们可以传递一个 Keep Alive 参数,它的单位为秒,MQTT 协议中约定:在 1.5*Keep Alive 的时间间隔内,如果 Broker 没有收到来自 Client 的任何数据包,那么 Broker 认为它和 Client 之间的连接已经断开;同样地, 如果 Client 没有收到来自 Broker 的任何数据包,那么 Client 认为它和 Broker 之间的连接已经断开。PINGREQPINGREQ 数据包没有可变头(Variable header)和消息体(原创 2021-03-19 18:00:11 · 11808 阅读 · 3 评论 -
MQTT Qos杂谈(二)
基于标准MQTT协议3.1版本MQTT Qos消息服务质量等级,订阅端与发布端不相等的情况Qos服务等级:Qos = 0必须准守的规范1、对于Qos 0的消息,发布者发布消息时,DUP标志位必须设置为0;2、Qos等于0的PUBLISH报文,不能包含报文标识符;3、如果遗嘱标志设置为0,遗嘱Qos也必须设置为0;Qos = 1的规范1、发布者发布消息时,PUBLISH对应的必须是3、如果遗嘱标志设置为1,遗嘱的Qos可以等于0,1,2。但是不能为其...原创 2021-03-05 11:01:13 · 671 阅读 · 2 评论 -
MQTT建立连接时TCP重传
MQTT连接是发生了TCP重传,重传connect ack这个包测试实验步骤:1、设置MQTT参数2、建立MQTT连接3、发布MQTT主题消息问题是出在第二步,建立MQTT连接时发生了TCP重传,即发布者向代理服务器发送的connect ack 数据包的TCP层确认包(TCP ack),代理服务器没有收到。然后代理服务器认为发布者没有与代理服务器建立连接。...原创 2021-02-22 19:57:23 · 1417 阅读 · 2 评论 -
MQTT Qos详解(一)
MQTT Qos的理解原创 2021-01-14 14:43:08 · 22237 阅读 · 5 评论 -
MQTT 心跳机制
https://www.hivemq.com/blog/mqtt-essentials-part-10-alive-client-take-over/If the client does not send a messages during the keep-alive period, it must send a PINGREQ packet to the broker to confirm that it is available and to make sure that the broker i翻译 2020-11-03 20:22:31 · 1834 阅读 · 0 评论