Кратко
- NXDOMAIN означает отсутствие имени; NODATA — отсутствие запрошенного типа у имени, которое может существовать. Поэтому их кэшируют по разным ключам.
- RFC 2308 требует прикладывать SOA зоны к авторитетному отрицанию. Меньшее из TTL записи SOA и
MINIMUMубывает в кэше; при нуле ответ больше нельзя использовать. - Отрицание без SOA не следует кэшировать. В цикле форвардеров каждый сервер мог бы запустить короткий срок заново и сохранить ошибку навсегда.
- DNSSEC позже позволил проверять отсутствие через NSEC/NSEC3 и синтезировать ответы для доказанного диапазона. Подпись подтверждает источник и целостность в DNS, но не право собственности или институциональную истину.
Повторяемый промах создаёт нагрузку
Положительный ответ содержит ресурсную запись для кэша. Опечатка, поисковый суффикс или ещё не созданная служба порождают одинаковые проигрышные запросы без такой записи. Если результат нельзя запомнить, каждый клиент снова проходит путь до авторитетного сервера.
Запоминать любой сбой опасно. Тайм-аут может означать потерю пакета, SERVFAIL — временную невозможность обработки, пустая секция Answer — делегацию. Повторно используемое отсутствие требует субъекта, уполномоченного говорить за зону, точного предмета отрицания и срока действия.
RFC 1034 уже в 1987 году описывал отрицательное кэширование как необязательную возможность. Авторитетной ошибке имени можно было назначить TTL. Это соответствовало общей экономике DNS: локальная копия уменьшает стоимость повторного получения, а источник данных ограничивает период устаревания.
Но сохранённое отрицание нельзя было правильно передать другому резолверу вместе с тем же полезным контекстом. Система помнила «нет» локально, не сохраняя его возраст при распространении.
Имени нет или типа нет
NXDOMAIN — код Name Error. Он утверждает, что эффективное имя запроса не существует. В цепочке CNAME отрицание может относиться к последней канонической цели, хотя исходный псевдоним существует. Ключ включает имя и класс.
У NODATA нет собственного RCODE. Он выводится из NOERROR, отсутствия требуемого ответа и секции Authority, позволяющей отличить результат от направления к другой зоне. Имя может иметь MX или TXT и не иметь A.
Поэтому NODATA хранится по имени, типу и классу. Если «нет A» превратить в «нет имени», кэш подавит и настоящий MX. Точный ключ не даёт оптимизации уничтожить существующие сведения.
SOA переносит часы отрицания
RFC 2308 вышел в марте 1998 года; его написал Mark Andrews, в то время связанный с CSIRO. Тем самым австралийская государственная исследовательская организация документально вошла в историю этого эксплуатационного правила DNS. IETF предоставила площадку стандартизации, где контракт и последующие дополнения DNSSEC стали общими спецификациями. Институциональные роли различны: CSIRO связан со статьёй как указанное в ключевой спецификации место работы автора, а процесс IETF превратил текст в общий контракт Интернета.
Авторитетный сервер при NXDOMAIN или NODATA должен включить SOA содержащей зоны в секцию Authority. Запись показывает контекст, имеющий право отрицать, и несёт временную границу. Отрицательный TTL равен меньшему из TTL самого SOA и поля MINIMUM.
Резолвер сохраняет SOA с отрицанием и вычитает прошедшее время, отвечая следующему клиенту. При нуле результат больше нельзя использовать. Это не вечный вывод, а аренда: зона недавно сказала «нет» для этой области; после срока спросите снова.
RFC упорядочил и значения MINIMUM. RFC 1035 называл его нижним пределом экспортируемых TTL, а программы использовали ещё как значение по умолчанию и время отрицания. RFC 2308 отменил общий нижний предел, ввёл $TTL для умолчаний и оставил MINIMUM компонентом отрицательного срока.
Короткая жизнь на каждом узле даёт вечную ошибку
Пространство имён — дерево, но граф запросов может замкнуться. Два сервера способны указать друг друга как форвардеров; плохие делегации создают другие циклы.
Пусть каждый хранит отрицание без SOA десять минут. При пересылке сосед создаёт новую десятиминутную запись. Локальные копии всегда коротки, а распределённое сообщение никогда не стареет.
Поэтому RFC 2308 не рекомендует кэшировать отрицания без SOA. Счётчик при записи не восстанавливает уже потраченное время на новой границе. Ограничение, не сохраняемое при передаче, не ограничивает распределённую систему.
Работавший код стал общим правилом
Историческое приложение RFC 2308 описывает CHIVES конца 1987 года. Поисковые пути создавали множество промахов; во время перегрузки ARPANET отказ от повторов заметно улучшал ответы на немногих наблюдавшихся машинах. Это свидетельство реализации, а не измерение всего Интернета.
Для BIND 4.9.2 ALPHA в 1993 году приложение отмечает десятиминутный отрицательный TTL, разделение NXDOMAIN и NOERROR_NODATA, а затем сохранение SOA. Стандарт собрал эксплуатационный опыт в точных ключах, переносимом происхождении и сроке, который нельзя омолодить.
Быстрый ответ об отсутствии задерживает появление
Отрицательный кэш сокращает задержку, пакеты и работу авторитетной стороны. Цена проявляется, когда оператор создаёт имя или добавляет ранее отсутствовавший тип. Резолверы со старым отрицанием отвечают «нет» до собственного срока.
Кэши получили отрицание в разные моменты и могут применять меньшие локальные пределы. Единой секунды восстановления нет. RFC 2308 считает один–три часа разумным умолчанием, а значения свыше суток проблемными, хотя поле способно выразить гораздо больше.
Приложение определяет необратимость. Внедрённый NXDOMAIN способен немедленно вернуть письмо отправителю; плохой адрес может оставить его в очереди до исправления. Ошибочная замена сбоя несуществованием превращает временный инцидент в постоянное последствие.
Подписанное отрицание охватывает диапазон
DNSSEC ввёл аутентифицированное отсутствие. NSEC связывает существующие имена в каноническом порядке и перечисляет типы; правила RFC 4035 позволяют доказать, что в интервале нет имени или у существующего имени нет типа.
NSEC упрощает перечисление зоны. RFC 5155 добавил NSEC3 с хэшированными именами и Opt-Out. Интервал Opt-Out не доказывает существование или отсутствие каждой неподписанной делегации, которую покрывает. Этот пробел нельзя превращать в уверенность.
RFC 8020 позднее закрепил NXDOMAIN cut: если узел отсутствует, под ним нет потомков в дереве DNS. NODATA такого вывода не даёт — имя может иметь другие типы и дочерние имена.
RFC 8198 разрешил проверяющему резолверу синтезировать отрицание для другого запроса из достаточных NSEC/NSEC3 в кэше. Снижаются задержка, нагрузка и раскрытие запросов. Одновременно новое имя в диапазоне может быть скрыто до окончания отрицательной информации.
DNSSEC подтверждает происхождение и целостность в цепочке DNS. Ошибочное удаление, подписанное действующим ключом, успешно пройдёт проверку. Оно не доказывает исчезновение организации или право на имя вне протокола.
Источники и границы доказательств
- https://www.rfc-editor.org/rfc/rfc1034.html
- https://www.rfc-editor.org/rfc/rfc1035.html
- https://www.rfc-editor.org/rfc/rfc2181.html
- https://www.rfc-editor.org/rfc/rfc2308.html
- https://www.rfc-editor.org/rfc/rfc4034.html
- https://www.rfc-editor.org/rfc/rfc4035.html
- https://www.rfc-editor.org/rfc/rfc5155.html
- https://www.rfc-editor.org/rfc/rfc8020.html
- https://www.rfc-editor.org/rfc/rfc8198.html
RFC фиксируют проекты, требования и ограниченную историю реализаций, не полную статистику внедрения. NSEC3, правило поддерева и агрессивный синтез появились позже и не должны переноситься в резолверы 1987 или 1998 года.
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров
