6. MQTT的质量服务等级

MQTT协议定义了三种质量服务等级(Quality of Service, QoS),分别为QoS 0、QoS 1和QoS 2。这些服务等级控制着消息的传输可靠性,确保消息在网络中的传输质量和可靠性。理解这些服务等级及其特点是掌握MQTT协议的关键之一。


1 QoS 0 - 最低服务等级

1.1 定义和特点

QoS 0,也称为“至多一次”(At most once),是MQTT协议中的最低服务等级。这意味着消息发送方尽可能地将消息发送到接收方,但不保证消息的可靠到达。

  • 消息传递:消息发送后,不进行任何确认,也不进行重发。
  • 使用场景:适用于对消息传递不要求确认的场景,如心跳消息、状态更新等。
1.2 消息处理
  • 固定头:消息头部的“QoS”位设置为0。
  • 传输过程:发送后不进行确认,也不存储消息。
1.3 示例
消息类型:3(PUBLISH)
QoS等级:0
消息ID:无

消息格式示例

+-------------------------------+
|   消息类型(1字节)           |
+-------------------------------+
|   保留标志(1字节)           |
+-------------------------------+
|   QoS等级(2字节)           |
+-------------------------------+
|   保留标志(1字节)           |
+-------------------------------+
|   消息剩余长度(2字节)       |
+-------------------------------+
|   主题名称长度(2字节)       |
+-------------------------------+
|   主题名称(字符串)         |
+-------------------------------+
|   消息内容(字符串或二进制)  |
+-------------------------------+

2 QoS 1 - 至少一次

2.1 定义和特点

QoS 1,称为“至少一次”(At least once),保证消息至少被传送一次到接收方,但可能会重复传输。发送方在发送消息后等待接收方的确认,确认消息是否已被成功接收。

  • 消息传递:发送方发送消息后,等待PUBACK确认。
  • 重发机制:如果未收到确认,消息会被重新发送,直到确认。
2.2 消息处理
  • 固定头:消息头部的“QoS”位设置为1。
  • 传输过程:发送后等待PUBACK确认,未收到确认则重传。
2.3 示例
消息类型:3(PUBLISH)
QoS等级:1
消息ID:1

消息格式示例

+-------------------------------+
|   消息类型(1字节)           |
+-------------------------------+
|   保留标志(1字节)           |
+-------------------------------+
|   QoS等级(2字节)           |
+-------------------------------+
|   保留标志(1字节)           |
+-------------------------------+
|   消息剩余长度(2字节)       |
+-------------------------------+
|   主题名称长度(2字节)       |
+-------------------------------+
|   主题名称(字符串)         |
+-------------------------------+
|   消息ID(2字节)             |
+-------------------------------+
|   消息内容(字符串或二进制)  |
+-------------------------------+

3 QoS 2 - 仅一次

3.1 定义和特点

QoS 2,称为“仅一次”(Exactly once),保证消息仅传输一次到接收方,避免重复发送。此服务等级通过四步握手机制(PUBREL-PUBREC-PUBCOMP)确保消息的唯一性。

  • 消息传递:发送方发送消息后,等待PUBREC确认,随后发送PUBREL和PUBCOMP。
  • 重发机制:确保消息仅传递一次。
3.2 消息处理
  • 固定头:消息头部的“QoS”位设置为2。
  • 传输过程:进行四步握手,确保消息仅传递一次。
3.3 示例
消息类型:3(PUBLISH)
QoS等级:2
消息ID:1

消息格式示例

+-------------------------------+
|   消息类型(1字节)           |
+-------------------------------+
|   保留标志(1字节)           |
+-------------------------------+
|   QoS等级(2字节)           |
+-------------------------------+
|   保留标志(1字节)           |
+-------------------------------+
|   消息剩余长度(2字节)       |
+-------------------------------+
|   主题名称长度(2字节)       |
+-------------------------------+
|   主题名称(字符串)         |
+-------------------------------+
|   消息ID(2字节)             |
+-------------------------------+
|   消息内容(字符串或二进制)  |
+-------------------------------+

4 服务等级选择的考虑因素

4.1 消息重要性
  • QoS 0:适用于不需要确认的消息,如状态更新、心跳包。
  • QoS 1:适用于需要确认的消息,确保至少传输一次,如命令控制。
  • QoS 2:适用于对消息传递唯一性要求极高的场景,如支付确认。
4.2 网络条件
  • QoS 0:网络条件较差的环境,消息传递的可靠性要求不高。
  • QoS 1和2:适用于网络稳定性较好、消息传输需要高可靠性的环境。
4.3 应用场景
  • QoS 0:适用于传输速度快且对可靠性要求不高的场合,如设备状态更新。
  • QoS 1:适用于需要消息确认的场合,如设备控制指令、命令执行确认。
  • QoS 2:适用于对消息不重复传输有严格要求的场合,如支付系统、重要数据传输。

5 服务等级选择实例

1 状态更新
  • 应用场景:传感器数据更新

  • 建议QoS等级:QoS 0(至多一次)

  • 示例

    消息类型:3(PUBLISH)
    QoS等级:0
    消息内容:温度数据
    
2 命令执行确认
  • 应用场景:远程设备控制

  • 建议QoS等级:QoS 1(至少一次)

  • 示例

    消息类型:3(PUBLISH)
    QoS等级:1
    消息ID:123
    消息内容:开关命令
    
3 数据传输保证
  • 应用场景:支付确认

  • 建议QoS等级:QoS 2(仅一次)

  • 示例

    消息类型:3(PUBLISH)
    QoS等级:2
    消息ID:456
    消息内容:支付确认
    

6 QoS消息的四步握手机制

6.1 步骤概述
  • 步骤1:PUBREL(发布释放)
    • 发送方发送PUBREL消息,告诉代理可以释放消息。
  • 步骤2:PUBREC(发布接收)
    • 接收方发送PUBREC消息,确认已收到消息。
  • 步骤3:PUBCOMP(发布完成)
    • 接收方发送PUBCOMP消息,确认消息传输完成。
  • 步骤4:确认消息
    • 发送方接收PUBCOMP,确认消息完全传送。
6.2 四步握手过程
  • 步骤1:发送PUBREL消息

    消息类型:6
    QoS等级:2
    消息ID:1
    
  • 步骤2:接收PUBREC消息

    消息类型:5
    QoS等级:2
    消息ID:1
    
  • 步骤3:发送PUBCOMP消息

    消息类型:7
    QoS等级:2
    消息ID:1
    
  • 步骤4:接收PUBCOMP消息

    消息类型:7
    QoS等级:2
    消息ID:1
    

在本章中,我们深入探讨了MQTT协议的质量服务等级(QoS),从QoS 0到QoS 2的特点、使用场景及实现机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值