Java UDP-сервер Фрагментация IP - PullRequest
0 голосов
/ 04 мая 2019

Я отправляю 2000 байтов JSON через Ethernet (Ethernet MTU 1500 байтов), так как мой пакет больше, чем Ethernet MTU, мое сообщение фрагментировано, как вы можете видеть на снимках Wireshark ниже.Сейчас я пытаюсь собрать этот пакет в 1 на целевом сервере, разработанном на Java.

Если я отправляю меньшие пакеты, мой сервер может получать данные и распечатывать их в командном окне.Но когда я отправляю 2000-байтовый пакет, я ничего не вижу.

Я не знаю, как перехватить оба пакета и собрать его в один в Java. Я читал этоIP Layer делает именно это, но я не знаю, почему он не работает должным образом.

Спасибо за преимущество!enter image description here

1 Ответ

1 голос
/ 04 мая 2019

Я не знаю, как перехватить оба пакета и собрать его в один в Java.

Вы не можете использовать стандартные API Java. Либо ОС соберет IP-пакеты в UDP-дейтаграммы, либо дейтаграммы будут потеряны. Частичные дейтаграммы не будут доставлены в ваше приложение.

Однако я не уверен, как интерпретировать вывод Wireshark. Мне кажется, что Wireshark видит только первый фрагмент фрагментированных дейтаграмм UDP.

Возможно ли, что имеется несоответствие MTU; например отправитель отправляет монстр пакеты?

Возможно ли, что вы не сказали Wireshark собирать пакеты перед их анализом? (См. https://wiki.wireshark.org/IP_Reassembly)


Мой совет: размер дейтаграммы UDP должен быть меньше размера MTU. Если ваши сообщения должны быть больше, используйте TCP, а не UDP.

...