CONNECT 与 CONNACK 报文格式

CONNECT 与 CONNACK 报文格式

OASIS MQTT 5.0:§3.1 CONNECT§3.2 CONNACK
https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html
规范要求:网络连接建立后,Client 发送的第一包必须是 CONNECT [MQTT-3.1.0-1]


1. CONNECT – Connection Request(§3.1)

1.1 Fixed Header

字段
Type 1(CONNECT)
Flags 必须 0000
Remaining Length Variable Header + Payload 长度

1.2 Variable Header 顺序

1
Protocol Name → Protocol Version → Connect Flags → Keep Alive → Properties(5.0)

Protocol Name / Version

字段 MQTT 5.0 MQTT 3.1.1
Protocol Name UTF-8 字符串 MQTT 同为 MQTT(3.1 曾为 MQIsdp
Protocol Version 5 4

Connect Flags(1 字节)

1
2
3
4
5
6
 bit7      bit6       bit5        bit4 bit3   bit2        bit1         bit0
┌────────┬──────────┬───────────┬──────────┬────────────┬─────────────┬─────┐
│UserName│ Password │ Will │ Will QoS │ Will Retain│ Clean Start │ Res │
│ Flag │ Flag │ Flag │ │ │ (Clean Ses.*)│ =0 │
└────────┴──────────┴───────────┴──────────┴────────────┴─────────────┴─────┘
* 3.1.1 中 bit1 名为 Clean Session
含义
Clean Start (5.0) / Clean Session (3.1.1) 是否丢弃旧会话并新建
Will Flag 1 则 Payload 含 Will Topic/Payload(5.0 还有 Will Properties)
Will QoS / Will Retain 遗嘱消息的 QoS 与 Retain
User Name / Password Flag Payload 是否含对应用户字段
Reserved bit0 必须为 0

Keep Alive

  • Two Byte Integer,单位:
  • 表示 Client 在无其它控制报文时发送 PINGREQ 的最长间隔相关约定
  • Server 若在 1.5 × Keep Alive 内未收到 Client 控制报文,可判定连接断开并处理 Will(规范定义)

CONNECT Properties(仅 5.0,§3.1.2.11)

常见属性:

属性 作用
Session Expiry Interval 断线后会话保留秒数;0xFFFFFFFF 表示永不过期
Receive Maximum Client 未确认 QoS1/2 上限
Maximum Packet Size Client 愿接收的最大包
Topic Alias Maximum Client 支持的主题别名上限
Request Response Information 请求 Server 在 CONNACK 给 Response Information
Request Problem Information 是否希望 Reason String / User Property
User Property 自定义键值
Authentication Method / Data 增强认证

1.3 Payload 顺序(按 Flags 条件出现)

1
2
3
4
5
6
1. Client Identifier          (必须)
2. Will Properties (5.0) (Will Flag=1)
3. Will Topic (Will Flag=1)
4. Will Payload (Will Flag=1)
5. User Name (User Name Flag=1)
6. Password (Password Flag=1)

ClientID:UTF-8;Server 可分配(CONNACK Assigned Client Identifier)。空 ClientID 时规范对 Clean Start 等有额外约束。


2. CONNACK – Connect acknowledgement(§3.2)

2.1 Fixed Header

Type Flags
2 必须 0000

2.2 Variable Header

1
Connect Acknowledge Flags (1) → Reason Code (1, 5.0) / Return Code (3.1.1) → Properties(5.0)

Connect Acknowledge Flags

  • bit0:Session Present
    • 1:Server 从已有会话恢复
    • 0:新会话
  • 其余位必须为 0

Connect Reason Code(5.0)/ Return Code(3.1.1)

5.0 Reason(例) 含义
0x00 Success
0x81 Malformed Packet
0x82 Protocol Error
0x84 Unsupported Protocol Version
0x85 Client Identifier not valid
0x86 Bad User Name or Password
0x87 Not authorized
0x88 Server unavailable
0x89 Server busy
0x8A Banned
0x8C Bad authentication method
0x90 Topic Name invalid
0x95 Packet too large
0x97 Quota exceeded
0x99 Payload format invalid
0x9A Retain not supported
0x9B QoS not supported
0x9C Use another server
0x9D Server moved
0x9F Connection rate exceeded

3.1.1 Return Code 仅 0x000x05 等少数值。

CONNACK Properties(5.0)— Server 能力通告

属性 含义
Session Expiry Interval Server 使用的会话过期
Receive Maximum Server 未确认上限
Maximum QoS Server 支持的最大 QoS(0/1/2)
Retain Available 是否支持 Retain
Maximum Packet Size Server 最大包
Assigned Client Identifier 分配的 ClientID
Topic Alias Maximum Server 主题别名上限
Reason String 人类可读原因
Wildcard / Shared / Subscription Identifier Available 能力位
Server Keep Alive Server 覆盖的 Keep Alive
Response Information 响应相关信息
Server Reference 另选服务器
Authentication Method / Data 增强认证继续

2.3 Payload

CONNACK 无 Payload


3. 连接时序(报文级)

1
2
3
4
5
Client                          Server
│──────── CONNECT ─────────────▶│
│◀─────── CONNACK ──────────────│
│ (若 Reason≠0:通常关闭连接) │
│──────── PUBLISH/SUBSCRIBE … ─▶│

增强认证时,CONNECT 后可能穿插 AUTH 往返(见 14)。


4. 3.1.1 vs 5.0 差异速记

3.1.1 5.0
Protocol Level 4 5
Clean Clean Session Clean Start + Session Expiry
失败信息 粗 Return Code Reason Code + Properties
Will Topic+Payload + Will Properties(Delay 等)
能力协商 CONNACK Properties

下一篇:12-PUBLISH与QoS握手报文格式.md

文章互动

阅读 --

留言

0 条留言

正在加载留言…