UDP 协议是否有一些错误检测?
Does the UDP protocol have some error detection?
User Datagram Protocol 提供了一些错误检测。
有人说它有校验和机制。
但是这个协议没有握手过程。
所以这个协议似乎并不担心数据错误。
它怎么会有校验和部分?
校验和与握手无关。它只是验证正在传输的数据包的完整性。如果数据包无效,它将被丢弃。在 TCP 的情况下,接收方(或者更确切地说是下一跳路由器)将通过要求发送方重新发送无效数据包来尝试恢复。但在 UDP 的情况下,它只是就此结束 - 数据包只是被丢弃,仅此而已。请注意,UDP 校验和实际上是可选的。而且我相信甚至可以通过中间跃点路由器将其删除。即使使用它也是一个非常弱的校验和。
一般来说,现代 "common wisdom" 表示在现代设备上,数据包很少在传输过程中被破坏。如果您同意这个假设,那么我建议您简单地假设数据包永远不会损坏,而忽略在转换过程中是否使用了校验和。但是,如果您对偶尔的数据损坏不满意,那么您应该在数据中嵌入更好的校验和,例如 CRC 甚至加密散列。这完全取决于数据完整性对您的重要性以及您愿意为实现它付出的努力。这实际上适用于 TCP 和 UDP。
见RFC and also this answer。
User Datagram Protocol 提供了一些错误检测。
有人说它有校验和机制。
但是这个协议没有握手过程。
所以这个协议似乎并不担心数据错误。
它怎么会有校验和部分?
校验和与握手无关。它只是验证正在传输的数据包的完整性。如果数据包无效,它将被丢弃。在 TCP 的情况下,接收方(或者更确切地说是下一跳路由器)将通过要求发送方重新发送无效数据包来尝试恢复。但在 UDP 的情况下,它只是就此结束 - 数据包只是被丢弃,仅此而已。请注意,UDP 校验和实际上是可选的。而且我相信甚至可以通过中间跃点路由器将其删除。即使使用它也是一个非常弱的校验和。
一般来说,现代 "common wisdom" 表示在现代设备上,数据包很少在传输过程中被破坏。如果您同意这个假设,那么我建议您简单地假设数据包永远不会损坏,而忽略在转换过程中是否使用了校验和。但是,如果您对偶尔的数据损坏不满意,那么您应该在数据中嵌入更好的校验和,例如 CRC 甚至加密散列。这完全取决于数据完整性对您的重要性以及您愿意为实现它付出的努力。这实际上适用于 TCP 和 UDP。
见RFC and also this answer。