2015-09-10 2 views
1

Я ищу имя протокола и пример кода, который позволяет передавать IP/портовые соединения для установки немедленного P2P после введения через сервер.Соедините розетки сразу после введения через сервер

Простой пример:

Вы и я, и начать чат программ, которые подключаются к chatintroduce.com (вымышленный сервер). Я посылаю вам «Привет! Хотите поболтать?» сообщение. Он не отправляется. Вместо этого моя чат-программа сообщает chatintroduce, чтобы отправить чат-программу запрос на соединение. Вы отвечаете на приглашение, и ваша программа чата сообщает chatintroduce, чтобы бронировать соединение. Chatintroduce устанавливает первоначальную двустороннюю связь между нами. Теперь этот последний шаг важен, chatintroduce выпускает контроль, и наши две чат-программы теперь разговаривают напрямую друг с другом без какого-либо трафика через chatintroduce.

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

Мне нужно знать, какие условия поиска использовать для поиска соответствующей технологии. Имя RFC было бы достаточно. Я искал дни без успеха.

ответ

0

Я думаю, что вы ищете пробивку отверстий TCP/UDP, которая обычно координирует соединение P2P с использованием STUN-сервера для определения «возможностей» брандмауэров (например, является ли он полным конусом nat? Симметричным?).

https://en.wikipedia.org/wiki/Hole_punching_(networking)

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

Обратите внимание, что иногда невозможно установить соединение без посредника.

0

Что вы ищете - это протокол ICE. RFC 5245. Этот протокол используется для подключения двух одноранговых узлов через обход NAT. Для этого есть несколько библиотек с открытым исходным кодом, а также некоторые собственные библиотеки. Вы можете искать google с внедрением ICE.

Вам также необходимо ознакомиться с некоторыми дополнительными протоколами. Они используются с протоколом ICE. Это STUN и TURN.

Для некоторых случаев вы не можете заставить P2P звонить 100% времени. Вам нужно будет использовать сервер ретрансляции. Например, если комбинация NAT двух сверстников симметрична или симметрична/PRC. Этот сервер ретрансляции называется сервером TURN.

Некоторые методы, такие как перенаправление портов и перфорация отверстий TCP/UDP, помогут вам увеличить тарифы P2P.

Для получения дополнительной информации о том, какая комбинация NAT потребует сервера ретрансляции, а какие нет, см. Это answer.

0

Спасибо. Я буду смотреть дальше в ICE, STUN, TURN и дырокол. Я также нашел n2n, который выглядит почти точно, что я хотел.

https://github.com/meyerd/n2n 
http://xmodulo.com/configure-peer-to-peer-vpn-linux.html 

С n2n создается VPN с суперузлом, который знает все остальные узлы. Но после того, как будут сделаны интродукции, суперузел может отсутствовать. Это было именно то, что я хотел. Надеюсь, он работает на разных платформах (Linux, MacOS, Windows). Снова, я все еще исследую перед реализацией, поэтому ваш совет был очень важен для меня.

Спасибо.

0

Используйте PJNATH. Его открытый источник.

http://www.pjsip.org/pjnath/docs/html/

Существует не так много с открытым исходным кодом на NAT Traversal. Насколько я знаю, PJNATH - это хорошо.

Для сервера вы можете использовать сервер STUN и TURN с открытым исходным кодом Google.