MQTT协议的学习(一)

MQTT协议是IBM 开发的一个即时通讯协议,有可能成为物联网的重要组成部分。

今天在学习MQTT协议的基础上,概括如下:

1、首先协议要求对一些字符编码的认识,这其中有对UTF-8的认识:基本上就是由于ASCII的7位编码形式不能表示像汉语等字符,于是增加了一个字节用unicode字符表示,

       但是用unicode表示ASCII码并不是一个高效的选择,所以采用UTF-8等格式来表示。

2、MQTT控制数据包格式学习

 

固定包头(所有的控制包都有)

可变包头(存在于一些控制包)

payload(存在于一些控制包)

 固定包头格式:

 

           位(7~4)

位(3~0)

Byte1

MQTT控制包格式

每个MQTT控制包类型的标志位

Byte2

保留字节

byte1:

控制包格式:包括连接、连接响应、响应数据包等格式,会在下面具体道明。

每个MQTT控制包类型的标志位:协议上翻译过来的字面意思是针对之前的控制包格式,会有不同的标志位来代表它。

Byte2:

保留字节:是用来存放字节数的,包括可变包头和保留包头中的(如果有的话),但是不包括对保留字节自身译码的字节。


可变包头:

根据MQTT包类型不同,其中有一个数据包定义区域,协议规定了哪些模式必须带可变包头,哪些情况下不允许带。


Payload:

同样也是根据不同的数据包类型决定是否需要该数据区域,该包头通常作为一个MQTT数据包的结尾。

 

3、  具体类型的MQTT控制包

(1)      连接包:

    接建立后,客户端必须向服务器发送连接包,如果出现错误情况(连接断开等)服务器必须重新处理客户端第二次发来的连接包。

a.固定包头格式

Byte2是可变包头的的字节长度加上payload的长度

b.可变包头

由四个区域组成:协议名字、协议层、连接标记、是否连接

协议名字:

采用UTF-8编码形式的“MQTT”,如果协议名字错误,服务器将会断开和客户端的连接。

协议层:

其实就是具体指的是用的哪一套协议

连接标记:标记MQTT的连接动作,服务器需要证实最后一位需要是0,否则要断开连接,具体的标记如下:

Clean session:为0继续连接,为1断开连接。

Will flag:为1准备发送,当消息发布后清0,为0就表示暂不准备发送。

 c. payload(不太清楚怎么翻译,有道的翻译是有效载荷,暂时理解为有效位)

该包头的中的数据包含一个或者多个长度确定区域,如果这些段存在,就需要按如下的顺序出现:

Client Identifier, Will Topic, Will Message, UserName, Password

                Client Identifer:客户端和服务器用来确定他们正在通过MQTT进行关联,1-23位的UTF-8的字符格式。

/****************************工作了********************************/

           



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值