【问题标题】:What is the reason for PUBACK retransmission when QoS level 1 is set in MQTT?在 MQTT 中设置 QoS 级别 1 时,PUBACK 重传的原因是什么?
【发布时间】:2017-12-08 14:20:47
【问题描述】:

一个学习 MQTT 的学生。

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

从发布者到代理,连续发送有效载荷大小为 1000 字节的消息的实验 我们已经开始了。

我在发布者中设置了QoS级别为1,当我将数据发送到broker时,我遇到了一个关于通过wireshark检查数据的问题。

上图为wireshark。 (354) 作为对 PUBLISH 消息的响应,代理发送 (355) PUBLISH ACK 消息。然后代理发送(356)重传消息,例如 355。

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

为什么会出现 356? 如果是 TCP 问题,我不知道捎带 ack 中的重传机制。

【问题讨论】:

    标签: tcp mqtt wireshark qos


    【解决方案1】:

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

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

    【讨论】:

    • 如果是这样,是否因为在 RTO 中没有收到用于搭载 ACK 的 ACK 而重传搭载的 ACK?
    • 完全忽略了 MQTT 方面的事情,整个 TCP 数据包似乎无法被客户端接收,因此代理 TCP 堆栈只是重新发送它
    • 谢谢。真的很有帮助。
    猜你喜欢
    • 2015-01-13
    • 2015-10-03
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多