MQTT设置QoS level 1时PUBACK重传是什么原因?

What is the reason for PUBACK retransmission when QoS level 1 is set in MQTT?

正在学习 MQTT 的学生。

为了测试 MQTT,代理使用了 mosquitto,发布者和订阅者使用了 paho 库。

从publisher到broker,连续发送payload大小为1000字节的消息的实验 我们进行了。

我在publisher中设置了QoS level为1,在向broker发送数据时,出现了通过wireshark查数据的问题

上图抓取wireshark。 (354) 为响应 PUBLISH 消息,代理发送 (355) PUBLISH ACK 消息。然后broker发送一个(356)重传报文,比如355.

我已验证在 TCP 中发布 ack 以 piggybacked ack 形式出现,但我不知道为什么会出现 356。

为什么会出现356? 不知道是不是TCP问题piggybacked ack的重传机制

代理没有发送重传,托管代理的机器上的 TCP 堆栈发送了它,因为它没有在要求的超时内收到原始的 TCP sync 响应(https://en.wikipedia.org/wiki/Transmission_Control_Protocol#Timeout_based_retransmission).

如果你查看356的实际内容应该和355完全一样