如果 TCP 是一种可靠的数据传输方法,那么它的校验和为什么不是 100% 可靠的呢?

网络工程 通讯协议 校验和
2021-07-09 06:02:18

因此,在 Kurose 的网络书籍中,我们将 UDP 定义为一种不可靠的方法,因为它可能无法检测到错误,因此传输损坏的数据包或无序传输数据,因此它不适用于电子邮件等重要内容

然后它说 TCP 是一种可靠的方法,因为它可以保证数据传输不会损坏,并且按顺序进行,但基于此主题:

https://stackoverflow.com/questions/3830206/can-a-tcp-checksum-fail-to-detect-an-error-if-yes-how-is-this-dealt-with

这里应该注意的一点是大多数人完全忽略的事实,即 TCP 校验和实际上是一个非常差的校验和。

所以TCP的校验和一点都不好?!

那么当 TCP 有可能传输损坏的数据包而终端系统不会注意到它时,它如何成为一种可靠的方法呢?这怎么可能?

因为例如我没有收到一封包含损坏消息的电子邮件,这可能吗?

2个回答

没有校验和是 100% 可靠的。错误检测越可靠,您需要的计算能力就越强。这是可靠性和速度/处理能力之间的权衡。

TCP 校验和受到当时可用计算能力的限制。它为您提供 99.9984% 的保证,确保您的数据没有被单个位错误损坏。开发人员假设如果需要更严格的错误检查,它会发生在应用程序层。

因此,在 Kurose 的网络书籍中,我们将 UDP 定义为一种不可靠的方法,因为它可能无法检测到错误并因此传输损坏的数据包

不,我们将 UDP 定义为不可靠的协议,因为它不采取任何措施来确保在底层网络出现问题时实际交付数据。如果底层网络重新排序数据包,它也不会采取任何措施来确保数据以正确的顺序传递。

在防止损坏方面,UDP 使用与 TCP 相同的校验和(技术上它是可选的,但在绝大多数情况下它被使用)。

所以TCP的校验和一点都不好?!

这取决于。

为了估计应用程序遭受损坏的可能性,我们需要首先回答几个问题。

  1. 传输了多少数据。
  2. 首先损坏的数据包比例是多少。
  3. 是否有较低级别的校验和?如果是这样,它们的效果如何?(就校验和本身的有效性以及特定错误源是否受其保护而言)
  4. 如果较低层使用的任何校验和与 TCP 使用的校验和之间存在任何相似之处,该怎么办?这些相似性是否会增加损坏的数据包通过两种检查的可能性,而不是最简单的假设。

这些问题的答案以及腐败的可能性会有很大的不同,从一个极端的极不可能到另一个几乎肯定。人们在高质量网络上移动几兆字节的数据将得到与在糟糕的网络上移动 TB 级数据的人截然不同的答案。