首页 理论教育 Contiki物联网操作系统:消息格式详解

Contiki物联网操作系统:消息格式详解

时间:2023-11-20 理论教育 版权反馈
【摘要】:MQTT协议使用1个8位字节长度字段描述所有消息,在3个8位字节长度字段的情况下,消息格式可以直接导出。在此重点介绍几个常用消息格式,其他消息格式可参阅MQTT-SN协议规范。MsgId 字段应编码,以便它可用于标识相应的注册确认消息REGACK。图15-13REGISTER消息3.PUBLISH消息客户端和网关都使用该消息来发布特定主题的数据,其格式如图15-14所示。

Contiki物联网操作系统:消息格式详解

MQTT协议使用1个8位字节长度字段描述所有消息,在3个8位字节长度字段的情况下,消息格式可以直接导出。在此重点介绍几个常用消息格式,其他消息格式可参阅MQTT-SN协议规范。

1.CONNECT消息

为了建立连接客户发送CONNECT 消息,格式如图15-12 所示。标记字段Flags 值没有使用DUP、QoS、Retain 和TopicIDType 等,如果设置了Will 表示客户正在请求Will主题和Will消息,如果Flags字段设置了CleanSession,其含义与MQTT 协议类似,但针对Will 主题和Will 消息做了相应扩展。ProtocolID字段与MQTT CONNECT消息的“协议名称”和“协议版本号”相对应。Dura⁃tion 字段与MQTT 协议相同。ClientID 字段是客户的ID 信息,唯一标识连接到服务器的客户身份的1~23个字符长度的编号。

图15-12 CONTENT消息

2.REGISTER消息

REGISTER 消息是客户端发送给网关GW 的消息,用于请求所包含的主题名称的主题id 值,它也由网关发送以通知客户端它已分配给所包含的主题名称的主题id 值,其格式如图15-13 所示。关于TopicId 字段,如果由客户端发送,则编码为0x0000 且不相关,如果由网关发送,则它包含分配给Topic⁃Name 字段中包含的主题名称的主题id 值。MsgId 字段应编码,以便它可用于标识相应的注册确认消息REGACK。TopicName字段指包含的主题名称。

图15-13 REGISTER消息

3.PUBLISH消息

客户端和网关都使用该消息来发布特定主题的数据,其格式如图15-14所示。标记字段Flags 的DUP 值与MQTT 协议类似,表示消息是否是第一次发送的消息;QoS 值与MQTT 相同,包含此PUBLISH 消息的QoS 级别;Retain 值与MQTT 相同,包含保留标志;Will 值和CleanSession 值未使用;TopicIdType表示TopicId字段中包含的主题id的类型;TopicId包含主题id值或发布数据的短主题名称;MsgId 与MQTT“Message ID”的含义相同,仅在QoS 为1 和2 的情况下相关,否则编码为0x0000;Data字段值是发布的数据。

(www.xing528.com)

图15-14 PUBLISH消息

4.SUBSCRIBE消息

客户端使用SUBSCRIBE 消息来订阅某个主题名称,其格式如图15-15 所示。标志字段Flags 值为DUP 时,与MQTT 相同,表示是否是第一次发送的消息;为QoS 值时与MQTT 相同,包含此主题的请求QoS 级别;值Retain、Will和CleanSession 未使用;值TopicIdType 表示消息末尾包含的信息类型,即“0b00”主题名称,“0b01”预定义主题id,“0b10”短主题名称和“0b11”保留。字段MsgId 应编码为可用于识别相应的SUBACK 消息。字段TopicName 或TopicId包含TopicIdType字段中指示的主题名称、主题id或短主题名称。

图15-15 SUBSCRIBE消息

5.DISCONNECT消息

DISCONNECT 消息的格式如图15-16所示。持续时间字段Duration 字段包含睡眠定时器的值,此字段是可选的,并且由想要进入“睡眠”状态的“休眠”客户端包含。

图15-16 DISCONNECT消息

与MQTT 一样,客户端发送DISCONNECT 消息以指示它要关闭连接。网关将通过向客户端返回DISCONNECT 来确认收到该消息。服务器或网关也可以向客户端发送DISCONNECT,例如,如果网关由于错误而无法将收到的消息映射到客户端,收到此类DISCONNECT 消息后,客户端应尝试通过向网关或服务器发送CONNECT 消息来再次建立连接。在所有这些情况下,DISCONNECT消息不包含Duriation字段。

当客户端想要进入“睡眠”状态时,会发送带有持续时间Duriation 字段的DISCONNECT 消息,网关还通过DISCONNECT 消息(没有持续时间字段Duriation)确认收到此消息。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈