首页 > 其他分享 >MQTT控制报文格式 -- CONNACK (Acknowledge connection request)连接请求应答

MQTT控制报文格式 -- CONNACK (Acknowledge connection request)连接请求应答

时间:2023-10-16 11:56:18浏览次数:42  
标签:CONNACK Acknowledge -- MQTT Refused Connection Connect 客户端

该报文由服务端收到CONNECT数据包后发出,客户端可以根据在合理的时间内是否收到该报文而决定是否断开网络连接。
该数据包不包含Payload部分,仅有FixedHeader 和 Variable Header,现对其详述如下:

1. 固定包头 FixedHeader

固定包头共2个字节
byte1 = 0x20
byte2 = 0x02 剩余长度共有2个字节

Bit

7

6

5

4

3

2

1

0

byte 1

MQTT Control Packet Type (2)

Reserved

 

0

0

1

0

0

0

0

0

byte 2

Remaining Length (2)

 

0

0

0

0

0

0

1

0

2. 可变包头Variable header

可变包头包含两个部分,应答标志 ConnectAcknowledgement Flags和返回码 Connect Return code,各占一个字节

 

Description

7

6

5

4

3

2

1

0

Connect Acknowledge Flags

Reserved

SP1

byte 1

 

0

0

0

0

0

0

0

X

Connect Return code

byte 2

 

X

X

X

X

X

X

X

X

2.1 连接应答标志 Connect Acknowledge Flags

该字节最低位(0bit)是会话存在标志 Session Present Flag
如果服务端正常接受CleanSession=1 的CONNECT报文,则必须将此标志设置为0
如果服务单正常接受CleanSession=0 的CONNECT报文,则该标志取决于服务端是否已经存储所提供ClientId的会话状态。如果已存储,则SessionPresentFlag=1,如果没有存储则 SessionPresentFlag=0 。这是为了确保客户端和服务端的会话状态一致。可以认为是对返回码的补充。

一旦会话的初始设置完成,具有存储会话状态的客户端将期望服务器维持其存储的会话状态。 如果客户端从服务器收到的 Session Present 值与预期不符,客户端可以选择是继续会话还是断开连接。 客户端可以通过断开连接、将 Clean Session 设置为 1 的连接然后再次断开连接来丢弃客户端和服务器上的会话状态。

如果服务器发送包含非零返回码的 CONNACK 数据包,则它必须将会话存在设置为 0

2.2 连接返回码 Connect Return code

客户端收到0x00 的返回码才表示连接正常确认
枚举值如下:

Value

Return Code Response

Description

0

0x00 Connection Accepted

Connection accepted

1

0x01 Connection Refused, unacceptable protocol version

The Server does not support the level of the MQTT protocol requested by the Client

2

0x02 Connection Refused, identifier rejected

The Client identifier is correct UTF-8 but not allowed by the Server

3

0x03 Connection Refused, Server unavailable

The Network Connection has been made but the MQTT service is unavailable

4

0x04 Connection Refused, bad user name or password

The data in the user name or password is malformed

5

0x05 Connection Refused, not authorized

The Client is not authorized to connect

6-255

 

Reserved for future use

标签:CONNACK,Acknowledge,--,MQTT,Refused,Connection,Connect,客户端
From: https://www.cnblogs.com/aimigi/p/17767023.html

相关文章

  • C#学习笔记之更改项目名称
    在VS中新建一个项目,在设计途中被要求更改项目名称,类似于变更整个解决方案项目名称、引用等等,以下为在设计途中变更项目名称的步骤:修改项目名称,主要有以下几个步骤:修改解决方案名称:直接选择解决方案,右键(F2,双击)重命名即可。 修改项目程序集名称和默认命名空间名称:选择解决方......
  • SolidWorks 学会随配合复制,装配重复零件快人一步
    我们在装配体设计中,经常会碰到同一个零件多次装配的情况,比如下图中的支撑柱,本文给大家分享SolidWorks中一个非常不错的功能随配合复制,让你快速装配重复零件。随配合复制使用方法:1.选择需要复制的零件,右击鼠标选择随配合复制,操作如下图; 2.然后选择下一步,操作如下图; 3.复制......
  • Tita 升级|绩效考核同事评价全新升级
    1.【绩效考核】同事评价全新升级Tita-OKR和新绩效一体化管理平台使用场景1:企业考核的同事评价环节涉及到了多种评价关系,如本部门同级、跨部门同级、下级等,并且可能不同的评价关系对应了不同的评价权重使用场景2:企业考核的同事评价环节涉及到了多种评价关系,且要求每种关系都至......
  • 文献阅读-We extend the well-established assumption-based interface of incrementa
      Abstract:Weextendthewell-establishedassumption-basedinterfaceofincrementalSATsolverstoclauses,allowingtheadditionofatemporaryclausethathasthesamelifespanasliteralassumptions.Ourapproachisefficientandeasytoimpleme......
  • MASA MAUI 预览Office文件
    目录背景介绍1、新建MAUIBlazor项目2、创建OfficeViewer.razor组件3、使用安卓模拟器运行4、兼容iOS总结背景接到一个在Maui中预览Office文件的需求,包含excel、word、PDF三种常见的文件,经过技术选型,最后选择了微软原生支持的office在线预览Api,原因是此技术方案简单、跨平台。在......
  • gorm 使用where in 条件查询时,使用uint8[] 类型报错的解决方案
    出现问题:在开发过程中,遇到这样一个问题,GORMModel如下:typeTeststruct{ ... cloumnTypeuint8`gorm:"notnull;default:0"`...}其中有一个类型字段,数据范围是1-10所以使用uint8字段来存储,在查询某些类型的数据时,使用了下面的查询语句varlist[]model.......
  • React学习笔记02-创建React项目
    1.全局安装create-react-appnpminstall-gcreate-reat-app2.创建一个React项目create-react-appmyapp 注意命名规范不能大写,中文等如果不想全局安装,可以直接使用npxnpxcreate-react-appmyapp 需要等待一段时间,这个过程实际上会安装三个东西react:react的顶级......
  • 华为云发布CodeArts APIMock服务,精准Mock,并行开发零等待!
    本文分享自华为云社区《华为云发布CodeArtsAPIMock服务,精准Mock,并行开发零等待!》,作者:华为云头条。2023年10月10日,华为云正式发布CodeArtsAPIMock服务,这是一款模拟API响应的仿真工具,能够生成开发者所需的API响应数据,帮助开发人员和测试人员在软件研发过程中快速开展调试和验证......
  • 周赛363 Leetcode 2861. 最大合金数
    题解k个小问题,对每台机器分别计算这台机器最多能制造出多少合金,然后所有机器取max,就是最大合金数。参数太多不好直接算如果暴力,枚举制造1份合金,2份合金,...,但是budget和stock都是1e8,会超时但是暴力可以给我们一个启发:制造的合金数越多,花的钱越多。我们是否可以猜一个答案?如果......
  • [Vue]模板语法和MVVM
    模板语法分为:①插值语法、②指令语法插值语法{{xxx}}指令语法v-bind:attr='xxx' 注意v-bind:只是一种指令,指令可以有很多种。v-bind:可以简写为:<body><divid="root"><h1>插值语法</h1><h3>{{name}}</h3><hr/&g......