Conectando P2P sobre NAT?
Comecei a explorar a opção de conectar-se a outras pessoas usando uma conexão p2p, então codifiquei um programa de soquete simples em JAVA para dispositivos Android nos quais os usuários podem compartilhar mensagens simples p2p (então eu não tinha ideia do NAT). Como conheci o NAT, agora preciso estabelecer uma conexão TCP com outro usuário que use um servidor para descoberta, mas a carga útil é transferida p2p. Também examinei o XMPP (uma explicação muito boa e detalhada de como o protocolo funcionaaqui) e UPnP, mas não sei como implementá-los.
Outra questão interessante que se coloca é o BitTorrent, porque eles podem funcionar em qualquer dispositivo e até mesmo atrás de um NAT. Não consigo obter nenhuma explicação de como o BitTorrent funciona.
Eu pesquisei muito, mas estou preso.
Minhas perguntas são:
Uma explicação detalhada do BitTorrent (comoaqui, não como os torrents funcionam) e como é possível solucionar o NAT?Existe uma maneira de fazer uma entrada NAT programaticamente?A programação de soquete é suficiente para p2p?Quão difícil é criar seu próprio protocolo e como posso criar um?Se dois dispositivos D1 e D2 quiserem comunicar p2p e eles souberem o IP um do outro. D1 envia uma solicitação para D2 e isso não pode passar pelo NAT do D2, mas deve haver uma entrada criada no NAT do D1. Portanto, quando o D2 tenta enviar algo, o NAT do D1 deve descobrir uma entrada com o IP do D2. Então, por que o pacote não é permitido por ele?