За NAT к подключению за NAT - PullRequest
       163

За NAT к подключению за NAT

9 голосов
/ 22 февраля 2011

Я столкнулся с интересной проблемой.В основном у меня есть 2 мобильных телефона, которые оба находятся за NAT.Я хочу обмениваться данными напрямую между двумя устройствами по протоколу UDP.

Я знаю, что если я инициирую соединение телефонов с сервером, то я могу передать данные обратно по этому соединению на телефон (т.е. отправить их обратно стот же порт, который получил сообщение на тот же ip и порт, с которого оно было получено).Так что я легко могу общаться между двумя устройствами, подключив оба телефона к серверу.Затем отправка данных на сервер и их перенаправление на телефоны.Это позволяет обойти любые проблемы с обходом NAT, с которыми я могу столкнуться.

Однако я бы предпочел просто использовать сервер, чтобы направить 2 устройства друг на друга, а затем позволить им обмениваться данными напрямую.Как бы я поступил так?Разве это возможно без использования чего-то вроде uPnP?

Любая помощь будет сильно оценена!

Редактировать : я нашел этот документ http://www.brynosaurus.com/pub/net/p2pnat/ Это похоже на шпилькуперевод - это то, что мне нужно, но он не выглядит широко поддерживаемым.Интересно, насколько хороша поддержка интернет-провайдера для UPnP?

Ответы [ 2 ]

4 голосов
/ 22 февраля 2011

То, что вы ищете, это пробивание отверстий UDP, см. Например. http://en.wikipedia.org/wiki/UDP_hole_punching

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

4 голосов
/ 22 февраля 2011

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

...