我是 UDP 和 Java 的 UDP API 的新手,我知道数据包到达时可能会损坏、被 IP 拆分或以任何其他方式出错。当然,如果这样的数据包被拆分到达,则 UDP header 中的校验和将不正确。
当像 DatagramSocket.receive(DatagramPacket)
这样用 Java 读取 UDP 数据包时,是否可以保证接收到的数据包的内容是正确的(意味着计算的校验和是正确的)?或者 Java 是否也会将损坏的 UDP 数据包传递给应用程序?
最佳答案
简答:
是的,除非另外配置。
长答案:
Udp数据包包括CHECKSUM您的操作系统使用的是为您验证数据包。当收到校验和错误的数据包时,操作系统堆栈会丢弃该数据包(在到达应用层之前)。
我从未尝试过,但在 Ubuntu 中可以使用
禁用校验和ethtool --offload eth0 rx off
关于java - Java 的 UDP API 是否只接收校验和正确的数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27659957/