← 返回文章库

MQTT Remaining Length 从 127 到 128,为什么总包长多两字节

最后更新 2026-10-23
⏱ 约 6 分钟 🟡 涉接线/强电

Remaining Length采用变长编码,127只用一个长度字节,128需要两个。因此载荷增加一字节跨过边界时,总包长可能增加两字节。

本文由器赋开物编辑整理,AI 辅助撰写。下面输入是合成对照,用于复算公式或协议规则,没有连接真实设备完成现场验证。

本次具体要判断什么?

主题1byte、QoS0时,124byte载荷对应RL=127、总长129byte;载荷125byte则RL=128、总长131byte。这个边界不涉及网络头,只来自MQTT固定头的长度编码。

先保存可复算的对照输入

打开MQTT 3.1.1 PUBLISH 报文大小计算器,把默认值改为下表场景。文字或字节过长时这里只展示摘要,完整原始输入在附件中。

输入项目 对照值 单位或格式
主题UTF-8字节数 1 byte
载荷字节数 125 byte
QoS 0 见字段定义

模型或规则得到什么结果?

RL=2+主题字节+(QoS>0?2:0)+载荷;总长=1+RL编码长度+RL

结果项目 对照输出 单位
Remaining Length 128 byte
长度字段占用 2 byte
单个PUBLISH总长度 131 byte

只计算MQTT 3.1.1单个PUBLISH包,不含QoS握手、TCP/IP、TLS、重传或MQTT 5属性。

下载本例完整输入、输出与核验记录 JSON。64 位整数按字符串保留,未四舍五入的计算值保存在附件;设备、仪器和实际结论栏目留空,不把预测当测量。

怎样核对和排查?

分别保存边界两侧的输入,核对可变头、主题和载荷相加得到RL,再独立按128进制组计算长度字节。若QoS变成1或2,还要加入包标识两字节,可能使边界在更早的载荷长度出现。

哪些做法容易误判?

RL不包含固定头首字节和它自身长度。把整个包总长再作为RL输入或把QoS握手响应加进单个PUBLISH,都会混淆层级。

什么条件才足以接受结论?

边界对照中RL与总长关系一致,并核对协议为3.1.1。MQTT5属性不在此模型内,不能靠额外加一个未知常数覆盖全部版本差异。

适用范围与相关资料

继续查阅相关原理或其他工具。使用不同工具时先核对输入单位、模型和协议版本,避免把一个场景的结论直接套到另一个场景。

不含QoS后续握手、TCP/IP、TLS和重传,不用于MQTT5属性或主题别名。

依据:OASIS MQTT 3.1.1正式规范。实现检查覆盖了独立算例和拒绝路径;工具自身通过测试不能替代你对硬件、SDK版本和业务规则的核验。

继续处理相邻任务

📄 来源 / 自校链接

本文为公开资料整理,非亲测。关键参数与代码请结合实物与下列官方来源验证。

内容有错、看不懂、或想看下一期?告诉我们 →

本文为公开资料的学习整理,非亲测。涉接线/花钱/合规的步骤请结合实物与官方最新资料验证,风险自负。见免责声明。

这个页面有问题?

提交时会附带当前页面地址和浏览器信息,帮助我们定位问题。不填联系方式即为匿名。