![Кэширование DNS — итеративное и рекурсивное](https://rvso.com/image/747327/%D0%9A%D1%8D%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20DNS%20%E2%80%94%20%D0%B8%D1%82%D0%B5%D1%80%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5%20%D0%B8%20%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5.png)
В итеративной архитектуре DNS локальные DNS-серверы имеют кэши и могут в большинстве случаев пропускать обращение к корневым и TLD-серверам.
В рекурсивной схеме локальный DNS-сервер связывается с одним DNS-сервером, который рекурсивно извлекает результат и отвечает запрошенным ресурсом.
В чем разница между итеративным и рекурсивным DNS с точки зрения кэширования?
Может ли локальный DNS-сервер использовать сокращенный вариант в рекурсивной архитектуре?
решение1
В чем разница между итеративным и рекурсивным DNS с точки зрения кэширования?
Разницы нет. Время жизни (TTL) от авторитетного сервера вместе с локальными политиками укажет, как долго записи будут храниться и обслуживаться из кэша.
Может ли локальный DNS-сервер использовать сокращенный вариант в рекурсивной архитектуре?
Если локальный DNS не является DNS только для пересылки, то да, и это происходит постоянно. Как только вы узнаете, как получить ответ для определенного домена, вы не будете снова проходить весь путь до корня, пока информация находится в кэше. Данные могут быть удалены из кэша, потому что истек исходный TTL или потому что локальная конфигурация установила ограничение на размер кэша или TTL. Например, bind
это будет max-cache-ttl
.
решение2
Теперь существует канонический документ по терминологии DNS:
Вот соответствующие определения, слегка сокращенные и переупорядоченные:
«Рекурсивный распознаватель: распознаватель, действующий в рекурсивном режиме. [..] [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
и конкретные реализации, могут потребовать, чтобы авторитетный сервер имен также становился рекурсивным/итеративным во время поступления определенного запроса, чтобы иметь возможность разрешить цель.