Практический пример как работает DNS в Интернете

Попробую объяснить любознательным пользователям как работает систем доменных имен. Также эта заметка позволит лучше понять тему как создать свой сайт в интернете и как его находят другие люди сидя у себя за компьютером. Не буду здесь приводить общедоступных графиков и шаблонных определений, как всегда попытаюсь донести своими словами. Если совсем просто, то система доменных имен (DNS - domain name system) предназначена для того, чтобы преобразовывать доменное имя в IP-адрес. На практике все конечно сложнее и DNS может сообщить куда больше информации о доменном имени чем просто IP-адрес. О доменных именах я уже упоминал на страницах блога, еще раз повторюсь, что доменное имя это буквенное название нашего сервера (сайта), которое удобно для запоминания нам людям. Например, igorka.com.ua, google.com, ya.ru и т.д. IP-адрес - это некое число, которое однозначно позволяет идентифицировать наш сервер (компьютер) в Интернете. Примерно так. Компьютеры находят друг друга только по IP-адресам, а мы люди по доменным именам. Раз IP-адреса находятся в соответствии с доменными именами, то должно быть, что-то, что хранит эти соответствия. Так оно и есть. Вся информация о доменных именах хранится на DNS-серверах. Тут пришла пора ввести еще один термин как домен. Понятия доменное имя и домен очень схожи. Доменом мы будем называть определенную группу компьютеров (серверов, сайтов) которые объединены одним доменным именем. Давайте на примере. ua - это домен, ru - это тоже домен. В домен ua входят все компьютеры (сайты), названия которых заканчиваются на ua. Вы уже заметили, что доменное имя пишется через точку - igorka.com.ua. Это потому что домены находятся в иерархии. Домен com в данном примере является дочерним для домена ua, а домен igorka является дочерним для домена com. Уже наверное запутались? Основное что нужно понять это то, что сервера имен отвечают каждый за свой домен. То есть каждый сервер имен знает информацию о компьютерах (сайтах) только своего домена. Например, DNS-серверы домена ua “понятия не имеют” о домене igorka.com.ua. И скоро мы в этом удостоверимся. В настройках протокола TCP/IP для сетевой карты через которую осуществляется доступ в Интернет, обязательно будет указан такой параметр как DNS-сервер. Можете запустить командную строку cmd и набрать команду ipconfig /all. В результате выполнения команды вы обязательно найдете строку DNS-серверы в которой будут указаны их IP-адреса. Эти сервера обрабатывают запросы вашего компьютера. Вот вы набрали в адресной строке браузера адрес igorka.com.ua. Ваш компьютер не знает IP-адрес сервера на котором находится этот сайт и он “спрашивает” у DNS-сервера: “Ты знаешь IP-адрес имени igorka.com.ua?”. Если сервер знает он возвращает IP-адрес. А если не знает? Тогда он спросит об этом у так называемых корневых серверов имен. Корневые сервера содержат информацию обо всех серверах доменных имен так называемого первого уровня (ua, ru, net, edu, com и т.д.).  В свою очередь  сервера доменных имен первого уровня знают все о доменах второго уровня (сервера домена ua знают о доменах kh (kh.ua), com (com.ua), in (in.ua) и т.д. Имен корневых серверов имен всего 13 и каждый DNS-сервер в Интернете знает их имена. Собственно вот они все:

a.root-servers.net

b.root-servers.net

c.root-servers.net

d.root-servers.net

e.root-servers.net

f.root-servers.net

g.root-servers.net

h.root-servers.net

i.root-servers.net

j.root-servers.net

k.root-servers.net

l.root-servers.net

m.root-servers.net

Давайте, наконец, перейдем к практике :) . И убедимся в правдивости моих слов. Набираем в командной строке команду:

nslookup -q=ns igorka.com.ua a.root-servers.net

Это команда спрашивает у сервера a.root-servers.net информацию о DNS-серверах домена igorka.com.ua. Помните я выше написал о том, что корневые сервера не знают ничего о домене третьего уровня - igorka.com.ua. Так оно и есть. Смотрим на результат:

198.in-addr.arpa        nameserver = HENNA.ARIN.NET

198.in-addr.arpa        nameserver = CHIA.ARIN.NET

198.in-addr.arpa        nameserver = Z.ARIN.NET

198.in-addr.arpa        nameserver = DILL.ARIN.NET

198.in-addr.arpa        nameserver = BASIL.ARIN.NET

198.in-addr.arpa        nameserver = Y.ARIN.NET

198.in-addr.arpa        nameserver = X.ARIN.NET

198.in-addr.arpa        nameserver = INDIGO.ARIN.NET

*** Can’t find server name for address 198.41.0.4: No information Server:  UnKnown Address:  198.41.0.4

ua      nameserver = NS2.NIC.FR

ua      nameserver = HO1.NS.ua

ua      nameserver = HE1.NS.ua

ua      nameserver = SNS-PB.ISC.ORG

ua      nameserver = SUNIC.SUNET.SE

ua      nameserver = NS.LUCKY.NET

ua      nameserver = PCH.NS.ua

ua      nameserver = NS-UA.RIPE.NET

ua      nameserver = CD1.NS.ua

ua      nameserver = NS.UU.NET

NS.UU.NET       internet address = 137.39.1.3

NS.LUCKY.NET    internet address = 193.193.193.100

CD1.NS.ua       internet address = 194.0.1.9

CD1.NS.ua       AAAA IPv6 address = 2001:678:4::9

HE1.NS.ua       internet address = 216.218.215.27

HO1.NS.ua       internet address = 195.47.253.1

NS2.NIC.FR      internet address = 192.93.0.4

PCH.NS.ua       internet address = 204.61.216.12

PCH.NS.ua       AAAA IPv6 address = 2001:500:14:6012:ad::1

NS-UA.RIPE.NET  internet address = 193.0.12.232

NS-UA.RIPE.NET  AAAA IPv6 address = 2001:610:240:0:53:cc:12:232

SUNIC.SUNET.SE  internet address = 192.36.125.2

Корневой сервер ничего не знает о igorka.com.ua, но он знает о домене ua и предлагает запросить информацию у серверов которые отвечают за домен ua. Давайте так и поступим. Спросим у сервера cd1.ns.ua:

nslookup -q=ns igorka.com.ua cd1.ns.ua

Server:  cd1.ns.ua

Address:  194.0.1.9

com.ua  nameserver = ns.net.ua

com.ua  nameserver = ba1.ns.net.ua

com.ua  nameserver = ho1.ns.com.ua

com.ua nameserver = golf.hostmaster.net.ua

com.ua  nameserver = ns-he.kolo.net

com.ua  nameserver = sns-pb.isc.org

ho1.ns.com.ua   internet address = 195.47.253.3

Как видим DNS-сервер первого уровня, тоже ничего не знает о домене igorka.com.ua. Но он знает о серверах второго уровня, которые отвечают за домен com.ua. И предлагает спросить у этих серверов. Мы уже понимаем, что теперь мы должны получить интересующий ответ, так как сервера второго уровня должны знать о доменах третьего уровня которым и является домен igorka.com.ua. Спрашиваем:

nslookup -q=ns igorka.com.ua ns.net.ua

и получаем ответ

Server:  nix.net.ua Address:  62.149.2.12

igorka.com.ua   nameserver = debian.igorka.com.ua

igorka.com.ua   nameserver = ua57g1.skoda.kh.ua

debian.igorka.com.ua    internet address = 80.249.231.245

В котором указаны два сервера имен отвечающие за домен igorka.com.ua. Теперь уже у любого из этих двух серверов можно запросить дополнительную информацию. Например, так называемую запись А, которая показывает нам IP-адрес соответствующий доменному имени:

igorka.com.ua. nslookup -q=A igorka.com.ua debian.igorka.com.ua

Server:  245.231.249.80.customer.teleportsv.net

Address:  80.249.231.245

Name:    igorka.com.ua

Address:  91.211.119.16

Вот и искомый IP-адрес - 91.211.119.16. Именно на сервере с этим адресом и расположен сайт igorka.com.ua. И теперь зная IP-адрес и имя сайта компьютер может найти его, а браузер отобразить у вас на экране. Все конечно происходит быстро и незаметно для пользователя и есть много особенностей, хотелось показать основной механизм, идею. Также становится теперь понятным, что если вы решили перенести свой сайт на другой сервер (к другому хостеру), то вам нужно будет изменить запись А для вашего домена которая будет указывать уже на новый IP-адрес. Если у домена не прописана запись А, то набрав такое доменное имя мы никуда не попадем. Вот давайте посмотрим на домен igorka.in.ua:

nslookup -q=а igorka.in.ua ns2.everydns.net

Server:  ns2.everydns.net

Address:  208.76.62.100

DNS request timed out. timeout was 2 seconds.

Name:    igorka.in.ua

Мы видим, что запись А (address) отсутствует, IP-адрес мы не получили так как он не прописан. Наберем в браузере igorka.in.ua и… никуда не попадем. Я могу прописать на DNS-сервере, который отвечает за домен igorka.in.ua, IP-адрес такой же как и у igorka.com.ua и сообщить хостеру чтобы он сделал перенаправление на адрес igorka.com.ua и тогда по адресу igorka.in.ua будем попадать на эту страничку :) . Наверное, для начала хватит. Я далеко не все написал в статье (а то можно было бы писать и месяц :) ), поэтому надеюсь, что будут вопросы в комментариях, на которые я буду с удовольствием отвечать.

Статьи и новости схожей тематики:

Комментариев: 16

  1. ivirinka:

    Ух ты, классная статья, молодец! Люблю, когда просто и весело говорят о сложном!
    Но я пока не все поняла, вот, например, где “живут” эти 13 корневых серверов и почему их именно столько?

    Ответить

  2. Igorka:

    Где “живут” можно посмотреть вот здесь: http://www.root-servers.org/ . В двух словах “живут” по всему миру. Серверов не 13, их гораздо больше (сейчас на сайте информация, что 191). 13 - это число ИМЕН серверов. А именно 13 их, потому, что это связано с ограничением на размер пакета для DNS-ответа (14 имен уже не влезут в один пакет) :) Подробнее уже не помню - нужно литературу подымать почитать :)

    Ответить

  3. Наталия:

    Много интересной информации. Спасибо.

    Ответить

    Igorka Reply:

    Всегда пожалуйста :)

    Ответить

  4. Жена:

    И почему я раньше этой статьи не видела?..
    Очень интересно и познавательно. КОе-что я уже конечно знала,но всё равно в статье нашлось много нового для меня.
    Спасибо!

    Ответить

    Igorka Reply:

    Пожалуйста. Если есть вопросы - задавай :) Я понимаю, что я тебе могу и так рассказать, но может еще кому такой вопрос будет интересен :)

    Ответить

  5. ivirinka:

    Хм, статья про DNS больше всего заинтересовала женщин!

    Ответить

    Igorka Reply:

    Если быть честным то пост от Наталии скорее всего спам :) Судя по ссылке на сайт который был оставлен в подписи. Сайт я удалил, а пост решил оставить :))

    Ответить

  6. ivirinka:

    каждый DNS-сервер работает как хороший компьютерщик: он всегда либо знает ответ, либо знает, у кого спросить…

    Ответить

    Igorka Reply:

    Точно! :)

    Ответить

  7. IgorKa - Информационный ресурс » DNS-имя, хостер, регистрант, регистратор:

    [...] О том, что такое DNS и как он устроен я писал в статье Практический пример как работает DNS в Интернете. Здесь же остановимся на том, что DNS-имя - это имя сайта, [...]

  8. Dimon:

    Отличная статья!!!

    Ответить

  9. Vitalik:

    Ух как тут интересно:)
    а как сделать домен первого уровня в стиле .mars или .luna это надо на рутсервис рагистрировать?

    Ответить

    Igorka Reply:

    Спасибо.
    Технически да. Но зарегистрировать домен верхнего уровня (TLD-домен) очень сложно для простого смертного, если вообще возможно. Регистрацией и поддержкой таких доменов занимается международная организация ICANN - Internet Corporation for Assigned Names and Numbers.

    Ответить

  10. Igorka: Проблемы с почтой и запись MX:

    [...] почтового сервера нужно сделать соответствующий DNS-запрос. В Linux я для этого пользуюсь командой dig, хотя можно [...]

  11. Valery:

    Отличная статья!!!

    Ответить

Оставьте свой отзыв