/ / DatagramPacket - чи Java фрагментує та переставляє її спочатку? - Java, мережеве програмування, udp

DatagramPacket - чи Java розшифровує і переставляє його спочатку? - java, мережеве програмування, udp

Я новачок у всьому, що стосується UDP ("тому що всі люблять TCP), і мені потрібно задати кілька питань щодо реалізації Java.

Мені потрібно, щоб хтось сказав мені, чи:

  1. Пакети DatagramPackets, надіслані Java, автоматично фрагментовані через конфігурації мережі та розмір даних.
  2. Пакети DatagramPackets переставляються так, щоб бути ввиправити послідовний порядок фрагментів Java після автоматичного фрагментації через мережеві конфігурації та розмір даних ... до отримання () виклику поверне результат.
  3. Якщо фрагментовані DatagramPackets, які "повторно незавершені, скидаються або генерують винятки при видаленні. (Деякі фрагменти отримані, інші втрачені)

Мене турбує, що Java мовчки кидає це, абодані розташовані неправильно ... що означало б, що я повинен реалізувати псевдо TCP, щоб мати як переваги UDP, так і перевірку TCP.

Відповіді:

1 для відповіді № 1

Пакети DatagramPackets, надіслані Java, автоматично фрагментовані через мережеві конфігурації та розмір даних.

Так, але Java тут нічого спільного.

Пакети DatagramPackets переставляються так, щоб бути ввиправити послідовний порядок фрагментів Java після автоматичного фрагментації через мережеві конфігурації та розмір даних ... до отримання () виклику поверне результат.

Так, але не за допомогою Java, і лише за умови надходження всіх фрагментів. Це відбувається на рівні IP.

Якщо фрагментовані DatagramPackets, які "повторно незавершені, скидаються або генерують винятки при видаленні. (Деякі фрагменти отримані, інші втрачені)

Їх скидають мовчки. Не виняток.Знову ж Java не має нічого спільного з цим. Все це відбувається на рівні IP. Якщо і тільки якщо всі фрагменти надходять, датаграма збирається повторно і передається на рівень UDP. Java ніяк не задіяна.

Мене турбує, що Java мовчки кидає це мовчки

Java нічого не робить. IP кидає це мовчки.

або дані розташовані неправильно

Дейтаграма отримується або цілою, і цілою, або взагалі не отримується. Знову ж Java не має нічого спільного з цим.

що означало б, що я повинен реалізувати псевдо TCP, щоб мати як переваги UDP, так і перевірку TCP.

Правильно. Ти робиш.


2 для відповіді № 2

UDP в основному реалізований в ОС, і Java має дуже мало слова в цьому питанні.

  • пакети довжиною більше 576 байт можуть бути фрагментованими;
  • пакети можуть бути втрачені;
  • пакети можуть надходити не в порядку.

Ява чи ви не можете сказати, чи сталося це.

Що ви можете зробити, це реалізувати протокол для виявлення цього. напр. додавання порядкового номера, довжини та контрольної суми до початку кожного пакета.

що означало б, що я повинен реалізувати псевдо TCP, щоб мати як переваги UDP, так і перевірку TCP.

І тепер ви починаєте розуміти, чому "всі люблять TCP" або більшість людей. UDP має своє використання, але для більшості програм TCP є найпростішим.