Java UDP 服务器 IP 碎片

标签 java udp ip ethernet

我正在通过以太网发送 2000 字节 JSON(以太网 MTU 1500 字节),因为我的数据包大于以太网 MTU,所以我的消息被分段,如您在下面的 Wireshark 捕获中看到的那样。现在我正在尝试在目标服务器中重新组装这个数据包,该数据包是用 Java 开发的。

如果我发送较小的数据包,我的服务器就能够接收数据并在命令窗口中打印它。但是当我发送 2000 字节的数据包时,我什么也没看到。

我不知道如何捕获这两个数据包并将其重新组装在 Java 中。我读到 IP 层正是这样做的,但我不知道为什么无法正常工作.

enter image description here

最佳答案

I don't know how to capture both packets and reassemble it in one in Java.

您不能使用标准 Java API。操作系统要么将 IP 数据包重新组装成 UDP 数据报,要么数据报将丢失。部分 UDP 数据报将不会传送到您的 Java 应用程序。

但是,我不确定如何解释 Wireshark 输出。在我看来,Wireshark 只看到了分段 UDP 数据报的第一个片段。

是否有可能MTU不匹配;例如发送者正在发送怪物数据包?

您是否可能没有告诉 Wireshark 在分析数据包之前重新组装数据包? (参见https://wiki.wireshark.org/IP_Reassembly)

<小时/>

我的建议是让 UDP 数据报大小小于 MTU 大小。如果您的消息需要大于此值,请使用 TCP 而不是 UDP。

关于Java UDP 服务器 IP 碎片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55983790/

相关文章:

java - 合并两个正则表达式

java - 如何使我自己的通用结构具有动态比较器

c++ - UDP 数据是否会损坏?

sockets - 使用 LuaSocket 通过 LAN 发送 UDP 数据包

python - 如何使用 python 2.7 中的请求以简单的方式获取用户代理 header ?

python - 发送没有接口(interface) IP 错误的 scapy IP 数据包

Java swing GUI绝对定位

java - java方法中需要分号

java - 如何判断UDP Chat中是否有传入请求?

c - IP和TCP头校验和在c中计算