Pull to refresh

Разбираемся в структуре DNS заголовка. Просто и по делу

Эта статья предназначена для тех, кто уже шарит разбирается и имеет базовое представление о том, что же такое DNS, как он работает и понимает значение слов «резолвит», запрос, ответ и т.д. Итак, начнем!

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


image

  • ID — данное поле используется как уникальный идентификатор транзакции. То бишь указывает на то, что пакет принадлежит одной и той же сессии «запросов-ответов» и занимает первое 2 байтовое слово.
  • QR он же Query Response (1 бит) — данный бит служит для индентификации того, является ли пакет запросом (QR = 0) или ответом (QR = 1).
  • Opcode (4 бита) — с помощью данного кода клиент может указать тип запроса, где обычное значение 0 — стандартный запрос, другие значения — это 1, то есть инверсный запрос, и 2 — запрос статуса сервера.
  • AA (1 бит) — данное поле имеет смысл только в DNS-ответах от сервера и сообщает о том, является ли ответ авторитетным либо нет (Authority Answer).
  • TC (1 бит) — данный флаг устанавливается в ответе от DNS-сервера, если оный не смог поместить всю информацию в UDP-дейтаграмму (Transaction).
  • RD (1 бит) — он же Recursion Desired — этот однобитовый флаг устанавливается в запросе и копируется в ответ. Если он флаг устанавливается в запросе — это значит, что клиент просит сервер не сообщать ему промежуточных ответов, а вернуть только IP-адрес.
  • RA (1 бит) — отправляется только в ответах, и сообщает о том, что сервер поддерживает рекурсию (RA = 1).
  • Z (3 бита) — являются зарезервированными и всегда равны нулю.
  • RCODE (4 бита) — это поле служит для уведомления клиентов о том, успешно ли выполнен запрос или с ошибкой.

RCODE = 0 — значит запрос прошел без ошибок;
RCODE = 1 — ошибка связана с тем, что сервер не смог понять форму запроса;
RCODE = 2 — эта ошибка с некорректной работой сервера имен;
RCODE = 3 — имя, которое разрешает клиент не существует в данном домене;
RCODE = 4 — сервер не может выполнить запрос данного типа;
RCODE = 5 — этот код означает, что сервер не может удовлетворить запроса клиента в силу административных ограничений безопасности.

Что же касательно секций DNS-запросов. Тот, кто знаком с командой dig в Linux могут узреть данные секций просто вписав в консоли что-то типа «dig <какое-нибудь доменное имя>» (у данной команды есть несколько ключей — это отдельная тема, поэтому, кому интересно — юзайте man dig). А от себя хочу просто расписать значения каждой секции из вывода:

Секции DNS-запросов



В общем и целом покопавшись в накопленных мной материалах, нашел очень интересную и понятную картинку:

image

Секция 1 — Question section — в этой секции DNS-клиент передает запросы DNS-серверу сообщая о том, для какого имени необходимо разрешить (зарезолвить) запись DNS, а также какого типа (NS, A, TXT и т.д.)

Секция 2 — Answer section — сервер сообщает клиенту ответ или несколько ответов на запрос, в котором сообщает вышеуказанные данные.

Секция 3 — Authoritative Section — эту секцию заполняет только DNS-сервер. Она содержит сведения о том, с помощью каких авторитетных серверов было получена информация включенная в секцию DNS-овтета.

Секция 4 — Additional Record Section — содержит информацию сопоставления IP-адресов с именами серверов ответственных за запрашиваемое доменное имя.

Что касается четырех полей «Number of ..» — эти 4 слова состоят из счетчиков, каждый из которых показывает кол-во записей в каждой секци DNS:

Number of Question Records — показывает количество записей в Question Section;
Number of Answer Records — в Answer Section;
Number of Authoritative Records — в Auth. Section, и Number of AR — в Additional Record соответственно.

Вот короткая информация о том, из чего состоит заголовок протокола DNS. Надеюсь данная статья была полезной, хоть и, возможно, «затертой до дыр». Однако повторение мать учения!
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.