Самые важные основы P2P

Я читал на www, но просто не могу получить самые важные основы P2P.

Схема такая:

[peer1]<-->[dsl-router1]<-->[central server]<-->[dsl-router2]<-->[peer2]

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

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

Как на самом деле передать некоторые данные от узла 1 к узлу 2 и наоборот, не пропуская эти данные через центральный сервер?

(и в худшем случае между пиром и dsl-маршрутизатором есть беспроводной маршрутизатор)


person jondinham    schedule 30.08.2012    source источник
comment
Я предполагаю, что маршрутизаторы являются сетевыми шлюзами на стороне пользователей, верно? Или это какая-то конструкция анонимайзера?   -  person Emil Vikström    schedule 30.08.2012
comment
да, эти маршрутизаторы - DSL-маршрутизаторы, поставляемые провайдером.   -  person jondinham    schedule 30.08.2012
comment
Вы можете использовать UPnP или что-то подобное от клиента, чтобы открыть порт из глобальной сети в локальную сеть. Раньше у меня работала передача данных UDP. Но это нестандартная область.   -  person ActiveTrayPrntrTagDataStrDrvr    schedule 30.08.2012


Ответы (2)


Есть два основных способа сделать это. Новый способ — использовать IGDP (открытие порта через uPnP). Это очень хорошо описано здесь:

http://www.codeproject.com/Articles/13285/Использование-UPnP-for-Programmatic-Port-Forwardings-and-N

Если ни на одном из двух узлов нет маршрутизатора, поддерживающего uPnP, другой альтернативой является пробивание отверстий TCP, что не идеально, но на практике работает достаточно хорошо. Это описано здесь:

http://www.brynosaurus.com/pub/net/p2pnat/

person jleahy    schedule 30.08.2012

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

В другом случае, когда оба одноранговых узла имеют только локальный адрес (например, 192.168.0.2), назначенный их компьютерам, тогда будет довольно сложно пройти через маршрутизаторы; клиенты за маршрутизаторами по большей части недоступны извне, если только они не инициировали запрос. Затем одним из решений проблемы является перенаправление портов. Выполняя переадресацию портов либо с помощью явно написанных правил, либо с помощью UPnP, некоторые порты на одноранговом компьютере становятся доступными для общедоступного Интернета, как в первой ситуации, когда вместо некоторых портов открывается весь компьютер.

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

person Alexander Chen    schedule 30.08.2012