Вопрос по – Размер пакета UDP и потери пакетов

5

Я писал программу, которая использует протокол остановки и ожидания поверх UDP для отправки пакетов по локальной сети, а также по глобальной сети. Недавно я тестировал свою программу и заметил, что коэффициент потери пакетов выше для более крупных пакетов (приближается к 64 КБ). Интуитивно это имеет смысл, но каковы реальные причины этого?

Ваш Ответ

3   ответа
7

Размер MTU сети, которая их переносит, будет автоматически разделена на несколько пакетов, а затем собрана получателем. Если какой-либо из этих нескольких подпакетов будет отброшен, то получатель также отбросит и остальные.

Так, например, если вы отправляете 63k UDP-пакет, и он идет по Ethernet, он будет разбит на 47+ меньших «фрагментированных» пакетов (поскольку MTU Ethernet составляет 1500 байт, но некоторые из них используются для заголовков UDP и т. Д. таким образом, объем пространства пользовательских данных, доступного в пакете UDP, меньше этого. Получатель будет «видеть» этот пакет UDP только в том случае, если все 47+ из этих фрагментов-пакетов пройдут нормально. Если отбрасывается только один из этих фрагментированных пакетов, вся операция завершается неудачей.

Ну, если мы собираемся выбрать nits, пакет UDP с полезной нагрузкой 65507 байт имеет длину 65535 байт (включая заголовки) - один байт не превышает 64 КБ. Но ради точности я изменю свой пример на 63k. Jeremy Friesner
Вы не можете отправить пакет размером 64 КБ. Максимальная полезная нагрузка UDP составляет 65507 байт. user207421
В результате небольшая потеря пакетов может значительно повлиять на производительность. В этом примере, если вы потеряли 2% пакетов, вы бы Примерно в среднем теряют 50% ваших пакетов, что приводит к значительному снижению пропускной способности. Видеть: Stackoverflow.com / а / 19057666/84206 AaronLS
0

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

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

UDP используется в тех случаях, когда отброшенный пакет здесь не повлияет ни на что, или на случаи, когда вам нужно что-то получить вовремя или нет вообще. (VOIP, потоковое видео и т. Д.)

-1

чем MTU, будет фрагментирован и должен быть дефрагментирован на конечном хосте, также есть вероятность, что фрагменты снова фрагментируются на пути и что снова может добавить задержку. иногда, если какой-то элемент N / W сконфигурирован для фильтрации на уровне 4, он дефрагментирует (не конечный хост) применяет правила, а затем снова выполняет операции frgaments и forward. По этой причине приложение, которое нуждается в производительности, всегда пытается отправить данные с размером <= (MTU-ETHHDR-IPHDR)

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