Руководство по выживанию веб-девелопера: основы DNS

0
6550
Добавить в избранное

Каждый Web-разработчик должен знать основы DNS для понимания, диагностики, исправления и предупреждения неисправностей. Ну, поехали!


DNS отвечает за превращение имен хостов в понятный машине IP-адрес. Как это выглядит в dig:

Перейдем к секции QUESTION и ANSWER: мы указали pets.com и получили в ответ 72.52.10.14 – это работа DNS в действии. Теперь подробнее.

Кусочек модели OSI

Рассмотрим часть модели, с которой Web-девелопер будет иметь дело в течение 95% своего рабочего времени. Для HTTP данный стек выглядит так:

Стек протоколов

Уровень приложения – самый верхний уровень, на нем обитает HTTP. Он упаковывает содержимое веб-страницы таким образом, чтобы браузеры пользователей смогли все понять. HTTP не описывает, как браузеру подключаться к серверу: с этим поможет Transmission Control Protocol (TCP). Затем идет Internet Protocol (IP), определяющий, сетевую адресацию клиента и сервера, а ниже – канальный уровень (link layer) служащий для общения физического оборудования.

Использование UDP

Зачастую DNS использует только стек TCP/IP, но большинство операций может функционировать на протоколе UDP (User Datagram Protocol).

UDP быстр, прост и лишен ненужных тонкостей, таких как гарантированная доставка, неявные «рукопожатия» и управление перегрузками. Но сообщение (датаграмма) может быть никогда не доставлено, доставлено дважды или вообще исчезнуть, что позволяет проводить проверку и исправление ошибок непосредственно в приложении. Чувствительный к временным задержкам софт обычно использует UDP, т. к. проще потерять несколько пакетов, чем ждать их возвращения.

Пример DNS-запроса

основы DNS

Теперь рассмотрим непосредственно работу сервиса:

  • вы печатаете com в браузере;
  • браузер просит DNS-resolver отыскать сервер, содержащий com;
  • если резолвер не знает, кто это, он пересылает ваш запрос соседнему DNS-серверу;
  • если “сосед” тоже не знает, он может предоставить адрес другого сервера имен, который поможет, и так до корневого сервера, ответственного за часть доменного пространства «.com«;
  • корневой сервер определяет сервер имен, отвечающий за com, который может предоставить IP-адрес искомого ресурса с помощью А-записи;
  • все резолверы ниже по цепочке кэшируют данный результат для дальнейшего использования.

Таким же образом можно получить из IP-адреса имя хоста. Это возможно при помощи специального домена (in-addr.arpa), PTR-записи и IP с инверсией (пример: 4.4.8.8.in-addr.arpa – это имя хоста публичного DNS-сервера 8.8.4.4). Чтобы это сработало, в авторитетном DNS-сервере делается пометка:

Это означает, что за данную зону (сеть 333.222.111.000/24) отвечает отдельный сервер.

Если при запросе не находится PTR-запись, то считается, что IP не имеет обратной DNS-записи.

Немного о зоне

Чтобы «всеобщая» DNS-система могла узнать о вашем сайте/приложении, нужно оповестить эту систему. Для этого существует конфиг доменной зоны pets.com, который выглядит примерно так:

Когда вы редактируете что-то в этом файлике «руками» или с помощью сервиса регистратора, изменяется параметр (se). Это ключевой параметр, т. к. если данное значение не поменять, DNS-сервера, стоящие по цепочке не узнают, что произошла корректировка вашей зоны и будут выдавать устаревшую информацию (особенно весело будет, если это сообщение об ошибке try again later или что-то подобное).

Каждая запись в пространстве DNS содержит параметр TTL (time to live), указывающий, как долго кэш может храниться у клиента, прежде чем понадобится «переспросить». Если TTL явно не задан, вместо него используется значение по умолчанию (86400 сек. или сутки).

Основы DNS или что еще поделать?

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

Заключение

Будучи веб-разработчиком можно и не вникать в основы DNS, но разобравшись, что находится «под капотом», и зная, как все устроено в интернете, как ходят пакеты и т. д., можно с легкостью идентифицировать проблему и оперативно заняться ее решением.

Оригинал

Хотите что-то добавить? Будем рады почитать 🙂

Интересуетесь веб-разработкой?

Подпишитесь на нашу рассылку, чтобы получать больше интересных материалов:

И не беспокойтесь, мы тоже не любим спам. Отписаться можно в любое время.




Добавить комментарий