Механизмы и алгоритмы обслуживания запросов
Одним из предназначений сервера имен является обработка запросов. Существуют два способа обработки запросов сервером:
| Нерекурсивный способ. Для ответа сервер использует только локальную информацию. Ответное сообщение содержит либо требуемую информацию, либо ошибку, либо ссылку на соседний сервер. Данный способ должен поддерживаться всеми серверами имен. |
| Рекурсивный способ. В этом состоянии сервер имен работает также в роли программы разрешения (resolve) и в ответном сообщении может возвратить либо ошибку, либо требуемую информацию, но никогда — ссылку на другой сервер имен. Данный способ не обязан поддерживаться серверами имен. Для работы этим способом необходимо специальное программное обеспечение как на хосте сервера имен, так и на машине клиента. Этот способ используется в следующих случаях: |
Обработчик ответов не может обрабатывать ответы, содержащие ссылки на другие серверы.
Запрос должен быть обработан только определенными серверами.
Алгоритм обработки запросов, используемый сервером имен, зависит от операционной системы хоста и структуры данных, используемой для хранения записей RR. Далее приведен алгоритм, предполагающий, что записи RR организованы в виде структуры дерева, по одному ("дереву") на каждую зону (алгоритм 1).
Установить или снять флаг использования рекурсии (зависит от настроек сервера). Если флаг рекурсивной обработки установлен, переходим на шаг 5, иначе — на шаг 2.
Ищем зону ближайшего родителя QNAME. Если нашли, то переходим на шаг 3, иначе — на шаг 4.
Просматриваем (сверху вниз) метки зоны. Просмотр останавливается, если происходит одно из следующих событий:
• Найдена запись QNAME. Если поиск остановился на записи CNAME (псевдонима), но QTYPE не совпадает с CNAME (нам не нужен псевдоним), тогда копируем запись CNAME в сообщение ответа, изменяем QNAME на значение псевдонима CNAME и возвращаемся на шаг 1. Иначе, копируем все записи RR, соответствующие QTYPE в сообщение ответа и переходим на шаг 6.
• Поиск вышел за пределы зоны — мы получаем ссылку. Это случается, когда мы наталкиваемся на запись NS RR, обозначающую срез или конец данной зоны. Копируем запись NS RR в секции полномочий (authority) сообщения ответа, помещаем в дополнительные (additional) секции сообщения адреса соответствующих серверов имен (используя "приклеенные" записи) и переходим на шаг 4.
<
/p>
Алгоритм 1. Обработка запросов сервером имен
• Метка не соответствует записи (метка не существует), проверяем присутствие символа "*". Если символ "*" не обнаружен, проверяем, является ли искомое имя QNAME настоящим или псевдонимом CNAME. Если имя настоящее — возвращаем ошибку поиска. Выходим. Если символ "*" обнаружен, проверяем поле QTYPE. Копируем записи RR в соответствующее QTYPE в сообщение ответа. Переходим на шаг 6.
4. Просматриваем страницы кэша. Если QNAME найдена, копируем все RR с соответствующими QTYPE в сообщение ответа. Переходим на шаг 6.
5. Для ответа на запрос используем локальную программу разрешения имен (или ее копию). Помещаем в сообщении ответа все результаты поиска, включая промежуточные записи CNAME.
6. Используя только локальные данные, добавляем некоторые часто используемые записи RR (например, адреса соответствующих доменов) в дополнительные секции сообщения. Выход.
Содержание раздела