Введение

Протокол обнаружения служб

В компьютерных сетях протокол Multicast DNS (mDNS) преобразует имена хостов в IP-адреса в небольших сетях, не использующих локальный DNS-сервер. Это технология нулевой конфигурации, использующая те же программные интерфейсы, форматы пакетов и принципы работы, что и стандартная система доменных имен (DNS). Она разработана для работы как самостоятельно, так и в совместимости со стандартными DNS-серверами. mDNS использует IP-пакеты протокола User Datagram Protocol (UDP) с мультивещательной рассылкой и реализован в программных пакетах Apple Bonjour и Avahi с открытым исходным кодом, которые входят в большинство дистрибутивов Linux. Изначально реализация в Windows 10 ограничивалась обнаружением сетевых принтеров, но в последующих версиях появилась возможность разрешения имен хостов. mDNS может использоваться совместно с DNS Service Discovery (DNS SD) – другой технологией сетевой настройки нулевой конфигурации, описанной отдельно в .

История

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

Обзор протокола

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

Вопросы

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

Как и в одноадресном DNS, поле QNAME состоит из серии подполей "длина/значение", называемых метками. Каждая метка представляет одну из подстрок, разделенных точками, в полностью квалифицированном доменном имени (FQDN). Список завершается либо одним нулевым байтом, представляющим корень DNS, либо байтом с установленными двумя старшими битами (значение 192), чтобы указать на косвенный указатель на другое место в сообщении. Это известно как сжатие имени в RFC 6762. Поле UNICAST RESPONSE используется для минимизации ненужных широковещательных рассылок в сети: если бит установлен, отвечающие узлы ДОЛЖНЫ отправлять направленный одноадресный ответ непосредственно запрашивающему узлу, а не транслировать ответ во всю сеть. Поле QCLASS идентично полю, используемому в одноадресном DNS.