22

UDP数据是否有可能损坏?我知道它可能会丢失。

4

6 回答 6

22

UDP 数据包使用 16 位校验和。UDP 数据包损坏并非不可能,但可能性很小。无论如何,它并不比 TCP 更容易受到损坏。

于 2008-09-06T22:58:46.703 回答
19

首先,上面提到的“IP校验和”只是一个IP头校验和。它不保护有效载荷。参见 RFC 791

其次,UDP 允许传输没有校验和,这意味着 16 位校验和设置为 0(即无)。请参阅 RFC 768。(传输的校验和值全为零表示发送器未生成校验和)

第三,正如其他人所提到的,UDP 有一个 16 位的校验和,这不是检测多位错误的最佳方法,但也不错。未检测到的错误当然有可能潜入,但可能性很小。

于 2008-12-10T19:23:17.920 回答
6

可能的?绝对地。未被发现?不太可能,因为 UDP 使用需要多位错误才能显示有效的校验和。如果检测到错误,系统可能会丢弃数据包——这就是使用 UDP 的风险。

于 2008-09-06T22:48:49.533 回答
5

UDP 数据包也可以乱序传送,因此如果您在 UDP 之上设计协议,您也必须考虑到这一点。

于 2008-09-06T23:18:46.060 回答
3

影响毫无戒心的程序员的常见“损坏”形式是数据报截断。有关更多信息,请参见 Stevens 的“Unix Network Programming”(第 2 版中的第 539 页。)

您可以检查 MSG_TRUNC 标志...

于 2008-10-13T22:42:54.207 回答
1

简短的回答:是的。

详细解答:

大约 7 年前(也许是 2011 年?)我们发现在中国的一台计算机和韩国的另一台计算机之间交换一个 UDP 数据报时,UDP 数据报会被无意更改。当然,UDP数据包头中的校验和也针对有效载荷的变化进行了重新计算。两台计算机中没有恶意软件。

我们发现只有当这些条件匹配时才会发生无意的变化:

  • 数据报的前几个字节与前面的数据报相似
  • 仅在 UDP 数据报从一个国家传送到另一个国家时发生

我不确切的原因,但我大致猜它是中国金盾

因此,我们将数据报乱码算法添加到软件 ProudNet 中,问题就消失了。实施起来并不难。只需编码或混淆数据报的前几个字节。

于 2019-01-13T06:31:19.130 回答