P2P über NAT verbinden?
Begann ich zu erforschen die option Verbindung mit anderen mit einer p2p-Verbindung, so dass ich codiert eine einfache socket-Programmierung in JAVA für android-Geräte, in denen die Nutzer können Nachrichten einfach p2p (ich habe nicht die geringste Ahnung hat, dann NAT). Ich bekam wissen über NAT, so dass ich nun zum herstellen einer TCP-Verbindung mit einem anderen Benutzer verwendet einen server für die Entdeckung, sondern die Nutzlast übertragen wird p2p. Ich habe auch geschaut bei XMPP(eine sehr gute und detaillierte Erklärung, wie Protokoll arbeitet, ist hier) und UPnP aber ich weiß nicht, wie man diese umsetzen kann.
Andere interessante Frage, die sich stellt, ist von BitTorrent, weil Sie arbeiten können, auf jedem Gerät und sogar hinter einem NAT. Ich bin nicht in der Lage zu bekommen, eine Erklärung, wie BitTorrent funktioniert.
Habe ich recherchiert, eine Menge, aber ich bin stecken geblieben.
Meine Fragen sind:
- Eine detaillierte Erklärung zu BitTorrent(wie hiernicht, wie torrents funktionieren) und wie ist es in der Lage zu arbeiten, um NAT ?
- Gibt es einen Weg, um einen NAT-Eintrag programmgesteuert ?
- Ist socket-Programmierung ausreichend für p2p ?
- Wie schwierig ist es, erstellen Sie Ihre eigenen Protokoll-und wie kann ich eine bauen ?
- Wenn die beiden Geräte D1 und D2 miteinander kommunizieren wollen p2p und Sie wissen, einander die IP. D1 sendet eine Anfrage an D2 und das kann nicht durch die D2-NAT, aber es sollte einen Eintrag erstellt in D1 NAT. Also wenn D2 zu senden versucht etwas D1 NAT entdecken sollte ein Eintrag mit D2 IP. Dann, warum ist das Paket nicht zugelassen ist ?
InformationsquelleAutor der Frage user3439988 | 2015-05-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Aussage sieht man davon ausgehen, dass bittorrent braucht volle Konnektivität zu bedienen.
Dass ist falsch.
Hinter einem NAT-Gerät, das Sie noch in der Lage sein zu etablieren ausgehende TCP-verbindungen. Die in der Regel ausreichend für bittorrent, solange es gibt auch andere, non-Len (Len oder aber richtig port-forwarded) clients im Netzwerk annehmen kann eingehende Anfragen.
NAT hat keine Auswirkungen auf die Flussrichtung der Daten, da die verbindungen sind bi-direktional, sobald Sie niedergelassen sind. Es ist nur problematisch für den ersten Verbindungsaufbau.
Dieser funktioniert perfekt für bittorrent, weil bittorent kümmert sich nicht von dem bestimmten Knoten Sie Ihre Daten erhalten.
Obwohl eine bessere Konnektivität in der Regel keine Verbesserung der Leistung.
Wenn die Identität des Knotens Angelegenheiten oder eins-zu-eins-übertragungen sind ein wichtiger use-case, dann werden andere p2p-Protokolle in der Regel versuchen NAT-traversal zuerst, und wenn das fehlschlägt, verlassen Sie sich auf 3rd-party-Knoten die Weiterleitung von Datenverkehr zwischen diesen Knoten, die nicht miteinander direkt.
Zusätzlich IPv6-Unterstützung wird entscheidend in der Zukunft zu wahren Ende-zu-Ende-Verbindung, da mehr und mehr ISPs beginnen, roll-out carrier-grade-NAT für IPv4, während IPv6 wird noch nicht Len
InformationsquelleAutor der Antwort the8472
Eins muss klar sein, dass 100% P2P-zwischen aller Art von NAT ist unmöglich, gerade jetzt. Es gibt keinen praktischen Weg, um P2P-verbindungen zwischen **Symmetrische und Symmetrische/PRC NAT. In diesem Szenario Verbindung wird hergestellt durch einen relay-server genannt, DREHEN.
Beantworte ich von deiner 2. Frage, weil ich weiß nicht viel über den ersten.
2) ja. Senden Sie ein Paket durch Ihre NAT, und es wird eine Zuordnung zwischen dem internen IP:Port auf Ihrem NAT-externe IP:Port. Sie können wissen, dass diese externen IP:Ports durch senden eines stun-Anfrage. Beachten Sie, dass diese Technik nicht funktioniert, für die Symmetrischen NAT.
3)ja-socket-Programmierung ausreichend für p2p.
4)Warum brauchen Sie ein Protokoll, wenn es bereits vorhanden ist mehrere. ICE-Protokoll wird heute am besten für NAT-traversal und ich glaube nicht, es war einfach zu erstellen. UPnP und NAT-PMP ist wirklich anfällig in Bezug auf Sicherheit.
5)ich denke, was passiert ist in der Regel NAT-Blöcke unbekannten Pakete an. Also, wenn D1 sendet ein Paket an D2, seine NAT blockiert alle hereinkommenden Pakete von D1s IP:Port. Das ist der Grund, warum der Verbindungsaufbau schlägt fehl. Sie haben zu beschäftigen, Loch-Stanz-Technik für D1 und D2 erfolgreich zu etablieren P2P-Konnektivität.
**Durch das symmetrische NAT ich meine symmetric NAT mit zufälligen port-Zuweisung.
InformationsquelleAutor der Antwort Tahlil
Es ist ein Papier auf "Peer-to-Peer Communication Across Network Address Translators", die beschreibt, UDP hole punching Methode und erweitert Sie werden über TCP verwendet als gut.
Natürlich, Sie brauchen immer einen relay-server für die Fälle, in denen lochen wird nicht unterstützt.
InformationsquelleAutor der Antwort Fardin
Neueren Versionen von BitTorrent verwenden µTPdie geschichtet ist über UDP, nicht TCP. µTorrent nutzt eine private Erweiterung (
ut_holepunch
), führt UDP-hole-punching, die meisten anderen Implementierungen nicht stören (mit der bemerkenswerten Ausnahme von Tixati).Einigen NAT-Routern zu akzeptieren port-Weiterleitung von Anfragen, wobei entweder der uPNP oder die PMP Protokoll. Ob dies unterstützt wird, hängt von der jeweiligen Marke von router und dessen Konfiguration.
Ja, der socket-Programmierung ist genug für P2P.
Schwer zu beantworten. Ich schlage vor, Sie Lesen die fertige und kommentierte BitTorrent-Spezifikation für einen start.
Ja, das ist das Prinzip hinter UDP hole punching.
InformationsquelleAutor der Antwort jch