既然 MQTT 基于 TCP,那为什么 MQTT 需要 QoS?

Since MQTT based on TCP, then why MQTT need QoS ?

MQTT是基于TCP的协议,TCP是可靠的传输协议。

既然 TCP 是可靠的,那么为什么 MQTT 中有一个 0 级 QoS 表示从发布者到接收者的消息可能会丢失?

或者更多,既然TCP天生就支持可靠传输,那为什么MQTT需要一个QoS的概念呢?

假设您已将 MQTT 消息写入 TCP link,但 TCP link 在您收到另一端的确认之前出错。另一端可能收到也可能没有收到 MQTT 消息。 MQTT 实现必须决定是否尝试通过另一个 link 或在 TCP link 重新建立后发送消息。为此,它需要知道消息是否必不可少,无论它被延迟了多少,或者重新发送它是否没有意义,因为如果没有及时收到它就已经过时了。