Как мой сервер может объявить о своем присутствии всем в сети

Как мой сервер может объявить о своем присутствии всем в сети

Ситуация следующая. Я хочу, чтобы приложение работало на сервере. Все рабочие столы в компании должны подключаться к нему. Но я не хочу, чтобы IP-адрес сервера был жестко закодирован в рабочих столах. Вместо этого я хочу, чтобы сервер мог объявлять о себе с помощью некоторых механизмов вещания. Рабочие столы будут прослушивать такое сообщение и, следовательно, узнают IP-адрес сервера, а затем смогут подключиться к нему.

Как это сделать? Нужно ли мне использовать multicast? Как далеко доходят multicast-сообщения? Как настольные приложения могут прослушивать multicast-данные?

решение1

Наиболее распространенным методом для этого является использование обычного обычногоДНС. У вашей компании, вероятно, есть собственное доменное имя; возможно, внутреннее; просто добавьте поддомен под ним — myapp.internal.example.comили myapp.corpчто-то в этом роде — и укажите адрес вашего сервера.

myapp.<domain>.         A       10.0.0.5
myapp.<domain>.         AAAA    2001:db8::123:4

(В конце концов, этосервер, его IP-адрес вряд ли будет меняться еженедельно. А когда он меняется, все, что вам нужно сделать, это обновить поддомен в DNS.)

Вы можете сделать его более продвинутым и использоватьSRV-записивместо прямых адресных записей A/AAAA. Например, протокол чата XMPP использует записи SRV для поиска серверов для домена, которых может быть несколько с разными приоритетами:

chat1.<domain>.         A       10.0.0.4
chat2.<domain>.         A       10.0.0.7

                                ; priority, weight, port, hostname
_xmpp._tcp.<domain>.    SRV      0 0 5222 chat1.<domain>.
_xmpp._tcp.<domain>.    SRV     10 0 5222 chat1.<domain>.

Это сложнее для приложений, поскольку теперь им нужна некоторая логика для сортировки возвращаемых записей по приоритету SRV, а затем по весу, но это может дать некоторые преимущества, такие как возможность добавлять более медленные «резервные» серверы.


Если по какой-то причине это неприемлемо, вы можете попробовать один из существующих многоадресныхпротоколы обнаружения служб(Некоторые из них объединяют разрешение имен и обнаружение служб в одно целое; другие делают это отдельно.)

  • Apple и различные дистрибутивы Linux используют Bonjour/Avahi, также известный какmDNS(«Многоадресный DNS») в сочетании сDNS-SDкак для общего обнаружения служб, так и для локального разрешения имен;

  • Microsoft предпочитает протокол UPnPSSDP, за исключением случаев, когда он предпочитаетWS-ОткрытиеВместо этого. Раньше он использовал NetBIOS. Все документировано вПоставщики функций.

  • (Некоторые программы решают просто транслировать UDP-датаграммы со словами «Я здесь!» в своем собственном формате. Это работает не очень хорошо.)

Обычно существуют как API, предоставляемые ОС, так и сторонние библиотеки для поиска определенных служб с использованием соответствующего протокола обнаружения.

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

Связанный контент