Кэширование DNS — итеративное и рекурсивное

Кэширование DNS — итеративное и рекурсивное

В итеративной архитектуре DNS локальные DNS-серверы имеют кэши и могут в большинстве случаев пропускать обращение к корневым и TLD-серверам.

В рекурсивной схеме локальный DNS-сервер связывается с одним DNS-сервером, который рекурсивно извлекает результат и отвечает запрошенным ресурсом.

В чем разница между итеративным и рекурсивным DNS с точки зрения кэширования?

Может ли локальный DNS-сервер использовать сокращенный вариант в рекурсивной архитектуре?

решение1

В чем разница между итеративным и рекурсивным DNS с точки зрения кэширования?

Разницы нет. Время жизни (TTL) от авторитетного сервера вместе с локальными политиками укажет, как долго записи будут храниться и обслуживаться из кэша.

Может ли локальный DNS-сервер использовать сокращенный вариант в рекурсивной архитектуре?

Если локальный DNS не является DNS только для пересылки, то да, и это происходит постоянно. Как только вы узнаете, как получить ответ для определенного домена, вы не будете снова проходить весь путь до корня, пока информация находится в кэше. Данные могут быть удалены из кэша, потому что истек исходный TTL или потому что локальная конфигурация установила ограничение на размер кэша или TTL. Например, bindэто будет max-cache-ttl.

решение2

Теперь существует канонический документ по терминологии DNS:

RFC 8499, он же BCP 219

Вот соответствующие определения, слегка сокращенные и переупорядоченные:

  • «Рекурсивный распознаватель: распознаватель, действующий в рекурсивном режиме. [..] [RFC4697] попытался провести различие между рекурсивным распознавателем и итеративным распознавателем».

  • «Рекурсивный режим: режим разрешения сервера, который получает DNS-запросы и либо отвечает на эти запросы из локального кэша, либо отправляет запросы другим серверам, чтобы получить окончательные ответы на исходные запросы».

  • «Итеративное разрешение: серверу имен может быть представлен запрос, на который может ответить только какой-либо другой сервер. Два общих подхода к решению этой проблемы — «рекурсивный», при котором первый сервер выполняет запрос от имени клиента на другом сервере, и «итеративный», при котором сервер направляет клиента на другой сервер и позволяет клиенту выполнить запрос там. (См. раздел 2.3 [RFC1034].)

    In iterative resolution, the client repeatedly makes non-recursive
    queries and follows referrals and/or aliases.  The iterative
    resolution algorithm is described in Section 5.3.3 of [RFC1034]."
    

В цитированном выше документе RFC 4697 говорится следующее:

В этой заметке рассматривается в основном поведение итеративных
распознавателей, которые обычно находятся как часть рекурсивного
сервера имен. В этой заметке используется более точный термин «итеративный распознаватель»,
поскольку основное внимание обычно уделяется этому компоненту. В случаях, когда
роль сервера имен этой сущности требует упоминания, в этой заметке
используется термин «рекурсивный сервер имен». В качестве примера разницы
компонент сервера имен рекурсивного сервера имен
получает запросы DNS, а компонент итеративного распознавателя отправляет
запросы.

RFC 1034 кажется мне еще более неясным по этому поводу, или, точнее, еще более устаревшим:

  • В любой системе с распределенной базой данных конкретный сервер имен может получить запрос, на который может ответить только другой сервер. Два общих подхода к решению этой проблемы — «рекурсивный», при котором первый сервер выполняет запрос для клиента на другом сервере, и «итеративный», при котором сервер направляет клиента на другой сервер и позволяет клиенту выполнить запрос. Оба подхода имеют свои преимущества и недостатки, но итеративный подход предпочтительнее для доступа в стиле датаграмм. Доменная система требует реализации итеративного подхода, но допускает рекурсивный подход в качестве опции.

Возвращаясь к Вашему вопросу:

В чем разница между итеративным и рекурсивным DNS с точки зрения кэширования?

Насколько я понимаю, как все работает в реальных условиях (что не совсем соответствует определениям, данным выше), никаких различий нет, поскольку рекурсивный сервер имен выполняет итеративные запросы для разрешения любых имен, запрошенных клиентом.

и для

Может ли локальный DNS-сервер использовать сокращенный вариант в рекурсивной архитектуре?

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

Обратите внимание, что в будущем все может стать еще более запутанным: некоторые предложения, такие как ANAMEи конкретные реализации, могут потребовать, чтобы авторитетный сервер имен также становился рекурсивным/итеративным во время поступления определенного запроса, чтобы иметь возможность разрешить цель.

Связанный контент