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

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

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

Спасибо


person ndc5057    schedule 06.08.2012    source источник


Ответы (1)


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

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

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

person igorw    schedule 03.09.2012
comment
Пожалуйста, помогите с этим запросом stackoverflow.com/questions/40662608/ - person Daemon; 20.11.2016