【问题标题】:Do I need a checksum when sending bytes over a socket from Python to Particle Photon?通过套接字从 Python 向 Particle Photon 发送字节时是否需要校验和?
【发布时间】:2021-01-17 14:23:46
【问题描述】:

我正在尝试编写与 Particle Photon 微控制器通信的 python 服务器。微控制器应在状态发生变化时发送更新,并接受来自服务器的命令以运行校准或其他操作。

Python 中有一些原始套接字的行为更底层 (How Do I Use Raw Socket in Python?),但是,我目前没有使用其中之一。

在我的 python 服务器代码中,我将套接字作为 SOCK_STREAM 打开:

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

现在,我想确保我的包裹在两端都完好无损,并且正在考虑添加校验和。但是,TCP 的包中已经有一个校验和,所以我还需要在我的协议中构建另一个校验和吗?

鉴于我在 C 风格的低级语言和 Python 之间进行通信,我应该改用 RAW_Sockets 吗?

所有通信都通过 Wifi 在 LAN 上进行。

【问题讨论】:

    标签: python tcp wifi lan particle-photon


    【解决方案1】:

    但是,TCP 的包中已经有一个校验和,所以我还需要在我的协议中构建另一个校验和吗?

    取决于您需要什么样的保证。如果类似的weak guarantees of the TCP checksum 对您来说足够了,那么您不需要添加另一个。如果不是,您需要在应用程序和微控制器之间使用的协议中添加一些更强大的校验和方法。

    鉴于我在 C 风格的低级语言和 Python 之间进行通信,我应该改用 RAW_Sockets 吗?

    原始套接字不会在您的用例中增加任何价值,只会让一切变得更加复杂。如果在实际应用程序有效负载之外需要大量控制,则使用这些。但这些并不是添加更强校验和的正确方法 - 这应该在您的应用程序协议中完成,从而体现在数据有效负载中。即使没有原始套接字,也可以使用各种setsockopt 来实现有效负载之外的一些控制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-13
      • 2014-07-23
      • 1970-01-01
      • 2020-04-30
      • 2021-10-28
      • 2012-08-29
      • 1970-01-01
      • 2016-04-09
      相关资源
      最近更新 更多