Мой провайдер предоставляет мне локальный статический IP-адрес. Как я могу установить соединение с другим компьютером в Интернете без публичного IP-адреса? Я просто хочу сделать простое приложение, которое может отправлять данные туда и обратно на другой компьютер за пределами моей локальной сети. Я немного знаю о переадресации портов, но, к сожалению, мой провайдер не может переадресовать порт для меня Действительно ли это возможно без переадресации портов? Как? Благодарю.
1 ответ
1
Если другая сторона может настроить переадресацию портов (или не использует NAT), все готово. TCP-соединение всегда поддерживает дуплекс.
Если это невозможно, вы можете прибегнуть к « Hole Punching », технике, которая обманывает устройства NAT, позволяя "входящему" соединению, с помощью общедоступной третьей стороны.
Взято из связанной статьи, основной принцип:
- Узел A отправляет SYN узлу B
- Узел B отправляет SYN узлу A
- Когда NAT-a получает исходящий SYN от узла A, он создает отображение в своем автомате.
- Когда NAT-b получает исходящий SYN от узла B, он создает отображение в своем автомате.
Оба SYN пересекаются где-нибудь вдоль пути сети, затем:
- SYN с однорангового узла A достигает NAT-b, SYN с однорангового узла B достигает NAT-a
- В зависимости от времени этих событий (где в сети пересекается SYN), по крайней мере один из NAT пропустит входящий SYN и сопоставит его с внутренним одноранговым узлом назначения.
После получения SYN одноранговый узел отправляет обратно SYN+ACK, и соединение установлено.