У меня есть некоторая путаница по поводу переадресации портов против NAT. Я знаю проблемы, которые NAT вызывает для P2P, и что существуют некоторые решения для него (STUN , TURN и т.д.), Которые требуют, чтобы сервер ретрансляции установил прямые соединения между узлами.

Является ли переадресация портов альтернативой STUN/TURN отношении проблемы NAT? Могут ли два пира за NAT, у которых оба переадресованных порта, напрямую соединяться по TCP? Например, я хочу разработать приложение и предпочел бы, чтобы сервер не работал круглосуточно для ретрансляции соединений, но вместо этого, если бы одноранговые узлы могли выполнять переадресацию портов, а затем они могли бы напрямую общаться друг с другом.

2 ответа2

0

Два пира за NAT, использующие DNAT (или "переадресацию портов"), технически больше не отстают от NAT .

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

Конечно, тот факт, что NAT блок искажает пакеты, создает много проблем, но если вы не включите IP-адреса и порты в свои сообщения, все будет в порядке.

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

0

Это довольно сложно ... Кроме того, исходя из того, как это было с переполнением стека, я предполагаю, что вы хотите знать это с точки зрения программирования и того, что вам нужно сделать для общения между клиентами.

... NAT - это процесс получения одного (или нескольких) IP-адресов на одной стороне сети, а затем переадресация любого порта на любом из этих адресов на любой внутренний адрес.

Большинство устройств NAT имеют правило по умолчанию, разрешающее все исходящие и разрешающее только именованные входящие.

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .