Что представляет собой самый большой размер безопасного пакета UDP в Интернете?

Я прочитал ряд статей о размерах пакетов UDP, но не смог прийти к выводу о правильности.

Несколько служб ограничивают наибольший пакет UDP 512 байтами (например, dns)

Учитывая минимальный MTU в Интернете - 576, а размер заголовка IPv4 - 20 байт, и UDP-заголовок 8 байтов. Это оставляет 548 байт для пользовательских данных.

Могу ли я использовать пакеты размером до 548 без фрагментации пакетов? Или есть кое-что, о чем знали создатели DNS, и почему они ограничили его до 512 байт.

Могу ли я даже безопасно перемещаться более чем на 548 байт?

Ответ 1

Верно, что типичный заголовок IPv4 составляет 20 байтов, а UDP-заголовок - 8 байтов. Однако можно включить IP-параметры, которые могут увеличить размер IP-заголовка до 60 байт. Кроме того, иногда промежуточным узлам необходимо инкапсулировать дейтаграммы внутри другого протокола, такие как IPsec (используется для VPN и т.п.), чтобы маршрутизировать пакет к месту назначения. Поэтому, если вы не знаете MTU на вашем конкретном сетевом пути, лучше оставить разумный запас для других которую вы, возможно, не ожидали. Обычно считается, что полезная нагрузка в 512 байт UDP считается такой, хотя даже это не оставляет достаточно места для заголовка IP максимального размера.

Ответ 2

Теоретический предел (в Windows) для максимального размера пакета UDP составляет 65507 байт. Это задокументировано здесь:

Правильный максимальный размер сообщения UDP составляет 65507, что определяется следующей формулой: 0xffff - (sizeof (заголовок IP) + sizeof (заголовок UDP)) = 65535- (20 + 8) = 65507

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

Ответ 3

576 - минимальный максимальный размер буфера повторной сборки, т.е. каждая реализация должна иметь возможность собирать пакеты по меньшей мере такого размера. Подробнее см. IETF RFC 1122.

Ответ 4

Максимальная безопасная полезная нагрузка UDP составляет 508 байт.. Это размер пакета 576, минус максимальный 60-байтовый IP-заголовок и 8-байтовый UDP-заголовок. Любая полезная нагрузка UDP такого размера или меньше гарантируется для доставки по IP (хотя и не гарантируется доставка). По какой-либо причине все, что больше, может быть удалено любым маршрутизатором. За исключением маршрута только на IPv6, где максимальная полезная нагрузка составляет 1212 байт. Как отмечали другие, в некоторых случаях могут быть добавлены дополнительные заголовки протоколов. Вместо этого предпочтительным может быть более консервативное значение около 300-400 байт.

Любой UDP-пакет может быть фрагментирован. Но это не так уж важно, потому что потеря фрагмента имеет тот же эффект, что и потеря безфрагментального пакета: весь пакет отбрасывается. С UDP это произойдет в любом случае.

Интересно, что максимальный теоретический размер пакета составляет около 30 МБ (1,500 ethernet MTU - 60 IP-заголовок х 65 536 максимальное количество фрагментов), хотя вероятность его прохождения будет бесконечной.

Источники: RFC 791, RFC 2460

Ответ 6

В этой статье описывается максимальная единица передачи (MTU) http://en.wikipedia.org/wiki/Maximum_transmission_unit. Он утверждает, что IP-хосты должны иметь возможность обрабатывать 576 байт для IP-пакета. Тем не менее, он отмечает, что минимальная сумма равна 68. RFC 791: "Каждый интернет-модуль должен иметь возможность пересылать дейтаграмму из 68 октетов без дальнейшей фрагментации. Это связано с тем, что интернет-заголовок может быть до 60 октетов, а минимальный фрагмент - 8 октетов ".

Таким образом, разумный размер пакета 508 = 576 - 60 (заголовок IP) - 8 (заголовок udp).

Как упомянуто пользователем 607811, фрагментация другими сетевыми слоями должна быть повторно собрана. https://tools.ietf.org/html/rfc1122#page-56 3.3.2 Повторная сборка Уровень IP ДОЛЖЕН реализовать повторную сборку IP-датаграмм. Мы определяем самый большой размер датаграммы, который может быть повторно собран EMTU_R ("Эффективное MTU для получения"); это иногда называют "размером буфера повторной сборки". EMTU_R ДОЛЖЕН быть больше или равно 576

Ответ 7

512 - ваш лучший выбор. Он используется в другом месте и является хорошим четным числом (половина из 1024).

Ответ 8

Учитывая, что IPV6 имеет размер 1500, я бы сказал, что несущие не будут предоставлять отдельные пути для IPV4 и IPV6 (они оба являются IP-адресами разных типов), заставляя их использовать оборудование для ipv4, которое было бы старым, избыточным, более дорогостоящим для поддержания и менее надежным. Это не имело никакого смысла. Кроме того, это можно легко рассмотреть как предоставление льготного режима для некоторого трафика - нет никаких правил, которые, вероятно, им не нужны (если они не пойманы).

Таким образом, 1472 должен быть безопасным для внешнего использования (хотя это не означает, что такое приложение, как DNS, которое не знает об EDNS, примет его), и если вы говорите о внутренних сетях, вы, скорее всего, знаете свой сетевой макет в этом случае размер пакетов jumbo применяется для нефрагментированных пакетов, поэтому для 4096 - 4068 байт, а для карт с 9014 байт-буферами размер пакета... подождите... 8086 байт, было бы максимальным... совпадением? хихиканье

**** **** UPDATE

Различные ответы дают максимальные значения, разрешенные 1 поставщиком SW или различными ответами, предполагающими инкапсуляцию. Пользователь не запрашивал минимальное значение (например, "0" для безопасного размера UDP), но самый большой размер безопасного пакета.

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

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

Примечание. Если вы используете IPv6, максимальный размер будет равным 1452 байтам, так как размер заголовка IPv6 составляет 40 байт по сравнению с размером байта IPv4 20 байтов (и в любом случае все равно разрешить 8 байт для заголовка UDP).

Ответ 9

Я прочитал здесь несколько хороших ответов; однако есть некоторые незначительные ошибки. Некоторые ответили, что поле Длина сообщения в заголовке UDP составляет максимум 65535 (0xFFFF); это технически верно. Некоторые ответили, что фактический максимум равен (65535 - IPHL - UDPHL = 65507). Ошибка в том, что поле Длина сообщения в заголовке UDP включает всю полезную нагрузку (Слои 5-7) плюс длину заголовка UDP (8 байтов). Это означает, что если поле длины сообщения составляет 200 байт (0x00C8), полезная нагрузка фактически равна 192 байтам (0x00C0).

Что является жестким и быстрым, так это то, что максимальный размер IP-дейтаграммы составляет 65535 байт. Это число получено в общей сумме заголовков L3 и L4, плюс полезная нагрузка 5-7. Заголовок IP + Заголовок UDP + Слои 5-7 = 65535 (Макс.).

Наиболее правильным ответом для максимального размера UAT-данных является 65515 байтов (0xFFEB), поскольку датаграмма UDP включает в себя заголовок UDP. Наиболее правильный ответ на вопрос, какой максимальный размер полезной нагрузки UDP составляет 65507 байт, поскольку UDP-полезная нагрузка не включает заголовок UDP.