Многоадресный DNS

Многоадресный протокол DNS (mDNS) в компьютерных сетях преобразует имена хостов в IP-адреса в небольших сетях, не включающих локальный сервер имен. Это служба с нулевой конфигурацией, использующая практически те же программные интерфейсы, форматы пакетов и операционную семантику, что и DNS. Он был разработан для работы либо как автономный протокол, либо для совместимости со стандартными DNS-серверами. Он использует многоадресные UDP и реализован Apple Bonjour и Avahi с открытым исходным кодом программные пакеты, входящие в большинство дистрибутивов Linux. Хотя реализация Windows 10 была ограничена обнаружением сетевых принтеров, последующие выпуски также разрешали имена хостов. mDNS может работать в сочетании с обнаружением служб DNS (DNS-SD), сопутствующим сетевым методом с нулевой конфигурацией, указанным отдельно в IETF RFC 6763.

История править

Многоадресная DNS была впервые предложена Биллом Вудкоком и Биллом Мэннингом в IETF в 2000 году и в конечном итоге была опубликована как стандарт IETF RFC 6762 в 2013 году Стюартом Чеширом и Марком Крохмалом.

Обзор протокола править

Когда клиенту mDNS необходимо разрешить имя хоста, он отправляет сообщение с многоадресным IP-запросом, в котором просит хост с таким именем идентифицировать себя. Затем эта целевая машина рассылает многоадресное сообщение, включающее её IP-адрес. Затем все машины в этой подсети могут использовать эту информацию для обновления своих кэшей mDNS. Любой хост может отказаться от притязаний на имя, отправив ответный пакет со временем жизни (TTL), равным нулю.

По умолчанию mDNS разрешает исключительно имена хостов, оканчивающиеся на домен верхнего уровня .local. Это может вызвать проблемы, если .local включает хосты, которые не реализуют mDNS, но могут быть найдены через обычный одноадресный DNS-сервер. Разрешение таких конфликтов требует изменений в конфигурации сети, которых mDNS должен избегать.

Структура пакета править

Сообщение mDNS представляет собой многоадресный пакет UDP, отправляемый с использованием следующей адресации:

  • IPv4-адрес 224.0.0.251 или IPv6-адрес ff02::fb
  • UDP-порт 5353
  • При использовании кадров Ethernet стандартный MAC-адрес многоадресной рассылки IP 01:00:5E:00:00:FB (для IPv4) или 33:33:00:00:00:FB (для IPv6)

Структура полезной нагрузки основана на формате одноадресного пакета DNS , состоящего из двух частей — заголовка и данных.

Заголовок идентичен заголовку в одноадресной DNS, как и подразделы в части данных: запросы, ответы, авторитетные серверы имен и дополнительные записи. Количество записей в каждом подразделе соответствует значению соответствующего поля *COUNT в заголовке.

Запросы править

Проводной формат для записей в разделе запроса немного изменён по сравнению с одноадресной DNS, добавлено однобитовое поле UNICAST-RESPONSE.

Поля раздела mDNS Query
ПолеОписаниеБиты длины
QNAMEИмя узла, к которому относится запросПеременная
QTYPEТип запроса, то есть тип RR, который должен быть возвращен в ответах.16
UNICAST-RESPONSEЛогический флаг, указывающий, желателен ли одноадресный ответ1
QCLASSКод класса, 1 также известный как «IN» для Интернета и IP-сетей15

Как и в одноадресной DNS, поле QNAME состоит из ряда подполей длины/значения, называемых «метками». Каждая метка представляет одну из разделенных точками подстрок в полном доменном имени (FQDN). Список завершается либо одним нулевым байтом, представляющим «корень» DNS, либо байтом с двумя установленными старшими битами (значение 192), чтобы сигнализировать о косвенном указателе на другое место в сообщении. Это известно как сжатие имен в RFC-6762.

Поле UNICAST-RESPONSE используется для минимизации ненужных широковещательных рассылок в сети: если этот бит установлен, отвечающая сторона ДОЛЖНА отправлять направленный одноадресный ответ непосредственно запрашивающему узлу, а не рассылать ответ по всей сети.

Поле QCLASS идентично полю в одноадресной DNS.

Ресурсные записи править

Все записи в разделах ответов, полномочных серверов имен и дополнительных записей имеют одинаковый формат и вместе называются записями ресурсов (RR).

Записи ресурсов в mDNS также имеют немного изменённый общий формат по сравнению с одноадресной рассылкой DNS:

Поля записи ресурса mDNS
ПолеОписаниеБиты длины
RRNAMEИмя узла, к которому относится записьПеременная
RRTYPEТип записи ресурса16
CACHE-FLUSHЛогический флаг, указывающий, следует ли очищать устаревшие кэшированные записи.1
RRCLASSКод класса, 1, также известный как «IN» для Интернета и IP-сетей .15
TTLИнтервал времени (в секундах), в течение которого запись RR должна кэшироваться.32
RDLENGTHЦелое число, представляющее длину (в октетах) поля RDATA.16
PDATAДанные о ресурсах; внутренняя структура зависит от RRTYPEПеременная

Бит CACHE-FLUSH используется для указания соседним узлам, что запись должна перезаписывать, а не добавляться к любым существующим кэшированным записям для этого RRNAME и RRTYPE.

Форматы полей RDATA такие же, как в одноадресной DNS. Однако обнаружение службы DNS (DNS-SD), наиболее распространенный вариант использования mDNS, требует небольших изменений в некоторых их форматах (в частности, в записях TXT).

См. также править