В каждом сетевом сценарии пробивание отверстий по протоколу TCP работает аналогично пробиванию отверстий по протоколу UDP. Например, если два одноранговых узла A и B находятся за разными NAT, первый пакет SYN каждого однорангового узла, отправленный другому одноранговому узлу, открывает дыру, связанную с его публичным адресом в соответствующем NAT. Если первый SYN-пакет A для B достигает NAT B, прежде чем первый SYN-пакет B для A достигает NAT B, NAT B считает пакет SYN A незапрошенным и отбрасывает его. Однако впоследствии первый SYN-пакет B может успешно проходить через NAT A, поскольку NAT A распознает открытый адрес B в качестве пункта назначения исходящего сеанса, который инициировал A.
Так что да. Это возможно для TCP дырокола. Я не понимаю, почему кто-то может думать иначе.
Кроме того, не могли бы вы создать этот тип поведения вручную? Он не должен зависеть от какого-либо конкретного протокола, если все шаги одинаковы для сбора всей необходимой информации.
Как правило, перфорация TCP (3.2.1) происходит следующим образом:
Клиенты: A, B
Сервер: S
• A использует свое соединение с S для запроса соединения S
с Б.
• S отвечает на A с частными и публичными адресами B,
и одновременно отправляет адреса А на Б.
• А и В асинхронно устанавливают исходящее соединение на
соблазнов (отправка пакетов SYN) друг другу и
частные адреса, из того же порта, который они использовали
зарегистрироваться в С. В то же время они слушают
TCP-входящие попытки подключения по локальному TCP
порты.
• A и B ожидают ответа SYN-ACK на их
собираются пакеты SYN или запрос на входящее соединение
(SYN пакет). Если соединение не удается, узел может повторить
до максимального периода ожидания.
• После завершения процесса трехстороннего рукопожатия,
сверстники аутентифицируют друг друга. Если подлинность-
В этом случае узлы закрывают это соединение и ждут, пока
другое соединение успешно аутентифицировано.
будет успешно использовано первое аутентифицированное соединение
для передачи данных TCP.
(я знаю, что это не слишком хороший ответ, но места для комментариев было недостаточно).