Frage

Von einem Joels Beitrag auf Copilot:

Direkte Verbindung!Wir haben immer alles getan, was wir können, um sicherzustellen, dass der Fog Creek Copilot in jeder Netzwerksituation eine Verbindung herstellen kann, egal welche Firewalls oder NATs vorhanden sind.Um dies zu erreichen, stellen beide Parteien ausgehende Verbindungen zu unserem Server her, der den Verkehr in ihrem Namen weiterleitet.Nun, in vielen Fällen ist dies nicht notwendig.Version 2.0 tut also etwas ziemlich Kluges:Es wird die anfängliche Verbindung über unsere Server eingerichtet, sodass Sie sofort mit 100% Zuverlässigkeit verbunden sind.Aber sobald Sie alle verbunden sind, sucht es leise im Hintergrund nach einer Möglichkeit, eine direkte Verbindung herzustellen.Wenn es nicht kann, keine große Sache:Sie werden einfach weiter über unseren Server geleitet.Wenn Sie eine direkte Peer-to-Peer-Verbindung herstellen können, verschiebt sie Ihre Daten still in die direkte Verbindung.Sie werden nichts bemerken, außer wahrscheinlich viel schneller zu kommunizieren.

Wie ändern sie die Serververbindung in eine P2P-Verbindung?

War es hilfreich?

Lösung

Es ist ziemlich knifflig und interessant.Ich bin sicher, dass ich einige Details falsch habe, aber die Übersicht sieht so aus:

Die Programme können bereits über Joels Server miteinander kommunizieren, sodass sie untereinander und mit Joels Server Informationen austauschen können.Darüber hinaus hat Joel ihre externen IP-Adressen und sie geben Joel Informationen über ihre internen IP-Adressen.

Sie beschließen, diese Lochertechnik auszuprobieren.Computer A initiiert eine TCP-Verbindung mit Computer B unter Verwendung der externen IP-Adresse von B.Es geht nicht durch, aber es teilt dem Router von A mit, dass er eingehende Pakete von B auf einem bestimmten Port zulassen muss.

Computer B macht das Gleiche, aber seine Nachricht gelangt zu A, da der Router von A eine Port/IP-Kombination geöffnet hat, die mit dem übereinstimmt, was B gesendet hat (hier passiert eine Art Port-Magie – das ist nicht trivial, aber machbar).

Der Router von B merkt sich, dass B über einen bestimmten Port und eine bestimmte IP eine Verbindung mit A initiiert hat, und so fließen die Pakete von A nun auch korrekt an B vorbei an ihrem Router vorbei.

Eigentlich ist es ziemlich einfach, aber die Implementierung enthält Details, insbesondere darüber, wie Ports neuen TCP-Verbindungen zugewiesen werden und wie NAT-Router funktionieren typischerweise Umgang mit TCP-Anfragen und deren Zuordnung zu externen Ports.Diese Details sind der interessante und schwierige Teil.

-Adam

Andere Tipps

Es gibt eine Technik namens „Lochen„Das funktioniert gut mit „Cone“ NAT (Cone ist eine technische Routerfamilie).Das ist keine 100 % sichere Technik, heute funktioniert sie gut mit UDP auf etwa 80 % des Routers.

Es gibt einige Implementierungen der Bibliothek, um das Lochen zu realisieren: BETÄUBEN (Wikipedia)

Ich glaube, die einfache Version besteht darin, dass sie die Serververbindung aufgeben und durch die P2P-Verbindung ersetzen.

Etwas in der Art:

  1. Maschine1 stellt eine Verbindung zu den Servern von Copilot her.
  2. Maschine1 stellt eine Verbindung zu den Servern von Copilot her.
  3. Maschine1 stellt eine Verbindung zu den Servern von Copilot her.
  4. Anschließend stellt Maschine2 eine Verbindung her und beginnt mit der Bildschirmfreigabe.
  5. Maschine2 öffnet einen Port, zu dem Maschine1 eine Verbindung herstellen soll.
  6. Maschine1 versucht, eine Verbindung zum jetzt offenen Port auf Maschine2 herzustellen.

Wenn diese Verbindung hergestellt ist:

  1. Die Verbindung zu den Servern von Copilot wird unterbrochen.
  2. Die Datenübertragung erfolgt stattdessen über die direkte (P2P)-Verbindung zwischen den beiden Maschinen.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top