
Comecei a explorar a opção de conectar com outros usando uma conexão p2p, então codifiquei um programa de soquete simples em JAVA para dispositivos Android no qual o usuário no qual os usuários podem compartilhar mensagens simples p2p (não tinha ideia sobre NAT então). Conheci o NAT, então agora preciso estabelecer uma conexão TCP com outro usuário que usa um servidor para descoberta, mas a carga útil é transferida p2p. Também dei uma olhada no XMPP(uma explicação muito boa e detalhada de como o protocolo funciona éaqui) e UPnP, mas não sei como implementá-los.
Outra questão interessante que surge é do BitTorrent porque eles podem funcionar em qualquer dispositivo e até mesmo atrás de um NAT. Não consigo obter nenhuma explicação sobre como funciona o BitTorrent.
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 ele consegue contornar 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 construir um?
- Se dois dispositivos D1 e D2 desejam se comunicar p2p e conhecem o IP um do outro. D1 envia uma solicitação para D2 e não consegue passar pelo NAT do D2, mas deve haver uma entrada criada no NAT do D1. Portanto, quando D2 tenta enviar algo, o NAT de D1 deve descobrir uma entrada com o IP de D2. Então por que o pacote não é permitido por ele?
Editar:
Um dos métodos discutidos na rede para contornar o NAT é usar o SIP. Isso funcionou para o Bleep, mas não consigo encontrar nenhuma implementação disso na rede. Alguém poderia explicar como o SIP realmente funciona.