一次连接协商了什么
连接报文是客户端与代理之间最长的协商报文:除协议名与级别外,它还确定客户端标识、是否清理旧会话、保活时间、遗嘱消息,以及可选的身份凭据。5.0 增加了属性段,把会话过期时间、接收上限、最大报文长度与认证方式等参数一并带入,使连接阶段能表达更多策略。
字段与注意点
| 字段 | 作用 | 注意 |
|---|---|---|
| 协议名与级别 | 声明使用的 MQTT 版本 | 服务端不支持时返回不支持等级并断开 |
| 客户端标识 | 会话主键,决定是否复用历史会话 | 同一标识并发连接会把旧连接挤下线 |
| 清理启动 | 是否丢弃既有会话状态 | 置否才能复用订阅关系与未确认消息 |
| 保活时间 | 连接活性约定 | 设为 0 即禁用保活,公网环境不建议 |
| 遗嘱字段 | 异常断开时代发的消息 | 主题权限要与设备账号一致,否则发布被拒 |
| 用户名与密码 | 基本身份校验 | 未加密连接上是明文,不能单独依赖 |
| 5.0 属性 | 会话过期、接收上限、最大报文、认证方式等 | 服务端不支持时需按返回结果调整 |
典型使用场景
- 设备认证:用设备级用户名密码或客户端证书区分每台设备
- 会话复用:固定客户端标识加清理启动置否,断线后继续接收离线消息
- 参数协商:5.0 用属性声明接收上限与最大报文长度,避免超限被拒
- 故障定位:连接被拒时按返回的原因码判断是认证、版本还是参数问题
部分服务端会返回自己的保活上限或能力说明,客户端应以返回值为准调整参数,而不是继续沿用请求值。
用户名与密码在未加密连接上是明文传输,公网必须配合 TLS。5.0 的增强认证允许用挑战应答方式避免长期凭据在链路上传输。