Возможно ли, чтобы mDNS / Bonjour публиковал одно и то же имя сервиса на разных серверах? - PullRequest
0 голосов
/ 07 мая 2018

Я надеялся достичь списка серверов, предлагающих конкретную услугу.

Например, скажем, у меня есть server01, который публикует службу под названием ControlSystem.Теперь я добавляю server02, который также публикует службу под названием ControlSystem.

. Я хочу, чтобы я мог найти список серверов, которые публикуют службу ControlSystem.

Iдумаю, что это возможно (например, у вас может быть несколько принтеров, которые публикуют службу печати), но когда я регистрирую службу на двух разных серверах с помощью dsn-sd -R, вывод dns-sd -L будет просто:

Lookup ControlSystem._http._tcp.local
DATE: ---Mon 07 May 2018---
16:45:57.867  ...STARTING...
16:45:57.868  ControlSystem._http._tcp.local. can be reached at ControlSystem._http._tcp.local.:5000 (interface 11)
16:45:57.869  ControlSystem._http._tcp.local. can be reached at ControlSystem._http._tcp.local.:5000 (interface 11)

Что не очень полезно, потому что я хотел бы иметь хотя бы IP-адрес двух серверов.

1 Ответ

0 голосов
/ 20 декабря 2018

Как вы сказали, is it possible to publish the same service name на разных серверах, ответ - да.

Но не так, как вы это реализовали.

Имя service - это просто имя службы, а не имя instance. Например, для службы веб-сервера имя service будет _http._tcp.

Это имя может быть одинаковым на всех серверах.

Что не может быть одинаковым на разных серверах, так это instance каждой службы. Обычно это соответствует конкатенации имени устройства с именем службы с именем домена (в Bonjour / Zeroconf это .local). Если продолжить с примером веб-серверов, это приведет к server1._http._tcp.local и server2._http._tcp.local. Это имя экземпляра ДОЛЖНО быть уникальным для всех серверов (и даже внутри одного и того же сервера, если у вас будет несколько служб, например, с использованием разных портов).

Имя устройства также должно быть уникальным. Например, в случае ZeroConf он указывается в RFC для многоадресного DNS ( 8. Зондирование и оповещение при запуске ).


В вашем конкретном случае вы регистрируете на обоих серверах одно и то же имя экземпляра, которое, как указано выше, недопустимо.

Вы должны регистрировать на каждом сервере разные экземпляры, т. Е .:

dns-sd -R server01 _http._tcp local 8088
dns-sd -R server02 _http._tcp local 8088

на каждом из серверов.

После этого вы сможете найти службы HTTP, выполнив:

dns-sd -B _http._tcp local.

, который должен найти оба экземпляра.


И, наконец, поскольку вы пытаетесь зарегистрировать новый нестандартный сервис (ControlService), вам следует просто заменить _http на имя вашего сервиса и _tcp на действующий протокол (_tcp или _udp):

dns-sd -R server01 ControlService._tcp local 8088
dns-sd -R server02 ControlService._tcp local 8088

И запрос:

dns-sd -B ControlService._tcp local.
...