LINUX.ORG.RU

Вот такая есть гипотетическая ситуация


0

3

Есть локальная сеть неопределенного размера. На каждом компе запущено по экземпляру одной и той же программы. Каждый экземпляр должен иметь у себя список компов, на которых запущены его собратья. Вопрос в том, как они должны находить друг друга. Общение между программами будет происходить через udp/tcp порт.

★★

UDP broadcast?

Deleted
()
Ответ на: комментарий от netcat

Заведи сервер, на котором они будут регистрироваться и с которого будут получать список активных узлов.

sin_a ★★★★★
()
Ответ на: комментарий от netcat

Броадкаст только в пределах сегмента. Теоретически можно сказать маршрутизатору чтоб он пропускал широковещательный трафик, но это так себе решение.

Лучше делай уже сразу на вырост - в конфиге какой-то центральный узел, а тот уже рассказывает другим как друг с другом связаться. Или, если напрямую не получается, то чтоб связывались через него. Пиринг такой на коленке

anonymous
()
Ответ на: комментарий от netcat

несколько независимых узлов-анонсеров её сделают полностью рапределённой.

true_admin ★★★★★
()
Ответ на: комментарий от anonymous

Теоретически можно сказать маршрутизатору чтоб он пропускал широковещательный трафик, но это так себе решение.

Это в настройках маршрутизатора? Просто есть одна идея, но для этого нужна гарантия, что броадкаст не вырвется за пределы сети.

netcat ★★
() автор топика
Последнее исправление: netcat (всего исправлений: 1)

COMMOИ ЛNСП

anonymous
()
Ответ на: комментарий от Harald

полным перебором всех компов в сети

Причём можно сделать его распределённым. Если нашёл ещё кого-то, то обменяись просканированными диапазонами и поделили оставшееся... какой-то SkyNet получается...

monk ★★★★★
()

При установке программы надо добавлять в список несколько известных адресов (дефолт конфиг с центральными узлами), а от них уже можно получить полный список.

amaora ★★
()

Я не совсем понял, все компьютеры находятся в одном сегменте или могут быть в разных?
Если в одном сегменте, но к примеру даже в разных IP подсетях, то есть же броадкаст на 255.255.255.255

Nao ★★★★★
()

Гипотетически, экземпляры внутри сети могут бродкастом понять, у кого какие подсети видны и назначить «анонсерами» самых в разны-стороны смотрящих. Перевыборы каждые 30 секунд. В итоге у нас куча обычных хостов и энное количество шлюзов, на которых и висит статистика. Т.е. они пробрасывают между сетями информацию об участниках. Вроде как на RIP похоже.

Пишу с дивана, разумеется.

anonymous
()
Ответ на: комментарий от anonymous

В итоге у нас куча обычных хостов и энное количество шлюзов, на которых и висит статистика

Это подходит, если наша программа запущена на всех шлюзах по дороге. Тогда действительно поднял на ней же RIP/OSPF и получил маршрутизацию между узлами, где есть программа.

monk ★★★★★
()

Не все ясно конечно. Но как вариант, можно предложить, чтобы первая запущеная версия программы принимала на себя роль сервера. Чтобы не сканить всю сеть в поисках, прога пусть сообщает своим собратьем, кто бигбосс. Вертеть все через tcp.

В общем, както так.

ihappy
()

Обмен пирами плюс некоторый начальный список пиров, в котором будет работать хотя бы одна.

O02eg ★★★★★
()
Ответ на: комментарий от netcat

man Kademlia

для входа нужно знать координаты одного любого узла. Каждый узел (из N) набирает себе список в M узлов, ID которых похож на его. Просто ищет сам себя. Схема поиска проста: отправляем запрос на самый похожий узел из M, с транзитными запросами поступаем точно также. Такую сеть можно использовать и для поиска F кусков информации, для каждого надо ID вписать, ищется точно также. Kademlia сейчас хранит F==10⁹ файлов в N==10⁶ узлах. M==1000. Время поиска 5..30 секунд. В качестве ID(файла) используется md4.

drBatty ★★
()
Ответ на: комментарий от sin_a

Бродкаст по всему интернету это плохая идея.

ИМХО это просто неработоспособная идея.

drBatty ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.