Почему я удаляю UDP-датаграммы из строя даже при запущенных процессах?

Я разрабатываю java-интерфейс между потоковым сервером и флеш-клиентом. Я заметил, что датаграммы UDP могут выйти из моего интерфейса не в порядке, даже если оба процесса работают локально.

Это нормально? Я думал, что, поскольку никакая датаграмма не должна проходить через какой-либо маршрутизатор или какое-либо сетевое устройство, это не должно происходить.

Ответ 1

На самом деле нет никаких гарантий заказа и приема пакетов UDP, даже если они отправляются localhost на localhost. Просто потому, что спецификация протокола ничего не подразумевает.

Поскольку вы не можете делать предположения на них, вы должны выбрать использование переупорядочения TCP или дескрипторов, используя порядковый номер, обрабатываемый вашими программами.

Ответ 2

Это зависит от операционной системы. Пока вы не указали операционную систему, это не важно. Чтобы оставаться портативным, вы всегда должны ожидать, что ваши сокеты дейтаграммы получат данные не в порядке.

Ответ 3

Хотя вы используете localhost, ожидайте, что датаграммы UDP будут несовместимы в фактическом развертывании.

Если они вам понадобятся, попробуйте TCP.

Ответ 4

UDP не указывается для сохранения последовательности, поскольку все выше сказанные постеры, но если нет промежуточных маршрутизаторов, я бы также заподозрил ошибку в вашем коде.