Поиск пиров в локальной сети

Я хочу реализовать в своей программе функционал, который позволит ей обнаруживать хосты, на которых запущено одно и то же приложение в локальной сети. Для этого я открою в своей программе сокет UDP и присоединюсь к группе многоадресной рассылки по адресу 224.0.0.1 (при использовании IPv4) или ff02::1 (при использовании IPv6). Затем я собираюсь уведомить другие хосты, что я только что вошел в эту сеть. У меня есть два вопроса в соответствии с моей идеей:

  1. Это правильный способ сделать это или, может быть, есть лучшие решения?
  2. Какова общая политика использования многоадресной передачи в локальных сетях (например, в точках доступа)? Обычно это возможно или большинство маршрутизаторов блокируют или вообще не поддерживают многоадресную связь?

Я разрабатываю свое приложение на C++ для Linux, в будущем планирую написать версию для Windows на C#.


person Goofy    schedule 22.11.2010    source источник


Ответы (1)


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

Что касается политики, я только что проверил свою точку доступа Linksys Wifi, и по умолчанию она отключила многоадресную рассылку. Я подозреваю, что многие места работают в этой конфигурации по умолчанию.

person JOTN    schedule 22.11.2010
comment
Другой вопрос, будет ли getockopt() возвращать ошибку при попытке присоединиться к многоадресной группе в сети, где многоадресная связь заблокирована? - person Goofy; 23.11.2010
comment
Все сокеты UDP, включая многоадресные и одноадресные, не гарантируют доставку. Для обнаружения обычной практикой является широковещательная или многоадресная рассылка пакетов пульса. - person eile; 25.11.2010
comment
Маршрутизаторы будут блокировать широковещательную и многоадресную рассылку по умолчанию, но это не имеет значения, поскольку речь идет об обнаружении локальной сети, блокировка относится к трафику, передаваемому на следующий переход. - person Steve-o; 26.11.2010
comment
@Steve-o В настоящее время я реализовал открытие с помощью трансляций. Он работает в пределах обычной домашней локальной сети (т.е. одна интегрированная точка доступа, коммутатор, маршрутизатор от интернет-провайдера). Я хочу перейти на многоадресную рассылку сейчас, но если многоадресная рассылка отключена, она просто использует широковещательную рассылку или ничего не доставляет? - person El Mac; 14.12.2015