建设网站必备条件,凡客诚品衬衫,沈阳世纪兴网站制作公司,百度引流怎么推广文章目录1.mqtt协议1: 简介和报文格式1.1.MQTT概念1.2.数据2.控制报文格式2.1.MQTT数据包结构2.2.固定头2.2.1.控制报文类型2.2.2.标志FLag2.2.3.剩余长度2.3.可变头2.4.有效载荷Payload消息体安全QoS(Quality of Service levels)ref:1.mqtt协议1: 简介和报文格式
Message Que…
文章目录1.mqtt协议1: 简介和报文格式1.1.MQTT概念1.2.数据2.控制报文格式2.1.MQTT数据包结构2.2.固定头2.2.1.控制报文类型2.2.2.标志FLag2.2.3.剩余长度2.3.可变头2.4.有效载荷Payload消息体安全QoS(Quality of Service levels)ref:1.mqtt协议1: 简介和报文格式
Message Queing Telemetry Transport: 消息队列遥测传输协议 基于发布/订阅模式的轻量级通讯协议, 基于于TCP/IP协议, IBM1999年发布特点: 轻量, 简单, 开放, 实时, 可靠 服务器分发消息, 可发布, 不订阅客户端可发布, 订阅1
1.1.MQTT概念
网络连接Network Connection使用底层传输协议基础设施 客户端用它连接服务端提供有序, 可靠, 双向字节流传输 应用消息Application Message: MQTT协议通过网络传输应用数据 应用消息通过MQTT传输, 有关联的服务质量QoS与主题Topic 客户端Client: 使用MQTT的程序/设备, 总是通过网络连接到服务端 发布消息-其他客户端订阅消息-以请求接受相关应用消息取消订阅, 移除请求从服务端断开连接 服务端Server: 发送消息的客户端, 请求订阅的客户端之间的中介 接受网络连接-来自客户端接受消息-客户端发布的应用消息转发消息-符合条件的已订阅客户端处理客户端的订阅, 取消订阅的请求 订阅Subscription: 含一个主题过滤器Topic Filter, 一个最大的服务质量QoS等级 订阅与单个会话关联, 可包含多于一个订阅会话的每个订阅有一个不同的主题过滤器 主题名TopicName: 附加于应用消息的标签, 服务端已知且与订阅匹配. 服务端发送应用消息的副本给每个匹配的客户端订阅主题过滤器Topic Filter: 订阅中包含一个表达式, 表示相关的一个/多个主题, 可用通配符会话Session: 客户端服务端之间状态交互. 一些绘画持续时长同网络连接, 另一些可在客户端和服务端的多个连续网络连接间扩展控制报文MQTT Control Packet: 通过网络连接发送的信息数据包 MQTT规定14种不同类型控制报文, PUBLISH用于传输应用消息
1.2.数据
整数数值,16位, 大端序: 16位字: MSB,LSB
2.控制报文格式
2.1.MQTT数据包结构
固定头: 所有, 表示数据包类型与数据包分组类标识可变头: 部分, 数据包类型决定可变头是否存在及其具体内容消息体: 部分, 表示客户端按收到的具体内容
2.2.固定头
消息类型标识位/DUP: 不用标识位的消息类型中,DUP作为保留位; 收到无效标志时必须关闭网络连接QoS服务质量等级: 0最多一次, 1至少一次, 2一次RETAIN: 发布保留标识, 服务器要保留此次推送的信息, 若有新订阅者, 推送该消息, 若无则推送一次后释放剩余长度: 前七位保存长度, 末位标识1长度不足需用第二个字节保存
Bit7,6,5,43,2,1,0byte1MQTT控制报文类型指定控制报文类型的标志位byte2剩余长度
2.2.1.控制报文类型
byte1[7-4]
名字值报文流动方向描述Reserved0禁止保留CONNECT1Client-ServerClient请求连接ServerCONNACK2Server-Client连接报文确认PUBLISH3-发布消息PUBACK4-QoS1消息发布收到确认PUBREC5-发布收到(交付第1步)PUBREL6-发布释放(交付第2步)PUBCOMP7-QoS2消息发布完成(3步)SUBSCRIBE8Client-Server客户端订阅请求SUBACK9Server-Client订阅请求报文确认UNSUBSCRIBE10Client-Server客户端取消请阅请求UNSUBACK11Server-Client取消订阅报文确认PINGREQ12Client-Server心跳请求PINGRESP13Server-Client心跳响应DISCONNECT14Client-Server客户端断开连接Reserved15禁止保留
2.2.2.标志FLag
byte1[3-0]必须设置表格中列出的值, 若非法标志, 必须关闭网络连接
控制报文固定报头标志Bit3Bit2Bit1Bit0CONNECTR0000CONNACKR0000PUBLISHMQTT3.1.1DUP1^11QoS2^22QoS2^22RETAIN3^33PUBACKR0000PUBRECR0000PUBRELR0010PUBCOMPR0000SUBSCRIBER0010SUBACKR0000UNSUBSCRIBER0010UNSUBACKR0000PINGREQR0000PINGRESPR0000DISCONNECTR0000
DUP1^11 控制报文的重复分发标志QoS2^22 PUBLISH报文的服务质量等级RETAIN3^33 PUBLISH报文的保留标志
2.2.3.剩余长度
byte2开始, 当前报文剩余部分字节数, 包括可变报头, 负载数据不包括用于编码剩余长度字段本身的字节数变长度编码, 对128值用单字节编码剩余长度最大4字节 128值: 低7位有效位编码数据, 最高位标志位, 指示是否有更多字节, 每字节可编码128值和1延续位 1个字节时从0(0x00)到127(0x7f)2个字节时从128(0x80,0x01)到16383(0Xff,0x7f)3个字节时从16384(0x80,0x80,0x01)到2097151(0xFF,0xFF,0x7F)4个字节时从2097152(0x80,0x80,0x80,0x01)到268435455(0xFF,0xFF,0xFF,0x7F) 2.3.可变头
固定报头和负载之间内容因数据包类型而异, 一般作为包标识报文标识符Packet Identifier 报文PUBLISH(QoS0), PUBACK, PUBREC, PUBREL, PUBCOMP, SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK包含两字节: byte1:MSB, byte2:LSBSUBSCRIBE, UNSUBSCRIBE, PUBLISH(QoS0)必须包含非0:16位报文标识符 客户端每次发送一个新的该报文时必须分配一个当前未使用的报文标识符 若CLient要重发这个特殊控制报文, 随后重发报文时必须用相同标识符 CLient处理完该报文对应的确认后, 该标识符释放可重用 QoS1:PUBLISH对应PUBACK QoS2:PUBLISH对应PUBCOMP, SUBSCRIBE/UNSUBSCRIBE对应SUBACK/UNSUBACK 发送QOS0的PUBLISH报文时, 相同条件也适用于服务端; QoS0的PUBLISH报文不能含报文标识符 PUBACK, PUBREC, PUBREL报文必须包含与最初发送PUBLISH报文相同的标识符 SUBACK,UNSUBACK必须包含对应SUBSCRIBE, UNSUBSCRIBE报文使用的标识符 CLient和Server彼此独立地分配报文标识符, 使用相同报文标识符可实现并发消息交换 控制报文报文标识符字段CONNECTNCONNACKNPUBLISHY若QoS0PUBACKYPUBRECYPUBRELYPUBCOMPYSUBSCRIBEYSUBACKYUNSUBSCRIBEYUNSUBACKYPINGREQNPINGRESPNDISCONNECTN
2.4.有效载荷Payload消息体
四种类型CONNECT: 客户端ClientID, 订阅Topic, Message, 用户名, 密码SUBSCRIBE: 一系列要订阅的主题及QoSSUBACK: 对SUBSCRIBE所申请主题及QoS进行确认,回复UNSUBSCRIBE: 要订阅的主题
控制报文有效载荷CONNECTYCONNACKNPUBLISH可选PUBACKNPUBRECNPUBRELNPUBCOMPNSUBSCRIBEYSUBACKYUNSUBSCRIBEYUNSUBACKNPINGREQNPINGRESPNDISCONNECTN
安全
QoS(Quality of Service levels)
服务质量是MQTT重要特性QoS 0: 最多一次, 会发生消息丢失/重复, 消息发布依赖底层TCP/IP网络QoS 1: 至少一次QoS 2: 保证一次
ref:
MQTT协议终于有人讲清楚了MQTT协议中文版