Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Это явно менее вероятно по сравнению с адаптером loopback, но это невозможно.

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

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

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

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

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

Ответ 2

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

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

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

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

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

  • В каждом пакете выпадает с вероятностью 10% и передается с вероятностью 90%
  • Передача до 100 пакетов в секунду или до 100 КБ в секунду и отбрасывание остальных, если приложение отправит больше.