O método usado pela maioria dos programas P2P é o de Perfuração , onde um servidor central é usado para passar informações entre as duas partes quanto às portas utilizadas. Usando essa informação, as partes podem estabelecer uma conexão direta números de porta válidos para que o firewall ou roteador aceite e encaminha os pacotes recebidos para a porta aberta.
Acredito que sua pergunta se relacione mais com o UDP sobre NAT, sem interferência servidor comum, que é o problema geral de NAT traversal . O problema aqui é que o dispositivo NAT não possui um método automático de determinar o host interno para o qual os pacotes de entrada são destinados, desde a origem parte não sabe o número da porta em que a outra parte está escutando.
Vários algoritmos foram desenvolvidos para resolver esse problema de Perfuração UDP . Alguns algoritmos de perfuração UDP dependem de ambas as partes usando as mesmas portas. Outros algoritmos usam uma conexão TCP temporária para passar as informações necessário para estabelecer a conexão UDP.
Outro Perfuração UDP técnicas não requerem nenhuma informação de porta, mas usam algoritmos onde ambas as partes começarão a enviar umas para as outras, usando várias tentativas, e aceitando o fato de que pelo menos os primeiros pacotes serão perdidos. Após a primeira tentativa falhada, o dispositivo NAT um registro de ter enviado um pacote para a outra máquina, e assim deixará passar quaisquer pacotes provenientes deste endereço IP e número da porta. O algoritmo para isso é detalhado no artigo da Wikipédia acima.
Isso se baseia no fato de que, se um pacote é recebido de um endereço para o qual uma conexão foi tentada anteriormente, mesmo que seja em um porto diferente daquele através do qual a parte local tentou estabelecer a conexão, então ele irá mudar para a porta certa. Isso permite que o UDP pacote passa pelo NAT, já que o mapeamento do NAT já foi estabelecido pela parte local que está tentando enviar.
O problema com todos esses métodos é que as tecnologias de conversão de endereço NAT não são padronizados. Como resultado, os métodos usados para a passagem NAT são geralmente proprietários e mal documentados, e se eles funcionarão ou não varia entre roteadores de diferentes marcas e modelos.
O IETF tem um grupo de trabalho inteiro definindo o que os dispositivos NAT devem fazer para fazer a menor bagunça: COMPREENDER Existem vários métodos para obter dados através de dispositivos NAT, alguns listados na página BEHAVE. Há também STUN , UPnP , NAT-PMP e Teredo .