Каковы шансы потерять UDP-пакет?

Итак, я программирую для своего сетевого курса, и мне нужно реализовать проект на Java с использованием UDP. Мы реализуем HTTP-сервер и клиент вместе с функцией «гремлин», которая портит пакеты с заданной вероятностью. HTTP-сервер должен разбить большой файл на несколько сегментов на прикладном уровне, чтобы отправить его клиенту по протоколу UDP. Клиент должен повторно собрать полученные сегменты на прикладном уровне. Однако мне интересно, если UDP по определению ненадежен, почему я должен имитировать здесь ненадежность?

Моя первая мысль заключается в том, что, возможно, это просто потому, что мой инструктор считает, что в нашем случае и клиент, и сервер будут работать на одной машине, и что файл будет передан из одного процесса в другой со 100% надежностью даже по UDP, поскольку он находится между двумя процессами на одном компьютере.

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

Мне также интересно, каковы шансы на фактическую потерю пакета, его повреждение или доставку не по порядку на самом деле через Интернет между двумя географически удаленными хостами.

Большое спасибо всем, кто может пролить свет на любой из этих вопросов для меня.


person Cory Gross    schedule 25.02.2013    source источник
comment
Думаю, у вас никогда не было плохого интернет-соединения; p UDP в основном используется в сценариях, когда получатель не может ответить. Пример передачи данных по спутнику, радиоволнам и т. д.   -  person leppie    schedule 25.02.2013
comment
Вместо того, чтобы получатель не мог ответить, я бы сказал, что он используется в сценариях, где потеря пакета не имеет большого значения (большого), например, потоковая передача аудио / видео, видеоконференции и т. Д.   -  person Trap    schedule 04.07.2016
comment
Говоря по опыту, у меня есть проект, в котором две программы общаются по UDP и время от времени происходит потеря пакетов, я не могу понять почему, они работают на одном компьютере и общаются через интерфейс loopback. Так что да, это хорошо, что вам пришлось реализовать свою функцию гремлина, потому что, несмотря на высокую надежность (у меня нет статистики, но я думаю, что на петле выше 99,9% или даже выше), потеря пакетов все еще происходит. .   -  person soger    schedule 31.12.2016


Ответы (3)


если UDP по определению ненадежен, зачем мне здесь имитировать ненадежность?

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

Вы также говорите о достоверности полезной нагрузки, а не только о потере пакетов.

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

Очевидно, что через петлевой адаптер это менее вероятно, но это не невозможно.

Я нашел несколько сообщений на форуме по теме здесь и здесь.

Мне также интересно, каковы шансы на фактическую потерю пакета, его повреждение или доставку не по порядку на самом деле через Интернет между двумя географически удаленными хостами.

Этот вопрос, вероятно, следует немного сузить. Существует несколько факторов как на уровне приложения (размер пакета и частота), так и в ограничениях/трафике маршрутизаторов и коммутаторов на пути.

Я не смог найти никаких точных цифр по этому вопросу, но, похоже, они довольно низкие... около 5%.

Вас может заинтересовать Отчет об интернет-трафике и, возможно, такие страницы, как это.

person Matthew Sanders    schedule 25.02.2013

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

Потери пакетов из-за ошибок в линке очень низки, когда линки работают нормально. Менее 0,01% не является чем-то необычным.

Потеря пакетов из-за перегрузки, очевидно, зависит от того, насколько загружен канал. Если на всем пути есть свободная емкость, это число будет равно 0%. Но по мере загрузки сети это число будет увеличиваться. Когда управление потоком выполнено правильно, это число не станет очень большим. Пары потерянных пакетов обычно достаточно, чтобы кто-то уменьшил скорость их передачи настолько, чтобы предотвратить потерю пакетов из-за перегрузки.

Если потеря пакетов достигает 1%, что-то не так. Это может быть ошибка в том, как ваш алгоритм управления перегрузкой реагирует на потерю пакетов. Если он продолжает отправлять пакеты с той же скоростью, когда сеть перегружена и теряет пакеты, потеря пакетов может быть намного выше, возможна потеря 99% пакетов, если программное обеспечение работает неправильно. Но это зависит от типов задействованных ссылок. Gigabit Ethernet использует обратное давление для управления потоком, поэтому, если путь от источника к получателю представляет собой один сегмент Gigabit Ethernet, приложение-отправитель может просто работать медленнее и никогда не увидеть реальной потери пакетов.

Для тестирования поведения программного обеспечения в случае потери пакетов я бы предложил две разные симуляции.

  1. На каждом пакете сбросить его с вероятностью 10% и передать с вероятностью 90%
  2. Передавайте до 100 пакетов в секунду или до 100 КБ в секунду и отбрасывайте остальные, если приложение будет отправлять больше.
person Kasper    schedule 25.05.2013
comment
Источник для чисел здесь был бы полезен. - person Leif Gruenwoldt; 29.10.2016

Я рассылал udp-пакеты через Wi-Fi на некоторые панели nanoleaf, и моя потеря пакетов составила примерно 1/7000.

Думаю, это зависит от кучи факторов.

person Walter    schedule 28.06.2021