Назад | Перейти на главную страницу

Почему DNS через UDP имеет ограничение в 512 байт?

Я искал ответ на этот вопрос (тот, что указан в заголовке), и лучшее, что я нашел, было:

В конструкции протокола DNS размер транспортного блока UDP (размер полезной нагрузки) был ограничен 512 байтами для оптимизации производительности при минимальном сетевом трафике.

у меня вопрос: как именно это повышает производительность и есть ли другие причины для этого ограничения при использовании UDP?

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

В Стандарт IPv4 указывает, что каждый хост должен иметь возможность повторно собирать пакеты размером 576 байт или меньше. С заголовком IPv4 (20 байтов, хотя он может достигать 60 байтов с параметрами) и 8-байтовым заголовком UDP, пакет DNS с полезной нагрузкой 512 байтов будет меньше 576 байтов.

Как говорит @RyanRies: DNS может использовать TCP для больших объемов данных, а также для передачи зон и DNSSEC. Когда в игру вступает TCP, возникает гораздо большая задержка, потому что, в отличие от UDP, между клиентом и сервером происходит рукопожатие, прежде чем какие-либо данные начнут передаваться.

Современный DNS фактически больше не ограничен полезной нагрузкой 512 байтов для UDP.

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

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

Видеть rfc2671 для мельчайших деталей EDNS0

Для операций DNS, например запросов и операций обслуживания зоны по умолчанию используется порт 53. По соображениям производительности запросы используют протокол UDP с ограничением размера блока в 512 байт. TCP может быть дополнительно согласован на основе транзакции за транзакцией для операций запроса, но из-за накладных расходов на производительность, связанных с TCP, это, по сути, теоретическая возможность. Исторически превышения предельного размера ответа в 512 байт обычно избегали любой ценой, и действительно, ограничение в 13 корневых серверов IPv4 было максимумом, который мог быть возвращен за одну 512-байтовую транзакцию UDP.

Рон Эйчисон - Pro DNS и BIND 10 - 2011 г.

Это вещь QOS.

Поскольку UDP не имеет состояния, обработка ошибок пакетов невозможна.

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