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

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

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

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


person lms    schedule 06.02.2012    source источник
comment
Если это корпоративная сеть, вы можете зарегистрировать свое имя хоста на DNS-сервере. Если вы находитесь в частной локальной сети, существуют различные варианты использования этого приложения в локальной сети с одной подсетью или в сети, которая может быть сегментирована на отдельные широковещательные домены. (отдельные подсети) Как будет выглядеть ваша сеть?   -  person resmon6    schedule 06.02.2012
comment
Приложение будет работать в одной подсети LAN. Но он будет развернут для тысяч различных клиентов в пределах их собственной локальной сети. Поэтому я не могу делать предположения о том, какой маршрутизатор они используют или какие сетевые службы доступны.   -  person lms    schedule 06.02.2012


Ответы (1)


Единственный надежный способ добиться этого без использования центрального органа — использование разрешения имен zerconfiguration. Это означает, что без многоадресного маршрутизатора вы сможете динамически разрешать одноранговые узлы только в той же подсети, что и разрешающий хост. Вы можете использовать что-то вроде bonjour для mac, netbios или ssdp для windows или avahi для linux, но вы не можете предположить, что они включены. Возможно, я упускаю из виду некоторые более популярные протоколы, которые хорошо выполняют эту функцию, но я бы лично собрал протокол быстрого разрешения широковещательных имен udp для вашего приложения. Взгляните на них, чтобы найти еще несколько идей:

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

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

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

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

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

person resmon6    schedule 06.02.2012