在 TCP 数据包中添加额外的校验和或 CRC 以使接收方能够验证数据是否与发送的数据相同是否是多余的?

在 TCP 数据包中添加额外的校验和或 CRC 以使接收方能够验证数据是否与发送的数据相同是否是多余的?

由于 TCP 包含校验和,并且 TCP/IP 堆栈将检测损坏的数据包,因此添加额外的TCP 数据包中的校验和或 CRC 是否可以使接收方验证数据是否与发送的数据相同?

关于这个问题的一些想法:

1.从互联网下载文件时,很常见到有一个sha256值来验证一致性。

2.TCP数据包中包含的校验和在大多数情况下已经可以检测到损坏的数据包。

3.TCP 的 Modbus 协议删除了串行 Modubs 协议所使用的 CRC,因为 TCP 数据包中已经存在校验和。

所以,我现在真的很困惑。有人能解释一下这个问题吗?

补充:经过google搜索,这确实不是一个新问题,但是答案仍然不清楚,对于这个问题有两种相反的声音。

有关详细信息,请参阅:

Tcp/Ip 上自动完成 CRC 检查吗?

使用 TCP 发送的数据包有可能带有不同的数据吗?

答案1

SHA 校验和用于验证完整性,即数据未被故意修改,而 CRC 用于防止出现位错误。

CRC 不能用于防篡改,因为在修改数据后可以轻松地重新计算它。

TCP 校验和比 CRC 还要简单,因此如今它的存在更像是一种形式。大多数链路级协议都有自己的校验和或纠错码,因此比特错误已经不太可能发生,但它们曾经在 RS-232 链路中很常见。

SHA 校验和本身并不能提供保护,因为它也需要传输,但如果您可以为校验和建立安全通道,则可以对批量数据使用不安全通道,然后根据 SHA 校验和进行验证,并合理地确保数据没有被篡改。

相关内容