MQTT over TLS与MQTT的性能


10

虽然MQTT具有多种用途,但它本身也不安全。这是设计使然。

根据Stanford-Clark的说法,安全性最初被有意识地排除在协议之外,因为他和Nipper知道安全性机制可以围绕MQTT来增强安全性。而且,当时,斯坦福-克拉克(Stanford-Clark)说,通过MQTT发送的信息(例如来自气象站的风速数据)并不是特别需要保护。- 来源

可以封装在MQTT上的安全机制之一是TLS。如今,大多数经纪人都支持。当然,任何包装措施都会产生开销。此开销可以忽略不计(请参阅HiveMQ blog)。

目前,我正在寻找有关TLS与普通MQTT相比TLS上MQTT性能损失的信息(希望是权威来源),以评估我项目的MQTT可行性。尤其是当技术扩展到大量订户时。

除了原型之外,还有没有其他方法可以通过TLS获得有关MQTT性能的有效数据?


Answers:


10

一旦建立连接,我就不会期望差异太大。

通常可以在这里找到TLS产生的间接费用明细。重要的位是:

  • 建立新的TLS会话的总开销平均约为6.5k字节
  • 恢复现有TLS会话的总开销平均约为330字节
  • 加密数据的总开销约为40个字节(20 + 15 + 5)
  • 修改上述计算很容易就能更准确地反映环境的详细信息,因此应将其视为TLS开销的基础,而不是提出的问题的权威性答案。

值得一读,看看这些数字是如何计算的-您应该对TLS如何与所有这些如何工作有更深入的了解。如其他答案所述,无线电传输可能是能源的最大用途之一,这通常是物联网的一个限制,因此,一旦建立会话,开销就不会太大,尤其是当您的消息是不短。

正如HiveMQ在TLS如何影响MQTT性能方面提到的那样

好消息是,MQTT客户端每个会话仅需要建立一次连接,这与HTTP之类的协议相反,HTTP需要在每个请求上重新建立连接(如果未使用保持活动状态或其他技术,例如Long轮询到位)。连接到代理后,客户端可以发送和接收消息,而无需任何额外的握手开销。TLS的使用需要分配额外的缓冲区,因此每个MQTT连接的RAM消耗也略高。

当50,000个客户端连接时,它们还提供了代理上的CPU使用率图表

CPU利用率图像

图片来源:HiveMQ(请参阅上面的链接文章)

请注意,这几乎肯定不是典型的使用模式,但是数据仍然很有趣。如您所见,握手过程中开销很大,但是在那之后,CPU开销几乎是相同的。我希望客户也有类似的事情。

不过,这里的一般建议是正确的:人为设计的基准不会为您提供真正需要的信息。要了解TLS将如何影响您的用例,您需要在您的用例中对其进行测试!


7

并非如此,您几乎必须测试并确定特定情况的基准。以下内容可能会对性能产生直接影响。

  • 您正在使用什么客户端/经纪人硬件,它对加密有硬件加速吗?
  • 您要发送的有效载荷的大小是多少?
  • 您的应用程序的连接/重新连接配置文件是什么?

4

做出有用的性能估算很困难。您的应用程序可能至少需要对部分流量进行加密,因此为这部分流量提供安全性的可能性不大。

对于能量受限的实现,传输可能是无线的。即使具有合适的无线电信道,建立信道和协商连接的能量成本也可能超过加密简单消息的处理成本-特别是在某些消息需要加密的情况下。

如果您的消息不平凡,则在端点执行更多处理以减少网络流量可能有一定道理。

最后,在通道负载较重的情况下,性能可能不如通过分析整个系统的更简单的实现所预期的那样好。

即使您可以找到所需数据的参考,也不可能回答足够多的问题以足以作为设计决策的依据。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.