Что нужно, чтобы разрешение имен хостов работало на локальной сети?

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

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

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

1 ответ

Решение

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

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

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

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

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

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

Другие вопросы по тегам