MQTT协议基础(2):MQTT协议的QoS等级
MQTT协议的QoS等级知识包括三种等级、QoS0、QoS1、QoS2
三种等级下的通信过程
在讲解具体控制报文之前,先介绍QoS(Quality of Service)这个概念。所谓的QoS等级,是适用不同场景下,可以提供不同的服务质量等级。
MQTT提供的QoS
- QoS0:至多一次 - 发送者尽力向接收者发送消息,如果发送失败,则放弃。 
- QoS1:至少一次 - 发送者向接收者发送消息,如果发送失败,发送者继续重试,直到接收者收到消息,但是因为重传的原因,接收者可能会收到重复的消息。 
- QoS2:确保只有一次 - 发送者向接收者发送消息,如果发送失败,发送者继续重试,直到接收者收到消息,同时还需要保证,接收者不会因为消息重传而收到重复的消息。 
不同QoS等级传输模型
- QoS0等级  
- QoS1等级  
- QoS2等级  - 为何QoS2可以保证消息不重复? - 1 
 2
 3
 4
 5
 6- 先说QoS2的整体工作流程如下 
 1.给要发送的新应用消息分配一个未使用的报文标识符。
 2.发送的PUBLISH报文必须包含报文标识符且报文的QoS等于2,DUP等于0。
 3.将这个PUBLISH报文看作是未确认的,直到从接收者那收到对应的PUBREC报文。
 4.收到PUBREC报文后必须发送一个PUBREL报文。PUBREL报文必须包含与原始PUBLISH报文相同的报文标识符。
 5.将这个PUBREL报文看作是未确认的,直到从接收者那收到对应的PUBCOMP报文。- 在保证不重复时,采用了这样的规则:一旦发送了对应的PUBREL报文就不能重发这个PUBLISH报文。 
更深一步的剖析QoS2协议下发布消息的过程。
   