Главное Авторские колонки Вакансии Образование
Выбор редакции:
184 0 В избр. Сохранено
Авторизуйтесь
Вход с паролем

Как на самом деле работает DNS?

Цель этой заметки - кратко по шагам показать как работает DNS. Без лонгридов, исторических справок и забавных случаев из жизни.
Мнение автора может не совпадать с мнением редакции

Проводя собеседования, постоянно сталкиваюсь с тем что соискатели знают о DNS только то что он превращает имена доменов (например google.com) в IP адреса (173.194.32.165). А как это происходит, мало кто может объяснить. Даже те кто может, допускают массу неточностей.

Цель этой заметки - кратко по шагам показать как работает DNS. Без лонгридов, исторических справок и забавных случаев из жизни.

  1. Когда вводим адрес сайта в браузер, например justhost.ru, он начинает выяснять IP адрес домена, используя системный вызов getaddrinfo, gethostbyname или подобный.
  2. Сначала смотрим в файле hosts соответствие домена IP адресу. Это исторический момент, еще с тех пор когда не было DNS - соответствия доменов IP адресам закачивались с централизованного сервера. Удобно при переносе сайта на другой хостинг в файле hosts указать новый IP для домена и протестировать работу сайта на новой площадке. Файл hosts это НЕ часть DNS. Если DNS это человек, то файл hosts это хвост.
  3. Если в фале hosts соответствий нет, направляется рекурсивный запрос DNS серверу, еще такой сервер часто называют резолвер (resolver). DNS серверы всегда указываются при настройке сети. Вот у этих серверов мы и спрашиваем - какой IP адрес у домена justhost.ru? Отправляя рекурсивный запрос, мы говорим DNS-серверу что ждем от него IP адрес, либо ошибку.
  4. Если DNS-сервер ни чего не знает об этом домене, он спрашивает у root-серверов интернета - дайте мне информацию о зоне .ru! Стоп. Стоп. Что еще за root-серверы интернета?
    $ nslookup -q=ns .
    Server:        8.8.8.8
    Address:    8.8.8.8#53
    Non-authoritative answer:
    nameserver = a.root-servers.net.
    nameserver = b.root-servers.net.
    nameserver = c.root-servers.net.
    nameserver = d.root-servers.net.
    nameserver = e.root-servers.net.
    nameserver = f.root-servers.net.
    nameserver = g.root-servers.net.
    nameserver = h.root-servers.net.
    nameserver = i.root-servers.net.
    nameserver = j.root-servers.net.
    nameserver = k.root-servers.net.
    nameserver = l.root-servers.net.
    nameserver = m.root-servers.net.
    
    Эти рутовые серверы и их IP хранятся в специальном кеше, который ставится вместе с установкой, например, bind. Секция zone "." в файле named.conf, можно проверить у себя.
  5. Каждый root-сервер хранит информацию обо всех Top Level Domains (TLD), таких как .ru, .com и тд. Рутовый сервер ответил, что информацию о доменах в зоне .ru можно спросить у TLD DNS серверов, т.е. у серверов, которые обслуживают эту зону:
    $ nslookup -q=ns ru. a.root-servers.net.
    Server:        a.root-servers.net.
    Address:    198.41.0.4#53
    Authoritative answers can be found from:
    ru    nameserver = a.dns.ripn.net.
    ru    nameserver = e.dns.ripn.net.
    ru    nameserver = f.dns.ripn.net.
    ru    nameserver = d.dns.ripn.net.
    ru    nameserver = b.dns.ripn.net.
    a.dns.ripn.net    internet address = 193.232.128.6
    a.dns.ripn.net    has AAAA address 2001:678:17::193:232:128:6
    e.dns.ripn.net    internet address = 193.232.142.17
    e.dns.ripn.net    has AAAA address 2001:678:15::193:232:142:17
    f.dns.ripn.net    internet address = 193.232.156.17
    f.dns.ripn.net    has AAAA address 2001:678:14::193:232:156:17
    d.dns.ripn.net    internet address = 194.190.124.17
    d.dns.ripn.net    has AAAA address 2001:678:18::194:190:124:17
    b.dns.ripn.net    internet address = 194.85.252.62
    b.dns.ripn.net    has AAAA address 2001:678:16::194:85:252:62
        
  6. Каждый из TLD DNS знает где дальше искать информацию о домене второго уровня, в нашем случае justhost.ru. Серверы имен для домена настраиваются у регистратора домена, собственно, это позволяет делегировать домен, т.е. передавать управление зоной серверам имен. TLD DNS возвращает серверы имен для нашего домена, которые уже знают IP:
    $ nslookup -q=ns justhost.ru. a.dns.ripn.net.
    Server:        a.dns.ripn.net.
    Address:    193.232.128.6#53
    Authoritative answers can be found from:
    JUSTHOST.RU    nameserver = ns2.justhost.RU.
    JUSTHOST.RU    nameserver = ns1.justhost.RU.
    ns1.JUSTHOST.RU    internet address = 46.17.46.200
    ns2.JUSTHOST.RU    internet address = 46.17.40.200
        
  7. Так были найдены серверы имен для домена, которые вернут IP адрес. IP возвращается резолвером. Теперь браузер может установить соединение.
    $ nslookup -q=a justhost.ru. ns1.justhost.ru.
    Server:        ns1.justhost.ru.
    Address:    46.17.46.200#53
    Name:    justhost.ru
    Address: 46.17.40.119
        
0
В избр. Сохранено
Авторизуйтесь
Вход с паролем
Комментарии
Выбрать файл
Блог проекта
Расскажите историю о создании или развитии проекта, поиске команды, проблемах и решениях
Написать
Личный блог
Продвигайте свои услуги или личный бренд через интересные кейсы и статьи
Написать

Spark использует cookie-файлы. С их помощью мы улучшаем работу нашего сайта и ваше взаимодействие с ним.