2008-11-13 3 views
14

Учитывая, что два компьютера, подключенные к Интернету, которые ничего не знают друг о друге перед рукой, возможно ли, чтобы один компьютер мог транслировать сообщение, чтобы второй компьютер мог его получить и ответить?Две компьютеры, находящие друг друга через Интернет

Я знаю, что UDP широковещательные сообщения выходят, но я считаю, что они обычно фильтруются провайдером до того, как он достигнет истинного Интернета. Это правда?

+0

Не совсем связано с программированием, не так ли? – 2008-11-13 07:08:13

+6

Может быть связано с программированием - он может быть заинтересован в разработке такой системы – Jaywalker 2008-11-13 07:14:06

+0

Ну, это все равно похоже на сетевое домашнее задание, если вы спросите меня. Он ничего не писал о программировании. – 2008-11-13 07:20:10

ответ

2

Нет, вы не можете транслировать это через Интернет. Вам нужно знать, к какому адресу вы хотите обращаться.

7

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

12

Нынешний лучший способ достижения многоузловой сети без централизованной координации - использование Distributed Hash Tables. Эта ссылка немного объясняет и ссылается на различные реализации, которые вы можете использовать.

При этом вам все равно нужна каждая машина для координации, по крайней мере, с некоторыми сверстниками. Просто вам не нужно координировать работу с центральным сервером. Решение, использующее центральный сервер, который знает обе (все) участвующие машины, также будет работать, но накладывает дополнительные ограничения на анонимность и масштабируемость, просто помните, что случилось с Napster.

4

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

В частности, протокол XMPP является расширяемым, открытым и используемым многими поставщиками, такими как Google Talk. Библиотеки существуют для большинства языков, и у нее есть плюс возможность работать (медленно и через сторонний сервер), даже если оба узла находятся за NAT-box.

Если связь должна использовать другой канал, вы можете использовать XMPP для обмена IP-адресом, а затем продолжить со стандартным маршрутом сокета (но если вы зашифруете свои сообщения, не должно быть проблем даже с сервером сторонних производителей, true все пакеты проходят через ненадежные сторонние маршрутизаторы, поэтому вы должны шифровать в любом случае, если у вас есть конфиденциальные данные ..).

Надеюсь, это поможет.

1

UDP - это тупик - его протокол, в котором порядок приема пакетов менее важен, и возникают проблемы с маршрутизацией по WANS. Вы сказали, что хотите подключить два компьютера к «Интернету», предположительно, с перемещением конечных точек и т. Д. Единственный способ - использовать центральный сервер в качестве каталога register /. Если каждая конечная точка также является веб-службой или что-то еще и периодически регистрирует свой текущий IP-адрес и имя, то другая конечная точка может искать IP-адрес другого, используя эту услугу. (может размещать ваш собственный DNS-сервер и кодировать конечную точку для регистрации в этом DNS?)

Одна из проблем заключается в том, что даже если у вас есть IP-адрес, что один или несколько узлов находятся за брандмауэром или NAT-маршрутизатором? Вам нужно будет разместить сервер для прокси-трафика. Лучший пример - SKYPE - посмотрите, как он работает, он документирован, очень интересен.

simplist ответ может быть прыгать на спине на существующую службе, такие как посыльные, скайп, битрейт поток и т.д.

Simon

2

Возможным решением для вас использовать dynamic DNS службы.

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

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

-2

Многоадресная рассылка также является возможным решением. Это, безусловно, возможно в корпоративной сети

1

Если компьютеры работают под управлением Windows, я бы посмотрел на использование PNRP.

2

Посмотрите на алгоритм аккорда или теста. Это оверлейная сеть (на основе DHT), в которой задействован механизм обнаружения. Это алгоритм маршрутизации P2P (Peer 2 Peer).

Смежные вопросы