java - 处理 UDP 不可靠性

标签 java udp

我正在 Java 中使用 DatagramPacket 和 DatagramSocket 类通过 UDP 发送消息。我对网络的了解并不完整。我知道:

  1. 当发送数据报时,它实际上可能被分割成多个数据 block ,在网络上独立传输(例如,如果我的数据报长度大于 MTU)。

  2. UDP 不保证消息接收时的顺序(并且根本不保证消息的接收)。

将这些信息放在一起,我“理解”如果我发送一个(大)DatagramPacket,我可能会以任何顺序收到数据报的字节(有些部分甚至可能会丢失)!但我认为我误解了一些东西,因为如果是这样的话,没有人会使用这样的协议(protocol)。

如何确保我收到的数据报(如果我收到)等于我发送的数据报?

最佳答案

你的理解是错误的。如果您的数据报在发送端被 IP(UDP 层以下)分成片段,则接收方的 IP 将以正确的顺序重新组装这些片段,然后将整个重新组装的数据报传递到接收方的 UDP 层。如果数据报的任何片段丢失,则重组将失败,部分重建的数据报将被丢弃,并且任何内容都不会传递到接收方的 UDP 层。因此,接收 UDP(以及接收应用程序)要么得到完整的数据报,要么什么也得不到。它永远不会得到部分数据报,也永远不会得到内容因碎片而被打乱的数据报。

如果传入数据报大于应用程序的接收缓冲区,则可以向接收应用程序提供部分(截断)数据报,但这与碎片无关。

关于java - 处理 UDP 不可靠性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49679852/

相关文章:

c - UDP 套接字设置超时

java - JavaFx 和 @FXML 中的访问修饰符

python - 如何在Python中通过NAT确定出站端口

Java Servlet - 将数据写入文件

java - 我的实现是否违反了构建器模式?

networking - 在线发送数据/字符串到连接到互联网的设备

c++ - 弄清楚网络、十六进制和 ascii 如何交互

sockets - 监听对 UDP 多播消息的 UDP 单播回复

java - 列出当前组配置并更新配置

java - 使用智能手机传感器进行驾驶风格检测