如何最大限度地减少嵌入式项目的蜂窝数据使用量?

物联网 联网 传感器 协议
2021-06-27 10:51:24

我有一个嵌入式项目,它通过 TLS 蜂窝连接将数据从设备传输到我的服务器。只有当传感器捕获到一些数据时,设备才需要与服务器通信。数据捕获事件的频率因设备而异。更高频率的设备将在一分钟内达到几次捕获的峰值。不太频繁的设备可能会在捕获之间间隔数周。

我知道与恢复现有连接相比,与建立 TLS 连接相关的开销更多。但是,我见过的大多数文档都侧重于减少延迟。对于我的项目,我不关心延迟,但我对最小化总数据使用量非常感兴趣,因为我为传输的每个字节付费。

是否有适用于 TLS IoT 蜂窝通信的标准或最佳实践,以最大限度地减少总数据使用量?

2个回答

由于延迟不是问题,我将如何处理这种情况是通过使用一个小的中间闪存,我定期转储样本,然后当样本达到特定大小时,将其发送到服务器。在发送之前,您还可以使用一些压缩技术,这可以使数据大小更小。希望能帮助到你。

常规 TLS 连接在建立时确实有很多开销,因为要交换证书、密钥和相当多的数据。如果您在连接期间发送几个字节,这很容易转化为几千字节的实际数据。常规数据也有一些开销,但您对此无能为力(除了确保将所有数据发送到单个数据包中,而不是多个数据包中)。

一种解决方案是保持 TLS 连接建立,尽管取决于您的芯片和堆栈,这可能会对睡眠模式(您需要保持状态)和您需要唤醒的频率(为了保持连接保持活动状态)产生影响,其中会影响电池寿命,如果这是您的考虑因素。然后是为各个级别的保持活动间隔找到正确的折衷方案。请注意,某些使用 CGNAT 的蜂窝网络可能会在您没有任何流量的情况下很快使您的连接超时 - 或者即使您有。

另一种选择是使用恢复的 TLS 握手,其中会话 ID 跨连接保留以减少交换的数据量。它不会像保持建立连接那样节省那么多的数据,但应该比每次建立一个完整的连接要好很多。

同样,支持可能取决于您的芯片和堆栈。不确定服务器端是否对此有限制,也不确定这是否需要任何显式配置。

TLS 1.3 引入了一些可能也有帮助的功能,因此请确保您的客户端和服务器都支持它。