Se a outra parte puder configurar o encaminhamento de porta (ou não usar NAT), tudo estará concluído. Uma conexão TCP é sempre capaz de duplex.
Se isso não for possível, você pode recorrer a " Hole Punching ", uma técnica que engana os dispositivos NAT para permitir um conexão "de entrada", com a ajuda de um terceiro universalmente acessível.
Extraído do artigo vinculado, o princípio básico:
-
- O peer A envia um SYN para o par B
- O peer B envia um SYN ao par A
-
- Quando o NAT-a recebe o SYN de saída do Peer A, ele cria um mapeamento em sua máquina de estado.
- Quando o NAT-b recebe o SYN de saída do Ponto B, ele cria um mapeamento em sua máquina de estado.
-
Ambos SYN cruzam em algum lugar ao longo do caminho da rede e, em seguida:
- SYN do par A alcança NAT-b, SYN do par B atinge NAT-a
- Dependendo do tempo desses eventos (onde na rede o SYN se cruza), pelo menos um dos NAT permitirá que o SYN entrante, e mapeá-lo para o par de destino interno
-
Após o recebimento do SYN, o par envia um SYN + ACK de volta e a conexão é estabelecida.