Формат DNS пакета
Для DNS запроса и DNS отклика используется одинаковый формат:
------------Идентификация-(32-бита)------------
QR
Opcode(4)
AA
TC
RD
RA
нули(3)
rcode(4)
---------Количество-вопросов-(32-бита)---------
----------Количество-ответов-(32-бита)---------
-------Количество-прав-доступа-(32-бита)-------
--------Количество-доп-записей-(32-бита)-------
-------------------Вопросы-(?)-----------------
-------------------Ответы-(?)------------------
----------------Права-доступа-(?)--------------
------------------Доп-записи-(?)---------------
Идентификация устанавливается клиентом и возвращается сервером. Позволяет клиенту понять, на какой из его запросов пришел отклик.
QR - тип сообщения (1 бит):
- Запрос
- Отклик
OpCode - код операции (4 бита):
- Стандартный запрос
- Инверсный запрос
- Запрос статуса сервера
AA - авторитетный ответ (1 бит)
TC - сообщение обрезано (1 бит). Полный размер отклика превысил 512 байт, были возвращены только первые 512 байт отклика
RD - требуется рекурсия. Требует от DNS сервера обработать этот запрос самомму (сервер сам должен определить требуемый IP адрес, а не возвращать адрес другого DNS сервера)
RA - рекурсия возможна. Устанавлиавется сервером, если он поддерживает рекурсию (например, корневые сервера не в состоянии обрабатывать рекурсивные запросы в силу своей загруженности)
RCode - код возврата (4 бита):
-
- Нет ошибок
-
- Ошибка имени
Формат вопроса
-------------Имя-запроса-(?)-----------
-Тип-запроса-(16)-
-Класс-запроса(16)-
Формат записи имени
Имя выглядит как последовательность меток. Каждая метка начинается с однобайтового счетчика, который содержит количество следующих за ним байт. Имя заканчивается байтом равным 0. Каждый счетчик должен быть в диапазоне от 0 до 63.
Пример: 6
gemini
3
tuc
4
noao
3
edu
0
Сокращения в записи имени
Если старшие два бита счетчика равны 1, то это не однобитовое число - длина метки, а 16-битный указатель, 14 бит которого являются смещением от начала DNS-сообщения, указывающим на следующую метку.
Пример:
начиная с байта #20: 1
f
3
i
s
i
4
a
r
p
a
0
байт #40: 3
f
o
o
0x1101_0100
байт #64: 0x1101_1010
байт #92: 0
Здесь записаны: f.isi.arpa.
, foo.f.isi.arpa.
, arpa.
, .
Типы запроса:
Имя | Значение | Описание |
---|---|---|
A | 1 | IPv4 |
AAAA | 28 | IPv6 |
AXFR | 252 | запрос на передачу зоны |
CNAME | 5 | каноничное имя |
HINFO | 13 | информация о хосте |
MX | 15 | запись об обмене почтой |
NS | 2 | сервер DNS |
PTR | 12 | запись указателя |
* (ANY) | 255 | запрос всех записей |
Класс запроса обычно равен 1 (Internet)
Формат ресурса
Последние три поля в пакете DNS: ответы, полномочия и доп. информация; объединены общим форматом и называются записью ресурса.
--------------Имя-домена-(?)------------
------Тип-(16)-----
-----Класс-(16)----
--------------TTL-(32-бита)-------------
-Длина-данных-(16)-
----Данные-(?)-----