Мой провайдер предоставляет мне локальный статический IP-адрес. Как я могу установить соединение с другим компьютером в Интернете без публичного IP-адреса? Я просто хочу сделать простое приложение, которое может отправлять данные туда и обратно на другой компьютер за пределами моей локальной сети. Я немного знаю о переадресации портов, но, к сожалению, мой провайдер не может переадресовать порт для меня Действительно ли это возможно без переадресации портов? Как? Благодарю.

1 ответ1

1

Если другая сторона может настроить переадресацию портов (или не использует NAT), все готово. TCP-соединение всегда поддерживает дуплекс.

Если это невозможно, вы можете прибегнуть к « Hole Punching », технике, которая обманывает устройства NAT, позволяя "входящему" соединению, с помощью общедоступной третьей стороны.

Взято из связанной статьи, основной принцип:

    • Узел A отправляет SYN узлу B
    • Узел B отправляет SYN узлу A
    • Когда NAT-a получает исходящий SYN от узла A, он создает отображение в своем автомате.
    • Когда NAT-b получает исходящий SYN от узла B, он создает отображение в своем автомате.
  1. Оба SYN пересекаются где-нибудь вдоль пути сети, затем:

    • SYN с однорангового узла A достигает NAT-b, SYN с однорангового узла B достигает NAT-a
    • В зависимости от времени этих событий (где в сети пересекается SYN), по крайней мере один из NAT пропустит входящий SYN и сопоставит его с внутренним одноранговым узлом назначения.
  2. После получения SYN одноранговый узел отправляет обратно SYN+ACK, и соединение установлено.

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