Mqtt协议
库昊天
这个作者很懒,什么都没留下…
展开
-
Mqtt入门之请求连接信息Connect
可变头部Connect消息的可变头部分为4部分:协议名称Protocol Name;协议版本Protocol Level;连接标识Connect Flags;空闲连接保持时间Keep Alive;连接标识如下图所示: Netty实现类MqttConnectVariableHeader如下图所示: 消息体Connect消息的消息体包含的字段:客户端唯一标识(必填)、用户名、密码、Wi原创 2017-11-27 18:12:32 · 12161 阅读 · 1 评论 -
Mqtt精髓系列之安全
翻译:https://www.hivemq.com/blog/mqtt-security-fundamentals/面临的挑战 在IOT场景中,设备资源受限(计算能力、耗电量等)和网络受限(带宽、稳定性等),这些因素使得高安全性和高可用性更加难以权衡。安全方案概览 Mqtt的安全可以在应用层、传输层和网络层进行保证,如下图所示: 身份认证方式一:用户名和密码 正确:客户端按一定规则生成签名作翻译 2017-11-30 16:31:18 · 5231 阅读 · 0 评论 -
Mqtt之连接确认消息ConnAck
可变报头当前会话Session Present功能:客户端确认服务端是否持有会话,从而保持会话状态的一致; 连接返回码ConnectReturnCode Netty实现类MqttConnAckVariableHeader。原创 2017-11-27 20:06:10 · 6695 阅读 · 1 评论 -
Mqtt之发布响应消息PUBACK和PUBREC
PUBLISH消息响应 PUBACK报文是对QoS 1等级的PUBLISH报文的响应,PUBREC报文是对QoS等级2的PUBLISH报文的响应。原创 2017-11-27 20:54:12 · 4946 阅读 · 0 评论 -
Mqtt之心跳请求消息PINGREQ和响应PINGRESP
请求固定报头心跳报文只有固定报头,没有可变报头和消息体。 心跳请求作用响应固定报头原创 2017-11-27 21:06:57 · 7412 阅读 · 1 评论 -
Mqtt之断开连接DISCONNECT
没有可变报头和消息体,固定头部如下: 响应动作如下:原创 2017-11-27 21:29:56 · 15050 阅读 · 1 评论 -
Mqtt之服务质量等级Qos
Qos0 发送者只发送一次消息,不进行重试,Broker不会返回确认消息。在Qos0情况下,Broker可能没有接受到消息,流程如下图所示: Qos1 发送者最少发送一次消息,确保消息到达Broker,Broker需要返回确认消息PUBACK。在Qos1情况下,Broker可能接受到重复消息,流程如下图所示: Qos2 Qos2使用两阶段确认来保证消息的不丢失和不重复。在Qos2情况下,B原创 2017-11-28 11:28:44 · 35795 阅读 · 0 评论 -
Mqtt之安全
背景: MQTT方案通常部署在不安全的通信环境中。在这种情况下,协议实现通常需要提供这些机制:身份认证。用户和设备身份认证。权限校验。设备发布订阅权限、服务端资源访问权限等。数据加密。消息数据的隐私控制。完整性校验。消息数据的完整性校验。设备身份认证 方式1: MQTT协议方式,使用CONNECT报文的用户名和密码校验; 方式2: TLS协议方式,Broker使用设备发送的SSL证原创 2017-11-28 13:30:28 · 1099 阅读 · 0 评论 -
Mqtt精髓系列之精简之道
Mqtt协议在设计时,尽可能的做到了消息的精简,这种精简体现在协议的多个方面,如下面介绍所示。Remaining Length 设计思想:采用变长度编码方案,最多采用4 Byte表示256MB数据。采用可变长度的好处是信息量少时采用的字节数也少。每个字节的低7位用于编码数据,最高位是标志位,用于指示是否有更多的字节,最低有效位在前,最高有效位最后。 比如,十进制128=0...原创 2017-12-15 20:19:36 · 491 阅读 · 0 评论 -
Mqtt入门之消息组成
消息组成Mqtt协议的消息由三部分组成:固定头部;可变头部;消息体;Netty中MqttMessage实现如下图所示: 固定头部 固定头部的长度固定为2Byte,第一个Byte指定了消息类型,第二个Byte指定了消息长度,如下图所示: 第一个Byte的7-4位指定了消息类型,3-0为消息类型的标记位,相当于扩展位,消息类型如下图所示: 标记位如下图所示: 剩余长度:当前原创 2017-11-27 17:39:14 · 3145 阅读 · 0 评论 -
Mqtt精髓系列之服务质量Qos
Qos的重要性 QoS提供了3中服务级别,能够容忍不同网络环境。 QoS is a major feature of MQTT, it makes communication in unreliable networks a lot easier because the protocol handles retransmission and guarantees the delivery of翻译 2017-11-29 17:08:13 · 2204 阅读 · 0 评论 -
Mqtt精髓系列之连接建立过程
连接过程 首先,客户端发送CONNECT消息请求建立连接;其次,broker返回CONNACK消息,如下图所示: 通过NAT连接 It is a common use case that MQTT clients are behind routers, which are using network address translation (NAT) in order to translat翻译 2017-11-29 12:54:50 · 4811 阅读 · 0 评论 -
Mqtt入门之协议介绍
介绍 MQTT是一个由IBM主导开发的基于二进制消息的发布/订阅编程模式的消息协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。它的核心设计思想是开源、可靠、轻巧、简单,具有以下主要的几项特性: 1. 非常小的通信开销(最小的消息大小为 2 字节); 2. 支持各种流行编程语言(包括C,Java,Ruby,Python 等等)且原创 2017-11-28 16:57:39 · 1003 阅读 · 0 评论 -
Mqtt入门之发布消息PUBLISH
固定报头重发标志DUP功能:消息是否第一次发送;保留标志RETAIN功能:服务端是否需要存储当前消息;可变报头可变报头按顺序包含:主题名和报文标识符。 消息体消息内容和格式根据应用而定。原创 2017-11-27 20:25:17 · 3712 阅读 · 0 评论 -
Mqtt入门之主题与主题过滤器
主题Topic 主题是一个UTF-8字符串,由一个或多个主题级别组成, 每个主题级别之间由正斜杠(主题级别分隔符)分隔,如下图所示: 主题过滤器TopicFilter 含有通配符的主题,目的是让客户端同时订阅多个主题。通配符 当客户端订阅主题时,它可以使用消息发布到的确切主题,或者可以使用通配符同时订阅更多的主题。 通配符只能在订阅主题时使用,并且在发布消息时不允许使用。单级通配符+ +表原创 2017-11-28 10:52:09 · 3995 阅读 · 0 评论 -
Mqtt精髓系列之预备知识
发布/订阅模式优势传统请求/应答模式是同步的,发布/订阅模式是异步的,这种模式带来以下几种好处:时间解耦:消息发布方和订阅方不需要同时在线发布和接受消息;空间解耦:消息发布方和订阅方只需要感知Broker的地址即可;消息过滤方式基于Topic过滤(mqtt使用);基于消息内容过滤;基于消息类型过滤;消息消费方式集群消费:一条只会投递给集群中某一台机器;广播消费:一条会投递给集群中的翻译 2017-11-29 10:44:17 · 458 阅读 · 0 评论 -
Mqtt精髓系列之保留消息Retained Messages
翻译:https://www.hivemq.com/blog/mqtt-essentials-part-8-retained-messages保留消息定义 如果PUBLISH消息的RETAIN标记位被设置为1,则称该消息为“保留消息”;Broker对保留消息的处理 Broker会存储每个Topic的最后一条保留消息及其Qos,当订阅该Topic的客户端上线后,Broker需要将该消息投递给它。翻译 2017-11-29 18:59:50 · 17867 阅读 · 0 评论 -
Mqtt精髓系列之心跳机制
翻译:https://www.hivemq.com/blog/mqtt-essentials-part-10-alive-client-take-over心跳机制 Keep Alive指定连接最大空闲时间T,当客户端检测到连接空闲时间超过T时,必须向Broker发送心跳报文PINGREQ,Broker收到心跳请求后返回心跳响应PINGRESP。若Broker超过1.5T时间没收到心跳请求则断开连接翻译 2017-11-29 21:02:21 · 10478 阅读 · 0 评论 -
Mqtt精髓系列之发布订阅
翻译:https://www.hivemq.com/blog/mqtt-essentials-part-4-mqtt-publish-subscribe-unsubscribe发布PublishQoS 客户端发布到Broker的消息Qos;Retain-Flag 当前发布的消息是否为保留消息;消息ID Packet Identifier消息ID只在Qos>0时使用,且范围为0~65535,尽可翻译 2017-11-30 10:44:21 · 2676 阅读 · 0 评论 -
Mqtt功耗测试
参考:http://stephendnicholas.com/posts/power-profiling-mqtt-vs-https原创 2018-07-10 09:56:00 · 1809 阅读 · 0 评论