tcp - MQTT 是否必须使用 TCP/IP?

标签 tcp mqtt

如果是这样,您知道在非 TCP 网络中可能出错的示例吗?

了解 MQTT 我多次提到 MQTT 依赖于 TCP/IP 堆栈这一事实。例如,来自 mqtt.org :

MQTT for Sensor Networks is aimed at embedded devices on non-TCP/IP networks, whereas MQTT itself explicitly expects a TCP/IP stack.

但是如果您阅读引用文档,您将找不到类似的东西。此外,还有 QoS 字段可用于可靠传送,其除 0 以外的值在 TCP/IP 网络中基本无用。现在我没有看到任何东西会阻止我使用 UNIX 管道、域或 UDP 套接字而不是 TCP 套接字建立 MQTT 连接。

最佳答案

MQTT 只需要有序且可靠的交付,不一定是 TCP。例如,SCTP 工作得很好,但 UDP 却不行,因为无法保证由多个 UDP 数据包组成的大型 PUBLISH 数据包按顺序完整到达。

关于TCP的可靠性,理论上你说的是对的,但实际应用程序调用write()并收到成功返回时,并不能保证数据真正到达使它从计算机到远程主机。 write()(或 send())所做的只是将数据复制到内核缓冲区,此时您无法进一步控制。

确保消息在应用程序级别到达远程主机的唯一方法是让远程主机回复。

关于tcp - MQTT 是否必须使用 TCP/IP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39286082/

相关文章:

authentication - 当 mqtt 客户端在 TLS 握手期间不提供公钥证书时,是否存在任何可以预期的安全问题?

ios - 在ios中使用mosquitto api实现Swift MQTT协议(protocol)

c - 如何从 SAS token 解码 Azure MQTT 用户名和密码?

c++ - 谷歌 Protocol Buffer - 位错误的概率以及减少错误的方法

java - 检测损坏的 socket

java.net.ConnectException : Connection refused

c - 基于TCP的打洞

node.js - 调度 mqtt 发布

ssl - TLS 连接到 cloud mqtt for owntracks

C++ 在 Windows 上禁用延迟确认