Проводя небольшой рефакторинг кода, свазаного с работой DNS, решил больше узнать о нем и поделиться со всеми полезной (или не очень) информацией.

DNS (Domain Name Service) - служба доменных имен. С ним (DNS) все сталкивались, но далеко не все знают как он работает и что может. В простейшем случае - это сервис, который переводит доменное имя в IP адрес, а вот что у него внутри - читайте ниже.

Как и большинство протоколов, DNS имеет свою спецификацию, описанную в RFC 1035 и RFC 1706.

DNS имеет иерархическую структуру:

 

 

Корневые DNS серверы (“.”, root name servers, http://en.wikipedia.org/wiki/Root_name_server) отвечают за информазию о доменах верхнего (1-го) уровня, таких как .com, .net, .info и так далее. За ними идут DNS серверы второго уровня, которые содержат информацию о доменах 2-го уровня (поддомены). И так далее по иерархии

 

 

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

Поля DNS записей:

 

  • NAME - собственно само доменное имя;
  • TYPE - тип домена;
  • CLASS - класс записи; в стандате RFC прописано, что DNS может работать не только в сетях по TCP/IP, класс записи определяет тип сети;
  • RDLEN, RDATA - длина и формат с данными о домене.

 

Типы записей DNS (с чем чаще всего приходится работать):

 

  • A record - определяет соответствие домена IP-адресу;
  • AAAA - тоже самое, что и  A, но для IPv6;
  • CNAME - каноническое имя, alias домена, используется для редиректов на другое (под)домен;
  • MX - mail exchage, указывает адреса серверов, которые отвечают за работу с email’ами для данного домена;
  • PTR - pointer, нужен для обратных (reverse) DNS-запросов, которые по IP адресу возвращают FQDN.

 

 

Отдельно стоит сказать про FQDN  - fullly qualified domain name, полное уникальное имя домена, включаещее также корневой домен и завершается точкой (“.”): blog.e0ne.info.

Если спуститься на уровень протокола, то формат сообщения между DNS сервером и клиентом выглядит так:

 

 

Бывает полезно при работе с TCP Dump и другими анализаторами траффика на разных уровнях модели OSI

Идентификатор:

  • 16-битовое поле для обозначения соответствия между запросами и откликами.
  • Q
  • 1-битовый флаг запроса (query).

Запрос:

  • 4-битовое описание типа сообщения:
  • 0   стандартный запрос (адрес по имени).
  • 1   обратный запрос (имя по адресу).
  • 2   запрос состояния сервера.

A:

  • Authoritative Answer - 1-битовый флаг, показывающий отклик от уполномоченного (authoritative) сервера имен.

T:

  • Truncation - отбрасывание. 1-битовый флаг, говорящий об отбрасывании сообщения.

R:

  • 1-битовый флаг, устанавливаемый устанавливаемый для разрешения запроса рекурсивным путем.

V:

  • 1-битовый флаг поддержки рекурсивного сервиса.

B:

  • 3-битовое поле, зарезервированное для использования в будущем (0).

RCode:

  • Код отклика - 4-битовое поле, устанавливаемое сервером имен для обозначения состояния запроса:
    • 0   нет ошибок.
    • 1   невозможно интерпретировать запрос из-за формальной ошибки.
    • 2   обработка невозможна из-за сбоя на сервере.
    • 3   запрошенное имя не существует.
    • 4   неподдерживаемый тип запроса.
    • 5   отказ от выполнения запроса.

Счетчик вопросов:

  • 16-битовое поле, содержащее число записей в разделе вопросов.

Счетчик ответов:

  • 16-битовое поле, содержащее число записей о ресурсах в разделе ответов.

Счетчик Authority:

  • 16-битовое поле, определяющее число записей о ресурсах сервера имен в разделе authority.

Счетчик дополнений:

  • 16-битовое поле, определяющее число записей о ресурсах сервера имен в дополнительном разделе.



Comments are closed