Verbindung von P2P über NAT?

Ich habe angefangen, die Möglichkeit der Verbindung mit anderen über eine P2P-Verbindung zu untersuchen. Deshalb habe ich in JAVA ein einfaches Socket-Programm für Android-Geräte programmiert, in dem die Benutzer einfache Nachrichten über P2P austauschen können (ich hatte damals keine Ahnung von NAT). Ich habe etwas über NAT erfahren, daher muss ich jetzt eine TCP-Verbindung mit einem anderen Benutzer herstellen, der einen Server für die Erkennung verwendet, aber die Nutzlast wird p2p übertragen. Ich habe mir auch XMPP angeschaut (eine sehr gute und detaillierte Erklärung, wie das Protokoll funktioniert, istHie) und UPnP, aber ich weiß nicht, wie ich sie implementieren soll.

Eine weitere interessante Frage, die sich stellt, ist BitTorrent, weil sie auf jedem Gerät und sogar hinter einem NAT funktionieren können. Ich kann keine Erklärung dafür bekommen, wie BitTorrent funktioniert.

ch habe viel recherchiert, aber ich stecke fes

Meine Fragen sind:

Eine detaillierte Erklärung von BitTorrent (wieHie, nicht wie Torrents funktionieren) und wie ist es in der Lage, NAT zu umgehen? Gibt es eine Möglichkeit, einen NAT-Eintrag programmgesteuert vorzunehmen? Reicht die Socket-Programmierung für P2P aus?Wie schwierig ist es, ein eigenes Protokoll zu erstellen und wie kann ich eines erstellen?Wenn zwei Geräte D1 und D2 p2p kommunizieren möchten und die IP des anderen kennen. D1 sendet eine Anfrage an D2, die nicht über das NAT des D2 gelangen kann. Es sollte jedoch ein Eintrag in D1s NAT erstellt werden. Wenn D2 also versucht, etwas zu senden, sollte D1s NAT einen Eintrag mit der IP von D2 finden. Warum ist das Paket dann nicht erlaubt?