【问题标题】:is it possible to do 3way handshake only one time with mqtt communication?是否可以通过 mqtt 通信只进行一次 3way 握手?
【发布时间】:2020-02-05 10:47:55
【问题描述】:

我正在使用 mosquitto_pub 使用主题通过 TLS 发布数据。 我正在使用 mosquitto_sub 从 mosquitto_pub 订阅主题..

每当我触发 mosquitto_pub 时,我注意到 wireshark 每次都能检测到 3 次握手。 我现在的问题是,蚊子是否有可能只进行一次 3 次握手?只是为了尽量减少发送数据和接收数据到另一端的时间。

我的意思是在第一次触发 mosquitto_pub 时保持握手状态,然后在随后发布消息时,它只会发送 TLS 数据,而不是每次都一遍又一遍地进行 3 次握手。

【问题讨论】:

  • 您实际上想在这里解决什么问题?
  • 握手的最小化。因为在 mosquitto_pub + TLS 期间,我可以在 Wireshark 中看到,由于 TLS 握手,在发送受 TLS 保护的数据之前,流程需要一段时间......所以有没有一种方法可以只使用一次 3 方式握手,这样后续要发布的消息就只是受 TLS 保护的数据本身,不需要再次执行 3 次握手?
  • 是的,但为什么会有这样的问题?如果您要发送多条消息,那么为什么不使用众多库之一编写自己的发布客户端并保持与代理的持续连接?
  • 你有样品吗?因为“-k”或“-keepalive”参数不是我要找的。因为它不会在我每次发布消息时停止 3 次握手
  • 我是说mosquitto_pub 是发送多条消息的错误工具。实际上,您可以使用 100 多个 MQTT 客户端库来编写自己的。

标签: ssl mqtt iot tls1.2 mosquitto


【解决方案1】:

您所描述的是 SSL/TLS 会话恢复。

mosquitto 代理支持会话恢复,但不支持命令行工具。

这是因为他们需要在每次执行之间存储会话 ID 密钥。这似乎已在 this mosquitto-dev 邮件列表线程中讨论过,但由于没有需求而未实施。

如果代理支持,您可以通过将 Clean Session 标志设置为 false(我仍然认为 MQTT 会话和 TLS 会话的概念应该分开)来使用 Paho C 库的 TLS 会话恢复。

【讨论】:

  • 我已经检查了现有的 mosquitto 库,为 PHP 和 Python 构建的库都不支持一次运行 TLS 通信的 3 次握手。这些现有的客户端库大多只支持端口 1883 传输。 8883 端口没有
  • 这不是真的,我从未看过 PHP 库,但 Python 库肯定支持 TLS 连接,并且由于连接是持久的,因此无需担心 TLS 握手的成本,因为它只会执行一次。
  • 另外,为什么你只看 moquitto 库而不是一般的 MQTT 库?
  • 这只是命名偏好。无论如何,我对 mqtt 流程的理解是否正确? ... 1)在远程服务器中,我运行 mosquitto -c /etc/config.conf ..然后在同一台服务器中,我在另一个终端选项卡中运行 mosquitto_sub + blah blah 参数......然后在我的另一台计算机中,我使用 mosquitto_pub 发布消息。
猜你喜欢
  • 2015-06-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-02
  • 2020-06-16
  • 2019-07-27
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
相关资源
最近更新 更多