没有合适的资源?快使用搜索试试~ 我知道了~
MQTT专为20世纪90年代末/ 21世纪初的低带宽,高延迟网络而设计。结果,设计师做出了许多关键选择,影响了它的“外观和感觉”。 1. 简洁,简洁,简洁!不要添加太多“花里胡哨”,但要提供一个坚固的构建块,可以很容易地集成到其他解决方案中。实施起来很简单。 2. 发布/订阅消息传递。适用于大多数传感器应用程序,并使设备能够联机并发布以前未知或预定义的“内容”。 3. 零管理(或尽可能接近)。对意外操作做出明智的行为,并使应用程序“正常工作”,例如在需要时动态创建主题。 4. 最大限度地减少线上足迹。为任何消息添加绝对最小的数据开销。轻巧,带宽高效。 5. 期待并迎合频繁的网络中断(低带宽,高延迟,不可靠,高成本运行的网络)... - >遗嘱和遗嘱 6. 持续的会话意识 - >遗嘱消息 7. 预计客户端应用程序可能具有非常有限的处理资源。 8. 在环境允许的情况下提供传统的消息服务质量。提供“服务质量”。 9. 数据不可知。不要求内容格式,保持灵活性。
资源推荐
资源详情
资源评论
1.1 MQTT 设计原则和假设
专为 世纪 年代末 世纪初的低带宽,高延迟网络而设计。结果,设计师做出
了许多关键选择,影响了它的“外观和感觉”。
简洁,简洁,简洁!不要添加太多“花里胡哨”,但要提供一个坚固的构建块,可以
很容易地集成到其他解决方案中。实施起来很简单。
发布订阅消息传递。适用于大多数传感器应用程序,并使设备能够联机并发布以
前未知或预定义的“内容”。
零管理(或尽可能接近)。对意外操作做出明智的行为,并使应用程序“正常工作” ,
例如在需要时动态创建主题。
最大限度地减少线上足迹。为任何消息添加绝对最小的数据开销。轻巧,带宽高效。
期待并迎合频繁的网络中断(低带宽,高延迟,不可靠,高成本运行的网络)
遗嘱和遗嘱
持续的会话意识 遗嘱消息
预计客户端应用程序可能具有非常有限的处理资源。
在环境允许的情况下提供传统的消息服务质量。提供“服务质量”。
数据不可知。不要求内容格式,保持灵活性。
数据表示
1.2.1 二进制位 Bits
字节中的位从 到 。第 位是最高有效位,第 位是最低有效位。
1.2.2 整数数值 Integer data values
整数数值是 位,使用大端序(,高位字节在低位字节前面)。这意味着
一个 位的字在网络上表示为最高有效字节(),后面跟着最低有效字节()。
1.2.3 UTF-8 编码字符串 UTF-8 encoded strings
后面会描述的控制报文中的文本字段编码为 格式的字符串。 !"是
一个高效的 #$ 字符编码格式,为了支持基于文本的通信,它对 %!&& 字符的编码做了
优化。
每一个字符串都有一个两字节的长度字段作为前缀,它给出这个字符串 编码的
字节数,它们在图例 编码字符串的结构 中描述。因此可以传送的 编码的字
符串大小有一个限制,不能超过 字节。
除非另有说明,所有的 编码字符串的长度都必须在 到 字节这个范围内。
图例 编码字符串的结构
'( ()*(+
'( ()*(+
'(, -#$!+)#().(/0*(+
编码字符串中的字符数据必须是按照 #$ 规范 #$"定义的和在
! !"中重申的有效的 格式。特别需要指出的是,这些数据不能包含字
符码在 1. 和 1. 之间的数据。如果服务端或客户端收到了一个包含无效 字
符的控制报文,它必须关闭网络连接。
编码的字符串不能包含空字符 1。如果客户端或服务端收到了一个包含
1 的控制报文,它必须关闭网络连接。
数据中不应该包含下面这些 #$ 代码点的编码。如果一个接收者(服务端或客户
端)收到了包含下列任意字符的控制报文,它可以关闭网络连接:
1 和 1 之间的控制字符
1 和 1 之间的控制字符
#$ 规范定义的非字符代码点(例如 1)
#$ 规范定义的保留字符(例如 1)
编码序列 2-33 总是被解释为 1-(零宽度非换行空白字符),无论
它出现在字符串的什么位置,报文接收者都不能跳过或者剥离它。
例如,字符串 % 𪛔 是一个拉丁字母 % 后面跟着一个代码点 1%.4它表示一个中日韩统一
表意文字扩展 中的字符5,这个字符串编码如下:
!" #$% 𪛔”
'( ()(+435
'( ()(+435
'( 6%7435
'( 435
'( 43%%5
'( 435
'( 435
2 MQTT 控制报文格式
&' 控制报文的结构
协议通过交换预定义的 控制报文来通信。这一节描述这些报文的格式。
控制报文由三部分组成,按照 图例 8 控制报文的结构 描述的顺序:
图例 (&' 控制报文的结构
固定报头,存在于所有 控制数据包中 (9 个字节)
变量头,存在于某些 控制包中 (其中表示报文标示符则为 个字节 位)
有效负载,存在于某些 控制数据包中
固定报头
每个 控制报文都包含一个固定报头。图例 固定报头的格式 描述了固定报头
的格式。
图例 固定标题格式
'(
控制报文的类型 用于指定控制报文类型的标志位
'(,
剩余长度
2.2.1 MQTT 控制报文类型
位置)'(/(:
表示为 位无符号值,这些值的定义见 表格 控制报文的类型
表格 控制数据包类型
报文类型 值 报文流动方向 描述
:);
$)禁止 保留值
!<==-! !*(($);)
客户端请求连接到服务器
!<==%!> );)($!*(
连接确认
?&@ !*(($);)$)
);)($!*(
发布消息
?%!> !*(($);)$)
);)($!*(
发布确认
? -! !*(($);)$)
);)($!*(
收到发布(保证交付到应用第 部分)
? - !*(($);)$)
);)($!*(
发布释放(保证交付到应用第 部分)
?!<? !*(($);)$)
);)($!*(
发布完成(保证交付到应用第 部分)
! &- !*(($);)
客户订阅请求
%!> );)($!*(
订阅确认
=! &- !*(($);)
退订请求
=%!> );)($!*(
退订请求确认
?&=A - !*(($);)
?&=A 请求
?&=A -? );)($!*(
?&=A 响应
.&!<==-! !*(($);)
客户端正在断开连接
:);
$) 禁止 保留值
2.2.2 标记位
固定报头第 个字节的剩余的 位 "包含每个 控制报文类型特定的标志,见
表格 标志位。表格 中任何标记为“保留”的标志位,都是保留给以后使用的,必须设
置为表格中列出的值。如果收到非法的标志,接收者必须关闭网络连接。
表格 #标志位
*#+, "-.
!<==-!
保留位
!<==%!>
保留位
?&@ : .?
$
$
-%&=
?%!>
保留位
? -!
保留位
? -
保留位
?!<?
保留位
! &-
保留位
%!>
保留位
=! &-
保留位
=%!>
保留位
?&=A -
保留位
?&=A -?
保留位
.&!<==-!
保留位
.?
B.CD*#(*;)'$0?&@!$()$*?#E(重复发送 ?&@ 控制包
$
B?&@C*('$0);#?&@ 服务质量
-%&=
B?&@ (F?&@ 保留标志
解读:该标志位除了报文类型是 ?&@ 时需要设置外,其他都是固定值,不管是生成报
文还是解析报文只需要通过表格 查找相应报文类型对应的值使用即可。
2.2.3 剩余长度
位置):()(:('(
剩余长度( G(+)表示当前报文剩余部分的字节数,包括可变报头和负载
的数据。剩余长度不包括用于编码剩余长度字段本身的字节数。
剩余长度字段使用一个可变长度编码方案,对小于 的值它使用单字节编码。更大
的值按下面的方式处理。低 位有效位用于编码数据,最高有效位用于指示是否有更多的
字节,且按照大端方式进行编码。因此每个字节可以编码 个数值和一个
延续位
(
connuaon bit
)
。剩余长度字段最大 个字节。
表格 剩余长度字段的大小
435 435
43/35 43/35
43/3/35 43/3/35
43/3/3/35 43/3/3/35
分别表示(每个字节的低 位用于编码数据,最高位是标志位):
个字节时,从 435到 4305
个字节时,从 43/35到 42H/305
个字节时,从 43/3/35到 43/3/35
个字节时,从 43/3/3/35到 43/3/3/35
解读:理论上允许应用程序发送接近 //()大小的控制报文数据。这个数
字在报文中表示是:3,3,3,3。
剩余51页未读,继续阅读
资源评论
FULONG2008
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功