Как именно mDNS разрешает адреса?

Как именно служба обнаруживается через DNS-SD, как именно разрешается адрес этого хоста, и занимает ли это значительно больше времени / накладных расходов?

Кроме того, если я использую JmDNS или Bonjour, есть обратные вызовы для обоих serviceFound а также serviceResolved, Если меня просто интересует IP-адрес устройства, публикующего определенную службу, есть ли более быстрый / более эффективный способ получения адреса, чем через оба serviceFound а также serviceResolved?

Спасибо

1 ответ

Решение

DNS-SD использует многоадресный DNS (MDNS), который работает, отправляя пакеты DNS через UDP на определенный адрес многоадресной рассылки. Все хосты с поддержкой mdns в сети также прослушивают этот адрес. Он использует UDP, так что это довольно низкие накладные расходы. Кроме того, клиенты спроектированы таким образом, что количество разговоров в сети сводится к минимуму за счет использования обширного кэширования.

Обнаружение службы представляет собой двухэтапный процесс. Первым шагом является поиск имен всех хостов, предоставляющих определенную услугу (например, печать). Это еще не даст вам IP-адрес, вместо этого вы получите имя mdns (заканчивающееся на .local). Это потому, что IP-адрес может измениться, а имя не изменится.

Вторым шагом в обнаружении службы является разрешение .local имя хоста над mdns. Вы спрашиваете через мультикаст, кто foo.local является, foo.local увидит этот пакет и ответит по широковещанию своим IP-адресом, номером порта и другой информацией

Другие вопросы по тегам