@Fjfgs

Датаграмма UDP может прийти в неверном порядке. Как это?

То есть я могу отправить:
012345
А получить:
253401

Если да, то эту проблему решают только через CRC32 или подобные ему алгоритмы путем проверки целостности датаграммы и последующей переотправки?
  • Вопрос задан
  • 191 просмотр
Решения вопроса 3
hint000
@hint000
у админа три руки
То есть я могу отправить:
012345
А получить:
253401
Во-первых, если важно получить 012345, то надо посылать в одной датаграмме 012345, а не в шести отдельно по одному символу.
Во-вторых, даже если отправлять по одному символу, то вероятность получить 253401 очень мала.
Скорее вы можете получить 02345 или 01345 или 135, т.е. простую потерю пакетов. Неверный порядок возможен, но в реальной жизни будет редко встречаться (он может быть вызван повторной отправкой кадров, т.е. проблемами на более низком уровне OSI, тогда первая датаграмма может задержаться из-за переотправки кадров, из которых она состоит, а вторая датаграмма может пройти без ошибок в кадрах и оказаться у получателя раньше первой; а ещё они могут пойти разными маршрутами с разной задержкой, но это уже экзотика).
Ответ написан
@pfg21
ex-турист
такое невозможно, внутри пакета UDP последовательность данных изменится не может.
датаграмма UDP упаковывается в пакет IP, который может фрагментироваться.
перед передачей данных в драйвер UDP, драйвер IP восстановит правильную последовательность данных, либо дропнет весь пакет, если все фрагменты не придут в течении тайм-аута.
для прямого запрета фрагментации пакета IP нужно устанавливать флаг DF (don't fragment) в пакете IP.

а в случае когда 012 и 345 посланы в разных пакетах UDP вполне. восстановление последовательности пакетов в UDP нет и последний по отправке пакет может прийти раньше первого посланного.
Ответ написан
Комментировать
@asmelnik
Датаграмма UDP может прийти в неверном порядке. Как это?

Данные "внутри" одной датаграммы -- нет, не могут прийти в произвольном порядке.
Если ваш вопрос переформулировать как
ДатаграммЫ UDP моГУТ прийти в неверном порядке. Как это?

То да, могут.
Отправив датаграммы с номерами 0,1,2,3,4
Вы на принимающей стороне их можете получить в произвольном порядке. Это заложено в самом IP и НИКАК не исправляется средствами IP или UDP.
Только протоколом более высокого уровня "внутри" UDP и то на стороне приемника в процессе обработки всей серии.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@nApoBo3
Такие проблемы не решают за исключением специальных случаев когда применение tcp по каким-то причинам невозможно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы