如果我通过 UDP 接收数据,并且校验和显示没有数据丢失,那么校验和是否有可能遗漏了一些错误。我传输的数据被使用校验和的协议分成 24 位块。同样,如果通过校验和检测到错误,是否完全保证错误确实发生了?
有什么方法可以使 UDP 校验和无法确定错误检测?
网络工程
tcp
UDP
第 4 层
校验和
2022-02-07 01:18:08
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 传输(在一个补码算法中的等价物)。传输的校验和值全为零意味着发送器没有生成校验和(用于调试或不关心的更高级别的协议)。
其它你可能感兴趣的问题