Java UDP服务器IP碎片

时间:2019-05-04 14:59:11

标签: java udp ip ethernet

我正在通过以太网发送一个2000字节的JSON(以太网MTU 1500字节),因为我的数据包大于以太网MTU,所以我的消息是分段的,如下面的Wireshark捕获所示。现在,我试图在用Java开发的目标服务器中以1为单位重组该数据包。

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

我不知道如何捕获两个数据包并将其重新打包成Java格式。我读过IP层确实可以做到这一点,但我不知道为什么它不能正常工作

谢谢! enter image description here

1 个答案:

答案 0 :(得分:1)

  

我不知道如何捕获这两个数据包,并用Java将它们重新组装成一个。

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

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

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

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


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