Как скайп и все эти другие p2p-программы работают без блокировки? - PullRequest
1 голос
/ 27 апреля 2011

Я пытался создать приложение типа p2p.Моя идея состояла в том, чтобы просто создать программу типа веб-сервера, которая прослушивает определенный сокет.Однако, если я попытаюсь сделать это из любой точки за пределами моей локальной сети, запросы никогда не попадут в прослушивающий сокет.Как другие программы P2P обходят это? Я использую те же порты, что и Skype, и другие программы (8080)

Ответы [ 4 ]

1 голос
/ 27 апреля 2011

Существует такая вещь, как UPnP, которую используют некоторые приложения. Я думаю, что Skype играет много хитростей, чтобы облегчить использование с брандмауэрами. Он даже будет использовать порт 80, так как он большую часть времени открыт. Большинство p2p-приложений, которые я видел, требуют правильной настройки брандмауэра / NAT.

0 голосов
/ 05 июля 2011

Эта ссылка объясняет методику «дырокола» более подробно:

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

Отрывок:

3.2 Создание одноранговых сеансов

Предположим, что клиент "A" хочет установить сеанс UDP напрямую с клиентом "B".Перфорация отверстий происходит следующим образом:

«A» изначально не знает, как достичь «B», поэтому «A» просит «S» помочь установить сеанс UDP с «B».

«S» отвечает на «A» сообщением, содержащим открытые и закрытые конечные точки «B».В то же время «S» использует свой UDP-сеанс с «B» для отправки «B» сообщения запроса соединения, содержащего открытые и закрытые конечные точки «A».Как только эти сообщения получены, «A» и «B» знают общие и частные конечные точки друг друга.

Когда «A» получает открытые и частные конечные точки «B» от «S», запускается «A»отправка пакетов UDP на обе эти конечные точки, а затем «блокировка» в зависимости от того, какая конечная точка сначала выдает действительный ответ от «B».Точно так же, когда «B» получает открытые и частные конечные точки «A» в перенаправленном запросе соединения, «B» начинает отправку пакетов UDP на «A» в каждой из известных конечных точек «A», блокируя в первой конечной точке, котораяработает.Порядок и время этих сообщений не являются критическими, если они асинхронные.

0 голосов
/ 28 апреля 2011

Skype использует порт 80 или 4 ** (не помню), если он не может подключиться к порту 8080.

У меня была проблема с ним, когда я пытался запустить локальный экземпляр Apache, когда Skype уже работал.

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

Может быть, вы могли бы использовать подобный подход для вашего приложения?

0 голосов
/ 28 апреля 2011

Есть много хитростей для обхода NAT и брандмауэров.

Если обе стороны подключены к внешнему центральному серверу, они могут обмениваться IP / портами друг с другом через этот сервер в качестве прокси. Если сторона A затем пытается подключиться к стороне B и блокируется, они могут поменяться ролями, а сторона B может попытаться подключиться к стороне A. Это само по себе пройдет через многие ситуации, если обе стороны не находятся за NAT / межсетевыми экранами.

Существуют технологии на основе UDP и TCP, позволяющие пробивать дыры в NAT, чтобы разрешить трафик, который обычно блокируется.

Некоторые маршрутизаторы поддерживают uPNP для динамической настройки правил переадресации портов.

...