tcp - UDP - 可选校验和

标签 tcp error-handling udp packet checksum

从我读到的关于 UDP 的内容来看,它没有错误处理,没有检查发送/接收数据的顺序,没有检查重复的数据包,没有检查损坏的数据包,显然不能保证发送的数据包是均匀的收到...

考虑到这一点,为什么地球上实际上可以选择在 UDP 中使用校验和?因为如果您想确保以正确的顺序接收到发送的数据(并且没有损坏等),那么您肯定会使用 TCP...

最佳答案

UDP 数据包包含一个 16 位 CRC 校验和的字段,接收操作系统将使用它来检查数据包是否损坏。如果校验和存在但失败,则数据包将被静默丢弃。应用程序会注意到数据包消失并采取纠正措施。

所有现代操作系统都默认启用 UDP 校验和。可以在套接字或操作系统级别禁用 IPv4 中的 UDP 校验和。这样做会减少发送方和接收方处理每个数据包的 CPU 开销。例如,如果应用程序单独计算自己的校验和,这可能是可取的。没有任何校验和,就无法保证接收到的字节与发送的字节相同。

关于tcp - UDP - 可选校验和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23373764/

相关文章:

c# - 在 C# 中使用 Socket 改进 TCP 转发器

eclipse - 在其他软件中接收 Matlab/simulink UDP block

linux - SMP 系统中的 linux 内核是否保证将从网络按顺序到达的 UDP 数据包按顺序从套接字读取?

asp.net-mvc-4 - 在MVC4中处理错误500

scala - 选择列RDD scala-spark

error-handling - 基本高斯消除产生错误的结果?

c++ - UDP 发送()到 Winsock 下的本地主机丢弃数据包?

C++ tcp socket连接重试方法

c++ - 如何使用 streamsocket 作为 poco 库中的非阻塞 tcp 客户端?

node.js - 使用 mocha 测试 Node tcp 服务器