DNS (Domain Name System / Система доменных имён) была призвана автоматизировать процессы соотнесения IP-адресов и имён компьютеров, а также процессы обновления имён у пользователей без необходимости ручного скачивания файла со стороннего сервера.
DNS имеет множество узлов, каждый из которых ответственен за свою зону. Структура DNS является иерархической, то есть выделяет зоны ответственности, где каждый родитель знает о расположении своего дочернего сервера, и знает зону его ответственности.
Основными компонентами DNS являются: Домен (доменное имя) — символьное имя для обозначения сервера в сети интернет. Доменные имена являются иерархической структурой, в которой каждый уровень отделяется точкой. Основными уровнями являются: _ Корневой домен, Домены верхнего уровня, Домен второго уровня, Поддомены _ DNS-сервер — система, ответственная за хранение и поддержание в актуальном состоянии записей о своих дочерних доменах. Ресурсная запись — единица информации DNS-сервера. Каждая ресурсная запись имеет несколько полей: Имя, тип, параметры, значение
Рассмотрим процесс получения IP-адреса по доменному имени на примере домена ru.hexlet.io
.
Возможны два варианта событий:
- Компьютер посылает запрос на известный ему DNS-сервер. Чаще всего им является DNS-сервер поставщика интернет-услуг (провайдера): какой IP-адрес у домена ru.hexlet.io?. DNS-сервер провайдера находит в своей базе информацию о том, что домен
ru.hexlet.io
расположен по IP-адресу 104.25.238.104 и возвращает значение нашему компьютеру. Этот процесс похож на то, как использовался файлhosts.txt
. - Ближайший известный DNS-сервер не имеет записи о том, по какому IP-адресу располагается домен
ru.hexlet.io
. В таком случае запускается цепочка процессов, благодаря которым наш компьютер получит IP-адрес домена:- Так как домен является иерархической структурой, и все DNS-сервера знают IP-адреса корневых DNS-серверов, то к ним и происходит запрос на получение IP-адреса домена.
- Корневые DNS-сервера, в соответствии со своей зоной ответственности знают о том, где располагаются DNS-сервера доменов верхнего уровня. Эти адреса возвращаются DNS-серверу нашего провайдера, после чего на нужный DNS-сервер (в нашем случае на DNS-сервер домена .io) посылается запрос на получение IP-адреса домена ru.hexlet.
- В соответствии со своей зоной ответственности DNS-сервер домена верхнего уровня возвращает IP-адрес DNS-сервера домена hexlet, на который посылается запрос на получение IP-адреса поддомена ru.
- DNS-сервер возвращает IP-адреса поддомена ru, после чего DNS-сервер нашего провайдера возвращает полученный адрес на наш компьютер, который уже может обратиться к домену ru.hexlet.io по его IP-адресу.
В первом случае мы просто послали запрос и получили ответ, а во втором — возникла необходимость идти от самого корневого домена в процессе поиска нужной нам записи. Такой процесс является рекурсивным.
Основными ресурсными записями DNS являются: A-запись — одна из самых важных записей. Именно эта запись указывает на IP-адрес сервера, который привязан к доменному имени. MX-запись — указывает на сервер, который будет использован при отсылке доменной электронной почты. NS-запись — указывает на DNS-сервер домена. CNAME-запись — позволяет одному из поддоменов дублировать DNS-записи своего родителя. Делается это для того, чтобы перенаправить запрос с одного домена на другой (чаще всего для перенаправления домена с поддоменом www на домен без такого поддомена). TXT-запись — в этой записи хранится текстовая информация о домене. Часто используется для подтверждения прав на владение доменом, посредством добавления определённой строки, которую присылает нам интернет-сервис.
В основном ресурсные записи имеют следующую структуру:
Имя записи TTL Класс Тип записи Значение
hosts.txt
Для решения задачи разработчики решили использовать словарь, который связывал уникальное имя и IP-адрес каждого компьютера в сети. Таким словарём стал файл hosts.txt, который и отвечал за привязку IP-адреса к имени компьютера.
Выглядел hosts.txt тогда (да и сейчас) таким образом:
192.168.10.36 MIKE-STRATE-PC
Сетевой (IP) адрес Имя компьютера