Рекурсія

Матеріал з Вікі ЦДУ
Версія від 10:55, 19 жовтня 2010; Онищенко Сергей (обговореннявнесок)

(різн.) ← Попередня версія • Поточна версія (різн.) • Новіша версія → (різн.)
Перейти до: навігація, пошук

Терміном Рекурсія в DNS позначають алгоритм поведінки DNS-сервера, при якому сервер виконує від імені клієнта повний пошук потрібної інформації в усій системі DNS, при необхідності звертаючись до інших DNS-серверів.

DNS-запит може бути рекурсивним - вимагають повного пошуку, - і нерекурсивним - не вимагають повного пошуку.

Аналогічно, DNS-сервер може бути рекурсивним (який вміє виконувати повний пошук) і нерекурсивним (не вміє виконувати повний пошук). Деякі програми DNS-серверів, наприклад, BIND, можна настроїти так, щоб запити одних клієнтів виконувалися рекурсивно, а запити інших - нерекурсивний.

При відповіді на нерекурсивний запит, а також - при невмінні або заборону виконувати рекурсивні запити, - DNS-сервер або повертає дані про зону, за яку ти відповідальний, або повертає адреси серверів, які володіють великим обсягом інформації про запитаної зоні, ніж відповідає сервер, найчастіше - адреси кореневих серверів.

У випадку рекурсивного запиту DNS-сервер запитує сервери (у порядку убування рівня зон в імені), поки не знайде відповідь або не виявить, що домен не існує. (На практиці пошук починається з найбільш близьких до шуканого DNS-серверів, якщо інформація про них є в кеші і не застаріла, сервер може не запитувати інші DNS-сервери.)

Розглянемо на прикладі роботу всієї системи.

Припустимо, ми набрали в браузері адресу ru.wikipedia.org. Браузер запитує у сервера DNS: «яка IP-адреса у ru.wikipedia.org»? Однак, DNS-сервер може нічого не знати не тільки про запрошенням імені, але навіть про все домені wikipedia.org. У цьому випадку сервер звертається до кореневого сервера - наприклад, 198.41.0.4. Цей сервер повідомляє - «У мене немає інформації про даний адресу, але я знаю, що 204.74.112.1 є відповідальним за зону org.» Тоді сервер DNS направляє свій запит до 204.74.112.1, але той відповідає «У мене немає інформації про даний сервері , але я знаю, що 207.142.131.234 є відповідальним за зону wikipedia.org. »Нарешті, той самий запит відправляється до третього DNS-сервера і отримує відповідь - IP-адреса, який і передається клієнтові - браузеру.

У даному випадку при вирішенні імені, тобто в процесі пошуку IP по імені:

  • Браузер відправив відомому йому DNS-сервера рекурсивний запит - у відповідь на такий тип запиту сервер зобов'язаний повернути «готовий результат», тобто IP-адресу, або повідомити про помилку;
  • DNS-сервер, який отримав запит від браузера, послідовно відправляв нерекурсівние запити, на які отримував від інших DNS-серверів відповіді, поки не отримав відповідь від сервера, відповідального за запитану зону;
  • Інші згадувані DNS-сервери обробляли запити нерекурсивний (і, швидше за все, не стали б обробляти запити рекурсивно, навіть якщо б така вимога стояло в запиті).

Іноді допускається, щоб, запитаний сервер передавав рекурсивний запит «вищестоящому» DNS-сервера і чекав готової відповіді.

При рекурсивної обробки запитів всі відповіді проходять через DNS-сервер, і він одержує можливість кешувати їх. Повторний запит на ті ж імена зазвичай не йде далі кешу сервера, звернення до інших серверів не відбувається взагалі. Допустимий час зберігання відповідей в кеші приходить разом з відповідями (поле TTL ресурсної запису).

Рекурсивні запити вимагають більше ресурсів від сервера (і створюють більше трафіку), так що зазвичай приймаються від «відомих» власнику сервера вузлів (наприклад, провайдер надає можливість робити рекурсивні запити тільки своїм клієнтам, в корпоративній мережі рекурсивні запити приймаються тільки з локального сегменту). Нерекурсівние запити зазвичай приймаються від усіх вузлів мережі (і змістовну відповідь дається тільки на запити про зону, яка розміщена на сайті, на DNS-запит про інших зонах зазвичай повертаються адреси інших серверів).