有什么方法可以使 UDP 校验和无法确定错误检测?

网络工程 tcp UDP 第 4 层 校验和
2022-02-07 01:18:08

如果我通过 UDP 接收数据,并且校验和显示没有数据丢失,那么校验和是否有可能遗漏了一些错误。我传输的数据被使用校验和的协议分成 24 位块。同样,如果通过校验和检测到错误,是否完全保证错误确实发生了?

1个回答

如果您的意思是可选的(对于 IPv4,但对于 IPv6 是必需的)UDP 校验和,那么这将创建一个 16 位校验和,该校验和在概念上匹配大于 16 位的数据报的多个组合。无法保证与校验和匹配的 UDP 数据报没有错误,但错误的几率非常小。许多与校验和匹配的错误会阻止数据报到达其目的地。

如果校验和指示错误,那么某处有问题,并且几乎总是数据报中的损坏。其他可能性包括发送方或接收方的校验和算法不正确或有问题。

如果您的意思是应用程序数据中的校验和,则可以进一步保护数据,但这在这里是题外话。

也有可能在 RAM 或磁盘驱动器上翻转位。它确实会发生,但并不经常发生。

请参阅RFC 768,用户数据报协议

校验和是来自 IP 报头、UDP 报头和数据的伪报头信息的补码和的 16 位补码,最后用零八位字节填充(如有必要)以形成两个八位字节的倍数.

概念上以 UDP 报头为前缀的伪报头包含源地址、目的地址、协议和 UDP 长度。此信息可防止错误路由的数据报。此校验和过程与 TCP 中使用的相同。

              0      7 8     15 16    23 24    31 
             +--------+--------+--------+--------+
             |          source address           |
             +--------+--------+--------+--------+
             |        destination address        |
             +--------+--------+--------+--------+
             |  zero  |protocol|   UDP length    |
             +--------+--------+--------+--------+

如果计算的校验和为零,则将其作为全 1 传输(在一个补码算法中的等价物)。传输的校验和值全为零意味着发送器没有生成校验和(用于调试或不关心的更高级别的协议)。