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

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

 [Размер MTU](https://en.wikipedia.org/wiki/Maximum_transmission_unit) сети, которая их переносит, будет автоматически разделена на несколько пакетов, а затем собрана получателем. Если какой-либо из этих нескольких подпакетов будет отброшен, то получатель также отбросит и остальные.

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



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

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

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



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