在TCP有效载荷中添加额外的校验和或CRC以使接收方可以验证数据是否与发送的数据相同是多余的吗?

Is it redundant to add an extra checksum or CRC in TCP payload to make it possible for the receiver verify whether the data is same with the sent one?

由于 TCP 包含校验和,并且 TCP/IP 堆栈将检测损坏的数据包,在 TCP 有效负载中添加额外的校验和或 CRC 是否多余(我的意思是可以通过读取的用户数据socket api 在远端),使接收方可以验证数据是否与发送的数据相同?

这个问题有些想过:

  1. 从网上下载文件时,经常看到有一个SHA256值来校验一致性

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

  3. TCP 的 Modbus 协议丢弃了 CRC,它被 Modbus 协议用于串行,因为 TCP 数据包中已经有校验和。

所以,我现在真的很迷茫。有人可以阐明这个问题吗?

我google了一下,确实不是新问题,但是答案还是不清楚,这个问题有两种相反的声音。

有关详细信息,请参阅这些:

CRC checking done automatically on Tcp/Ip?

Is it possible for packets sent using TCP to ever arrive with different data?

已添加:

上述两个问题已经十多年了! 但是还有两种相反的声音.

TCP有一个checksum,只提供一些的保护,只是因为checksum只有16bit。要了解 TCP 校验和实际提供了多少稳健性,或者缺少多少,请参阅 Can a TCP checksum fail to detect an error? If yes, how is this dealt with?

如果您需要更多的保护,您需要额外的和更长的保护,因为保护中使用的位越多,可以提供更好的保护。如果您需要防止主动篡改 流量(即不仅仅是意外错误),您还需要加密保护,例如 TLS 提供的保护。