Как именно 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-адресом, номером порта и другой информацией