gpt4 book ai didi

Java:Java 中的 UDP 是否可能损坏数据

转载 作者:太空宇宙 更新时间:2023-11-04 06:37:32 27 4
gpt4 key购买 nike

我正在编写一个网络测试,它发送不同大小的UDP数据包(最多50k字节)。我想测量 ping 和丢包情况。我是否还必须检查传输的数据,或者如果包中包含损坏的数据,包是否会被丢弃?

最佳答案

首先,TCP/IP 协议(protocol)套件(包括 UDP)在所有现代操作系统中均实现。该实现通常称为网络堆栈。 Java 虚拟机本身使用常规用户级套接字进行网络连接,因此它使用操作系统的网络堆栈。您在 Java 中所能做的就是设置套接字选项、指定源和目标并提供要发送的数据。所以我不会担心从 Java 创建格式错误的数据包。段(第 4 层)、数据包(第 3 层)和帧(第 2 层)都是由操作系统为您的应用程序创建的。除非您使用原始套接字,否则您对常规套接字所做的任何操作都无法改变这一点。

其次,每个 TCP/IP 数据包中有多个错误检测代码。 UDP 和 TCP 具有 16 位校验和代码,用于验证 header 、数据包的有效负载和多个 IP header 字段。 IP 数据包本身具有 header 校验和,以太网 (802.3) 和 Wifi (802.11) 都有自己的帧级别错误检测机制。我在网络设备和端点操作系统中看到的处理错误数据包时的默认行为是丢弃它们。因此,在用户级套接字中出现错误的可能性非常小。

编辑:

关于 UDP 值得一提的一点是,与面向流的 TCP 不同,UDP 套接字基于每个数据包进行操作。因此,无论您使用 UDP 套接字 send(),都将作为单个 UDP 数据包发送。我建议确保您在任何时候都不要在其中放置太大的东西。不要尝试将 4KiB 大块作为单个数据包发送,因为这会导致 IP 级碎片。尽最大努力确保发送的数据包比从您的计算机到目的地的路径上的最小 MTU 小至少 20 个字节(20 个字节是因为 IP header 通常为 20 个字节长)。如有疑问,请将每个数据包发送的数据限制在 1000-1200 字节左右,远低于常见的 ~1400-1500 MTU 限制。

关于Java:Java 中的 UDP 是否可能损坏数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25162902/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com