что нужно, чтобы разрешение имен хостов работало на локальной сети? - PullRequest
7 голосов
/ 06 февраля 2012

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

Вместо этого я решил сохранить имя хоста пиров, поэтому даже если IP-адрес изменится, они все равно будут доступны через их имя хоста. (Я знаю, что имена хостов тоже могут меняться, но этого достаточно).

Итак, мой вопрос: что именно нужно для разрешения разрешения имени хоста в локальной сети со смешанными клиентами Windows / Mac / Linux?

1 Ответ

6 голосов
/ 06 февраля 2012

Без использования центрального органа единственным надежным способом достижения этого является использование разрешения имен с нулевой конфигурацией.Это означает, что без многоадресного маршрутизатора вы сможете динамически разрешать одноранговые узлы в той же подсети, что и разрешающий хост.Вы можете использовать что-то вроде Bonjour для Mac, NetBIOS или SSDP для Windows или Avahi для Linux, но вы не можете предполагать, что они включены.Возможно, я упускаю из виду некоторые более популярные протоколы, которые хорошо выполняют эту функцию, но лично я бы собрал вместе протокол быстрого разрешения имен для ваших приложений.Взгляните на них, чтобы узнать больше идей:

Zeroconf Разрешение имен

Универсальный метод разрешения имен локальных сетей без DNS?

http://en.wikipedia.org/wiki/Zero_configuration_networking#Name_resolution

http://en.wikipedia.org/wiki/Broadcast_address#IP_networking

Я бы выбрал определенный порт udp для прослушивания (скажем, 12000), а затем, когда вы будете готовы разрешить хосты, отправьте «привет»пакет udp на 255.255.255.255 на порту 12000, и все остальные хосты в вашей сети, на которых работает ваше приложение, должны ответить пакетом, содержащим их имя хоста, возможно, другую информацию.

...