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

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

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

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

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

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

2 ответов


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

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

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

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

это, очевидно, менее вероятно по адаптеру loopback, но это не невозможно.

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

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

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

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

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


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

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

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

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

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

  1. по каждому пакет отбрасывает его с вероятностью 10% и передает его с вероятностью 90%
  2. передайте до 100 пакетов в секунду или до 100KB в секунду, и отбросьте остальные, если приложение отправит больше.