Bonjour

29 августа 2026 · ~11 мин чтения

протокол сеть apple discovery mdns

Bonjour

Bonjour — это набор технологий Apple для автоматического обнаружения
устройств и сервисов в локальной сети без ручной настройки. За именем
стоят три открытых стандарта: link-local addressing, mDNS (Multicast DNS)
и DNS-SD (DNS-based Service Discovery).

История

Что это такое

Bonjour — это зонтичный бренд для набора протоколов, которые вместе решают
одну задачу: устройство должно уметь работать в сети, куда его только что
воткнули, без единой ручной настройки
. Ни IP-адреса ввести, ни DNS-сервера
настроить, ни принтер найти вручную. Просто включил — работает.

Внутри Bonjour три составные части:

  1. Link-local addressing (RFC 3927) — если в сети нет DHCP-сервера
    (роутера, который раздаёт IP), устройство само выбирает себе адрес
    из диапазона 169.254.0.0/16, проверяет, что он не занят, и берёт.
    На macOS это называется «self-assigned IP». Работает без ничего.

  2. mDNS (Multicast DNS, RFC 6762) — резолвинг имён в зоне .local
    без DNS-сервера. Пишешь mac-pavel.local — и оно резолвится в IP
    через широковещательный запрос по локальной сети. Никаких серверов,
    никакой конфигурации.

  3. DNS-SD (DNS Service Discovery, RFC 6763) — поверх mDNS работает
    протокол поиска сервисов. «Кто в этой сети предлагает печать по
    протоколу IPP?» — и в ответ приходит список принтеров. «Кто
    AirPlay-приёмник?» — список колонок и телевизоров.

Разница с обычным DNS: обычный DNS — это иерархия серверов, где
клиент спрашивает «где example.com?» у корневого сервера, потом у зоны
.com, потом у зоны example.com. Централизованно, требует настройки.
mDNS — это широковещательный запрос без сервера: клиент кричит
в локальную сеть «кто такой mac-pavel.local?», и тот, кто отзывается на
это имя, отвечает сам.

Разница с UPnP/SSDP (протокол обнаружения от Microsoft): SSDP решает ту же
задачу, но менее аккуратно (спам-запросы по всей сети, много legacy
проблем безопасности). Bonjour/mDNS считается более чистым и его выбрал
IETF как стандарт.

Аналогии из жизни

Аналогия 1 — коктейль-вечеринка. Заходишь в комнату, где никого не
знаешь. Тебе нужен Ваня. Кричишь на всю комнату: «Ваня, ты здесь?». Если
Ваня есть — отвечает. Все остальные молча его пропускают. Это ровно то,
что делает mDNS: multicast-запрос в локальную сеть, ответ только от
адресата. Где ломается: если в комнате 500 человек и все параллельно
ищут разных Вань — начнётся ор, никто никого не услышит. Именно поэтому
Bonjour плохо работает в больших офисных сетях: multicast там или
отключён, или тонет в шуме.

Аналогия 2 — блошиный рынок. Продавцы выставляют таблички: «Пирожки
свежие», «Часы швейцарские», «Ремонт зонтов». Покупатели ходят и читают.
Никто ни у кого ничего не спрашивает, все объявляют о себе сами. Это
DNS-SD: устройства «вывешивают» описание своих сервисов, клиенты сканируют
и выбирают. Где ломается: если у продавца шрифт мелкий и издалека не
видно, покупатель мимо пройдёт. У Bonjour есть похожая проблема — TXT-
записи (описание сервиса) ограничены по длине, детали приходится
запрашивать отдельным пакетом.

Аналогия 3 — детский лагерь. Каждое утро вожатый выстраивает всех и
кричит: «Кто хочет играть в футбол? Подойдите!». Кто хочет — подходит.
Никто не ведёт список, никто не заранее не регистрируется. Через час то
же самое с волейболом. Это — цикл multicast-запросов в Bonjour: клиенты
периодически перезапрашивают, кто есть в сети, потому что устройства
могли уйти или прийти. Где ломается: если ребёнок уходит с площадки
молча — вожатый всё равно будет считать его в списке. У Bonjour есть
специальный «goodbye»-пакет для корректного выхода, но не все устройства
его отправляют (например, если Wi-Fi отвалился внезапно) — тогда клиент
видит призрак в списке ещё несколько минут.

Как это работает

Возьмём типичный сценарий: у тебя Mac, ты воткнул в сеть новый принтер с
поддержкой AirPrint, и он появился в списке. Что происходит?

Шаг 1. IP-адрес.
Принтер включается, ищет DHCP-сервер (роутер). Если находит — получает от
него IP. Если нет — берёт себе адрес из диапазона 169.254.x.x, проверяет
через ARP, что этот адрес свободен, и оставляет за собой.

Шаг 2. Имя.
У принтера есть внутреннее имя, например Kyocera-M5521cdw.local.
Как только у него появился IP, он рассылает multicast Announcement
пакет UDP на адрес 224.0.0.251:5353 (это зарезервированный «адрес всей
локальной сети» для mDNS). В пакете: «я — Kyocera-M5521cdw.local, мой
адрес такой-то». Все устройства в сети слышат и запоминают.

Шаг 3. Реклама сервисов.
Тем же multicast-ом принтер объявляет: «я умею IPP-печать
(_ipp._tcp.local)». В DNS-SD терминологии он публикует PTR-запись «есть
сервис такого-то типа», SRV-запись (какой хост и порт), TXT-запись (детали:
модель, поддерживаемые форматы).

Шаг 4. Обнаружение у Mac.
Твой Mac периодически шлёт multicast-запрос: «кто есть в сети из типа
_ipp._tcp.local?». Все принтеры отвечают, включая новый. macOS
показывает их в диалоге «Добавить принтер».

Шаг 5. Использование.
Ты выбираешь принтер, macOS запрашивает его TXT-запись целиком, читает
поддерживаемые форматы. В большинстве случаев драйвер не нужен: AirPrint
= IPP Everywhere = универсальный протокол. Печатаешь.

Ключевое, что все шаги происходят без единой ручной настройки. И самое
главное: всё в пределах одной локальной сети. Multicast-пакеты не
уходят за пределы Wi-Fi/Ethernet-сегмента. Твой iPhone в кафе не видит
принтеры твоего офиса — и это правильно.

Схема на пальцах:

[Принтер]                              [Mac]
   |                                     |
   |-- "я Kyocera.local, IP 192.168.1.7" ----> (multicast)
   |                                     |
   |-- "у меня есть сервис _ipp._tcp" ---------> (multicast)
   |                                     |
   |          <---- "кто из _ipp._tcp?" --------|
   |                                     |
   |-- "я, вот мои детали" -------------------->|
   |                                     |
   |          <---- IPP-запрос: "печатай" ------|
   |                                     |

Технические детали для любителей: mDNS работает на UDP-порту 5353,
использует multicast-адреса 224.0.0.251 (IPv4) и ff02::fb (IPv6),
TTL=255 на link, формат пакета — обычный DNS-пакет с флагом QR=1 и
кучей расширений (unicast responses, cache flush и т.д.).

Где встречается в обычной жизни

Где встречается в IT и бизнесе

Кто пользуется

Альтернативы и конкуренты

Когда НЕ стоит использовать

Связанные понятия

Литература и источники

Где встретилось у меня

Вчера в логах Claude Code был большой блок про печать: конфигурация
принтеров Kyocera и HP LaserJet на Mac, почему принтер «пропал» из
системы и как заставить macOS его снова увидеть. Ответ на многие
подобные вопросы упирается именно в Bonjour: если mDNS-объявления
принтера не доходят до Mac (проблема с multicast на роутере, VLAN,
Wi-Fi изоляцией клиентов) — принтер не появится в списке, даже если он
физически в той же сети. Понимание того, что «магия обнаружения» —
не магия, а конкретный multicast-протокол, помогает диагностировать
такие ситуации.

Краткое резюме