Что нужно, чтобы разрешение имен хостов работало на локальной сети?
Я занимаюсь разработкой сетевого приложения, которое работает на нескольких разных компьютерах в локальной сети. Одной из основных потребностей является то, чтобы приложение поддерживало список пиров в локальной сети, с которыми оно связывалось в прошлом, чтобы оно могло восстановить предыдущие сеансы. Наивным решением было бы просто запомнить IP-адрес и сохранить его в таблице, но что происходит при изменении IP-адреса узла?
Вместо этого я решил сохранить имя хоста для пиров, поэтому даже если IP-адрес изменится, они все равно будут доступны через имя хоста. (Я знаю, что имена хостов тоже могут меняться, но это достаточно хорошо).
Итак, мой вопрос: что именно нужно, чтобы разрешение имен хостов работало в локальной сети со смешанными клиентами Windows/Mac/Linux?
1 ответ
Без использования центрального органа единственный надежный способ достичь этого - использование разрешения имен с нулевой конфигурацией. Это означает, что без многоадресного маршрутизатора вы сможете динамически разрешать одноранговые узлы в той же подсети, что и разрешающий хост. Вы можете использовать что-то вроде Bonjour для Mac, NetBIOS или SSDP для Windows или Avahi для Linux, но вы не можете предполагать, что они включены. Возможно, я пропускаю некоторые более популярные протоколы, которые хорошо выполняют эту функцию, но я бы лично собрал быстрый протокол разрешения имен для широковещательной рассылки udp для вашего приложения. Взгляните на них для некоторых идей:
Универсальный метод разрешения имен локальной сети без DNS?
http://en.wikipedia.org/wiki/Zero_configuration_networking
http://en.wikipedia.org/wiki/Broadcast_address
Я бы выбрал конкретный порт udp для прослушивания (скажем, 12000), а затем, когда вы будете готовы разрешить хосты, отправьте пакет "привет" udp на номер 255.255.255.255 на порт 12000 и все остальные хосты в вашей сети будут работать. Ваше приложение должно ответить пакетом, содержащим их имя хоста, возможно, другую информацию.