MQTT系列--连接请求

MQTT控制包—连接请求

1.连接请求

客服端和服务端建立连接后,客户端发给服务端的第1个包必须为连接包。
客服端只可通过网络发送一次连接包。服务端必须将第2个客户端发送的连接包做为协议错误,并关闭网络连接。
负荷包含一个或多个编码域。他们分配一个唯一的客户端标识给客户端,一个遗愿主题、负荷数据,用户名和密码。
除了客户标识符可以忽略,所有其他的已经可变头标记决定是否存在。

1.2 连接固定头

1.3 连接可变头

连接包可变头包含如下顺序数据与:协议名称,协议版本, 连接标记,keep alive以及属性。

1.3.1 协议名称

协议名称使用UTF-编码字符串。
1.3.2 协议版本
客服端使用1字节的无符号整数代表协议版本(如下)
1.3.3 连接标记
协议标记字节包含了几个指定MQTT连接行为的参数,同时也标识来了负荷域是否存在。
1.3.3.1 全新开始标记(Clean Start)
位置: 连接标记: bit1

  1. 该位表明该连接是启动新对话或是当前已有对话的持续。
  2. 接收到 Clean Start置1的连接包,服务端和客户端必须丢弃当前的任何对话并启动新对话,同时
    CONNACK的对话存在标识总是置0。
  3. 服务端接收到Clean Start置0的连接包,已有与客服标识符关联的对话,服务端必须基于已有对话状态,重启与客户端的连接。
  4. 服务端接收到Clean Start置0 的连接包,无客户端标识关联的对话,服务端必须创建新对话。
    1.3.3.2 遗言标记(Will Flag)
    位置:连接标记:bit2
    遗言标记置1,表明一个遗言消息及相关联对话必须被服务器存储。遗言消息包括连接包的遗言属性,遗言主题,和遗言负荷域。在网络连接关闭且遗言等待时间到或对话结束后,遗言消息必须发布,除非遗言消息被服务端检测到或接受到断开连接包(包含消息码:0x00)或客户ID的网络连接在遗言时间到重新打开。
    遗言消息需发布的情景如下:
    1.服务端检测到网络I/O错误。
  5. 客服在Keep Alive的时间内不能通信。
  6. 客户端未先发DISCONNECT包(消息码:0x00),而关闭网络连接。
  7. 服务端未先发DISCONNECT包(消息码:0x00),而关闭网络连接。
    遗言标记置1,遗言属性,遗言主题,遗言负荷必须存在于负荷中。
    1.3.3.3 遗言Qos
    连接标记: bit4,3
    该标记指定发布遗言消息使用的质量服务级别。
    遗言标记置0时,
    1.3.3.4 遗言保持(Will Retain)
    位置:bit 5
  8. 遗言标记置0时,遗言保持标记必须置0.
  9. 遗言标记置1且遗言保持标记置0时,服务端必须以非保持消息发布遗言消息。。
  10. 遗言标记置1且遗言保持标记置1时,服务端必须将遗言作为保持消息发布。
    1.3.3.5 用户名称标记(User Name Flag)
    位置: bit 7
  11. 用户名称标记置0, 负荷里不可包含用户名。
  12. 用户名称置1, 负荷必须包含用户名。
    1.3.3.6 密码标记(Passwword Flag)
    位置: bit 6
  13. 密码标记置0 ,负荷不可包含密码。
  14. 用户标记置1, 负荷必须包含密码。
    1.3.3.7 连接保持标记(Keep Alive)
    保持连接为一个2字节整数,定义了以秒为单位的时间间隔。它指定了客户端完成一个MQTT控制包传输和启动文本传输的最大时间间隔。客服端必须保证发送MQTT控制包间隔不超过连接间隔。
    连接间隔非0时,发送任何MQTT控制包前,客服必须发送一个请求(PINGREQ)包。
    服务端返回一个服务端连接时间置,客服端必须用改置替换。
    无论连接时间置多少,客服端任何时候都可以发送PINGREQ,并经有检查相应的响应(PINGRESP)来判断网络和服务端是否可用。
    连接有效值非0,在1个办周期的连接有效时间内,服务端未接收到可端的MQTT控制包,服务端必须关闭客服端的网络连接。
    客服端发送PINGREQ后,在可见的时间内未接收到PINGRESP包,它必须关闭与服务端的连接。
    连接有效时间为0,连接保持机制失效。
    1.3.3.8 连接属性(CONNECT Properties)
  15. 属性长度
    连接包可变头的属性长度编码为可变字节整数。
  16. 会话有效时间(Session Expiry Interval)
    17(0x11), 会话有效时间隔标识
    后跟4字节整数代表会话有效时间。包含多个会话有效时间为协议错误。
    当会话有效时间未设置,默认为0,。会话有效时间置0或未设置,网络关闭时时会话结束。
    会话有效时间隔为0xFFFFFFFF,会话一直有效。
    会话有效时间大于0时,服务端和客服端于网络连接关闭后,必须保持会话状态。
    1.3.3.9 接收最大值(Receive Maximum)
    33(0x21), 接收最大值标识,后跟2字节整数代表接收的最大值。包含接收最大值超过一次或其值为0,即为协议错误。
    客户端基于该值来限制将要并发处理的QoS1和QoS2de 的发布次数.
    1.3.3.10 最大包大小(Maximum Packet Size)
    39(0x27), 最大包大小,后跟4字节整数代表客户端可接收的最大包大小。
    该值只能包含一次且不可为0,否则识别为协议错误。
    服务端不可发送超过最大包大小的包给客户端,如果客户端接收到包的大小超过改制,识别为协议错误。
    客户端返回DISCONNNECT(错误码0x95).
    1.3.3.11 标题别名最大值
    34(0x22),标题别名最大值标识码,后跟2字节整数代表标题别名最大值。改值只能保护一次,否则识别为协议错误。标题别名最大值默认为0。
    该值表明客户端允许接收的服务端发送的标题别名最大值。
    客户端基于该值来限制其连接需要保持的标题别名数。
    1.3.3.12 请求响应信息(Request Response Information)
    25(0x19),请求响应信息标识,后接一个字节整数,取值0或1,默认值为0
    值为0时标识服务端不许返回响应信息,值为1服务端在CONNACK包中返回响应信息
    13.3.143 请求异常信息
    23(0x17),请求异常信息标识,后接一个字节,值为1或0,,默认为1.
    1.3.3.15 用户属性(User Property)
    38(0x26) 用户属性标识,后跟一个UTF-8字符串对。用户属性可出现多次,代表多个键值对。
    1.3.3.16 授权方法(Authentication Method)
    21(0x15),授权方法标识符,后跟一个UTF-8编码字符串,包含扩展授权的授权方法名称。协议只可包含一次,否则识别为协议错误。如果无授权防范,扩展授权不执行。
    客户端在CONNECT中设置授权方法,其不能发送任何AUTH或DISCONNECT包直至收到CONNACK 保留。
    1.3.3.17 授权数据9(Authentication Data)
    22(0x16), 授权数据标识码,后跟二进制授权数据。无授权方法时,包含授权数据识别为协议错误。
    包含多次授权数据识别为协议错误。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值