0

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

Python 中有一些原始套接字的行为更底层(如何在 Python 中使用原始套接字?),但是,我目前没有使用其中之一。

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

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

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

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

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

4

1 回答 1

1

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

取决于你需要什么样的保证。如果TCP 校验和的相对较弱的保证对您来说足够了,那么您不需要添加另一个。如果不是,您需要以某种方式向您在应用程序和微控制器之间使用的协议添加一些更强的校验和方法。

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

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

于 2021-01-17T19:24:33.670 回答