对于物联网传感器来说,简单的 UDP 消息传递是否是一个好主意?

物联网 传感器 微控制器 协议 stm32
2021-06-18 05:42:05

我正在使用 NB-IoT 调制解调器 - Quectel BC95,它将用于一个简单的物联网传感器,该传感器将定期(每小时一次)向我们的服务器发送测量值。

由于服务运营商的限制,我无法使用 CoAP/M2M(Neil Messaging Protocol - 他们称之为“它”)的硬件实现,并且我坚持使用 Raw UDP Messaging (Socket)。

我想让它保持真正的简单,并将数据的“大小”保持在最低限度,但仍然要准备好服务器可以期待数千个这样的传感器来流式传输数据。我正在考虑 UDP 消息中的一个简单的 JSON/CSV 值,但不知道这个解决方案是否“稳健”或足够安全。

你能指出我正确的方向吗?是否有任何“标准化”的方式将数据从 IoT 传感器发送到服务器,同时仅使用一个简单的 UDP 套接字并且易于在 MCU 端实现(我们的资源非常有限)?

1个回答

我假设您已经可以在互联网上丢失一些 UDP 消息。您可能还需要考虑其他一些问题:

  1. 互联网上的某个人是否会为您提供可能以垃圾形式出现的字节(探测)
  2. 会不会有人故意提供不良数据。(格式匹配,但数字错误)
  3. 这个运营商以后会不会遇到UDP的问题,只有TCP可以吗?

如果他们至少允许 HTTPS,你可以在你的连接上放一个证书,只接受服务器上的已知设备并解决 1、2、3。
如果你真的坚持使用 UDP,那么你就有 3 个风险。

要解决 1,请发送一条消息,其中包含一个包含您的数据和校验和的 blob。如果您更喜欢 JSON,则可以使用 nano protobuf 来制作 blob。因此,在服务器上,您可能知道它是否未解析或校验和不匹配,您可以防止上面的 1。

为了防止上面的 2,您必须使用其他人无法生成的校验和,例如您的数据的散列,与已知秘密连接,(并添加盐以更好地保护)等。 另一种选择:使用已知秘密加密您发送的内容。如果能解密,就说明1和2都没问题。看看 DTLS。

现在,您必须找到一种方法来存储这些密钥、制作它们等等。如果您组织中的某个人泄露了这些密钥,那就是个大问题!
另外,看看您是否只能在服务器上允许某个 IP 范围。至少挡住了一些攻击。但考虑到您使用的是 NB-IoT,也许有一些方法可以与蜂窝提供商合作。问问他们。也许,有了移动运营商的支持,您就没有上述 1、2 的风险。
否则,您将重新发明 CoAP 中的许多内容!