2016-05-21 25 views
5

Ich weiß über NAT Traversal und über STUN, TURN und ICE und seine Verwendung. Ich möchte wissen, ob diese in Peer-to-Peer-Filesharing-Anwendung wie BitTorrent implementiert sind. Ob Tracker Peers hinter NATs die Kommunikation untereinander erleichtern, indem sie direkte Verbindungen mithilfe von STUN oder Relay über TURN herstellen. Im Fall von Distributed Hash Table (DHT) wie würde ein Peer mit anderen Peer hinter NAT kommunizieren?Wie NAT-Traversal bei Peer-to-Peer-Protokollen wie Bittorrent funktioniert.

Antwort

9

BitTorrent muss keine Verbindung zu einem bestimmten Mitglied in einem Schwarm herstellen, es ist kein P2P-Chat-Protokoll, bei dem zwei spezifische Endpunkte miteinander kommunizieren möchten. Alles was es interessiert, ist, dass das Verbindungsdiagramm des Schwarms einen ausreichend hohen Verbindungsgrad aufweist. Mit anderen Worten ist es etwas wünschenswert, Clients, die hinter NATs stehen, um miteinander zu sprechen, wünschenswert zu machen, aber nicht bis zu dem Punkt, an dem wichtige Ressourcen wie die Weiterleitung von Daten für dieses Ziel ausgegeben werden. Scheitern ist eine Option.

So verwendet es nicht sip/turn/etc.

Verschiedene Clients verwenden eine Kombination der folgenden Ansätze Konnektivität für die Massenverkehrsverbindungen zu verbessern:

  • nat-PME/pcp Verhandlungen mit dem Gateway
  • Port Wiederverwendung Socket-Optionen Endpunktes unabhängig zu nutzen (EIM) NAT-Zuordnungen
  • die weitgehend undokumentierte Erweiterung ut_holepunch, die gegenseitig erreichbare Schwarmmitglieder anstelle von Stunservern verwendet.
  • ein optionales UDP-basiertes Transportprotokoll (μTP), das in Kombination mit den vorherigen Punkten verwendet werden kann. Generell ist nat traversal mit udp
  • einfacher zu erreichen. IPv6-Fähigkeits-Signalisierung, die es Clients prinzipiell erlaubt, ihre Verbindungen zu aktualisieren und dann über PEX/DHT über Peers von v6 zu klatschen.

Bei der DHT werden nur die ersten beiden Punkte (Gateway Negotiation und Port Reuse) verwendet. Der Overhead des Versuches, nat traversal für einen einzelnen Anfrage-Antwort-Zyklus zu versuchen, wäre> 100% und ist es nicht wert.