Wie funktioniert Peer-to-Peer über das Internet?


14

Soweit ich weiß, gibt es keine Möglichkeit, ein Paket von außerhalb des Netzwerks an einen Computer in einem lokalen Netzwerk zu senden, es sei denn, wir kennen den vom Router verwendeten Routing-Mechanismus .

Angenommen, wir haben ein Setup, das so aussieht:

  1. Computer-A, IP 192.168.1.2 (Standardgateway 192.168.1.1)

  2. Computer-B, IP 192.168.1.3 (Standardgateway 192.168.1.1)

  3. Router-C, IP 192.168.1.1 (externe IP 1.1.1.1)

  4. Router-D (externe IP 2.2.2.2)

Computer-A, Computer-B und Router-C gehören zum selben lokalen Netzwerk. Router-D möchte Daten an Computer-A senden, kann dies jedoch nicht, ohne Router-C zu durchlaufen.

Jetzt leitet Router-C Pakete an Computer-A weiter, wenn der Zielport 1000 ist, und leitet Pakete an Computer-B weiter, wenn der Zielport 2000 ist. Das einzige Gerät, das diesen Routing-Mechanismus kennt , ist jedoch Router-C selbst! Weder Computer-A noch Computer-B wissen davon, oder?

Router-D kann also ein Paket an Computer-A senden, wenn er ein Paket über Port 1000 an Router-C sendet. Aber woher soll Router-D wissen, dass Pakete über Port 1000 gesendet werden und nicht über Port 1001?

Wie kommen Peer-to-Peer-Programme wie Bittorrent an diesem Problem vorbei? Die einzige Lösung, die ich mir vorstellen kann, besteht darin, dass Router-D das Paket über alle Ports an Router-C sendet , sodass es an Computer-A weitergeleitet wird. Gibt es jedoch eine bessere Lösung?

Antworten:


8

Ihre Verwirrung beruht auf falschen Annahmen.

Aber das einzige Gerät, das diesen Routing-Mechanismus kennt, ist sicherlich Router-C selbst! Weder Computer-A noch Computer-B wissen davon, oder?

Was, warum? Warum wurde der Router dann so konfiguriert, dass er diese Ports an diese IPs weiterleitet? Sie müssen den P2P-Client für die Verwendung eines bestimmten Ports einrichten und dann den entsprechenden Router einrichten.

Aber woher soll Router-D wissen, dass Pakete über Port 1000 gesendet werden und nicht über Port 1001?

Weil Sie den P2P-Client so konfigurieren, dass er einen bestimmten Port verwendet (Standard oder Nicht-Standard für dieses Protokoll).

Die einzige Lösung, die ich mir vorstellen kann, besteht darin, dass Router-D das Paket über alle Ports an Router-C sendet, sodass es an Computer-A weitergeleitet wird. Gibt es jedoch eine bessere Lösung?

Es ist viel einfacher als das. Wenn der Client eine Verbindung zu einem Peer herstellt, gibt er an, welchen Port er verwenden möchte, sodass der Peer die Daten an diesen Port sendet.

Hmm, aber Bittorrent verändert das Verhalten des Routers nicht richtig? Woher weiß Computer-A, dass ein Routing-Mechanismus dynamisch sein kann, wie in superuser.com/a/187190/78897 gezeigt.

Der Client wirkt sich nicht direkt auf den Router aus, aber der Router kann so konfiguriert / intelligent sein, dass er sich an das Verhalten des Clients anpasst. Sie können aktivieren UPnP sowohl im Router und Client automatisch die Verbindung zu konfigurieren und die meisten Router haben Stateful - Inspection - Fähigkeiten als Teil ihres Port-Forwarding - Mechanismus.

Zusammenfassend bedeutet dies, dass eine Verbindung dynamisch an einem zufälligen Port hergestellt werden kann und der Router dann verfolgen kann, was passiert, anstatt alles als zufällige, bedeutungslose Verbindungen anzuzeigen. Auf diese Weise kann eine Verbindung bei Bedarf weitergeleitet werden, da es sich beispielsweise um eine Antwort auf diese andere Verbindung handelt, die gerade zustande gekommen ist .

Das Problem tritt auf, wenn Sie mehrere Systeme haben, die dasselbe Programm verwenden. Wenn mehrere Systeme mit demselben Router verbunden sind, dieselbe IP-Adresse verwenden und dynamische Ports verwenden, kann dies schnell nicht mehr verwaltet werden, und es ist schwierig, wenn nicht sogar unmöglich, die ordnungsgemäße Funktion zu gewährleisten. In diesem Fall müssen statische Ports (Standard oder anderweitig) verwendet werden.


Wenn Sie ein Programm wie SmartSniff oder TCPView zum Überwachen Ihrer Verbindungen verwenden, werden Sie feststellen, dass die P2P-Verbindungen normalerweise den von Ihnen konfigurierten Port (oder den Standard für den Client) als Ziel für eingehende Verbindungen haben und entweder den Standard- oder einen benutzerdefinierten / zufälliger Port für die Quelle und umgekehrt für ausgehende Verbindungen.


Hmm, aber Bittorrent verändert das Verhalten des Routers nicht richtig? Woher weiß Computer-A, dass ein Routing-Mechanismus dynamisch sein kann, wie in superuser.com/a/187190/78897 gezeigt .
Pacerier

Port-Weiterleitung. Sie haben es vorher eingerichtet.
UtahJarhead

@Pacerier Wenn sowohl der Router als auch die p2p-App UPnP verwenden , kann die Portweiterleitung dynamisch erfolgen. In diesem Fall ändert yes Bittorrent das Verhalten des Routers.
Zero2CX

@ zero2cx, gibt es überhaupt die Möglichkeit, Peer-to-Peer-Vorgänge durchzuführen, ohne das Verhalten des Routers zu ändern?
Pacerier

@Pacerier, wenn Sie NAT (mehrere Systeme eine Verbindung Sharing) haben wollen, dann Sie müssen konfigurieren irgendwie den Router zu wissen , wo Verbindungen machen (na ja, technisch Sie konnte nur jeder jede Verbindung zu allen Ports speien haben wie Sie vorgeschlagen, aber das wäre bestenfalls schrecklich). Sie können dies statisch (IPs und Ports konfigurieren) oder dynamisch (UPnP) tun.
Synetech

3

Ihre Frage berührt das Herz des Internets und die Definition des Routings. In Ihrem Beispiel sendet Router D Daten basierend auf zwei Voraussetzungen an Computer A:

  • Es wurde angewiesen, Daten an Computer A zu senden.
  • Es werden bereits Daten von Computer A verarbeitet.

In Ihrem Szenario wird anscheinend die erste Option angenommen: Router D möchte an Computer A senden. Aber wie gelangt er dorthin? Dies geschieht durch die Verwendung von Routingtabellen, die von Routern untereinander gemeinsam genutzt werden.

Router C sendet regelmäßig Aktualisierungen an alle Router, die über das Netzwerk "192.168" "Bescheid wissen (einschließlich Router D") ignorieren Sie das.) Router D weiß also bereits, dass Router C dieses Netzwerk kennt.

Wenn also Daten für Computer A bestimmt sind, werden sie zuerst vom Netzwerk adressiert. Also fragt Router D: "Ich muss das 192.168. * -Netzwerk finden. Weiß ich das? Nein. Kennt ich jemanden, der das tut? Ja. Router C tut das. Wie komme ich zu Router C? Über meinen 2.2. 2.2 Schnittstelle. "

Router D sendet die Daten dann an Router C. Router C empfängt sie und sagt: "Oh, ich habe Daten von Router D, aber es ist für das 192.168-Netzwerk. Kenne ich dieses Netzwerk? Ja, über mein 192.168.1.1-Netzwerk." Und dann leitet es weiter.

Es gibt noch einige andere Arbeiten, um die IP- und MAC-Adressierung aufzulösen, aber ich beschreibe das Routing per se, nicht ARP und lokales Netzwerk.

Sie werden feststellen, dass Ihre erste Annahme - der Remote-Router muss den Routing-Mechanismus kennen - hier nicht zum Tragen kommt. Router D ist es egal, ob Router C EIGRP, RIP, RIPv2, OSPF oder was auch immer verwendet. Alles was es interessiert ist, dass es ein Update hat. (Natürlich ist es wichtig , wie es zu einem Update kam, damit die beiden synchron bleiben. Aber auch das ist ein anderes Problem.)

Ihre zweite Annahme, dass die Portnummer ein Faktor für das Routing ist, ist ebenfalls falsch. Router benötigen (im Allgemeinen) keine Portinformationen, um Routing-Entscheidungen zu treffen. (Das hat sich aufgrund einiger neuer Netzwerktechnologien leicht geändert und gilt hauptsächlich für Firewalls und Proxys. Die allgemeinere Annahme gilt jedoch weiterhin für "echte" Router.)

Wenn Sie mit Ihrem Beispiel fortfahren, leitet Router C Daten an Port 1000 weiter (gemäß Ihrem Szenario), da möglicherweise ein Dienst auf Computer A Daten an diesem bestimmten Port erwartet. Dies ist jedoch nur möglich, weil Router D es an Port 1000 gesendet hat. Und Router D sendet es nur an diesem Port, weil der Urheber der Daten es an Router D an diesem Port gesendet hat.

Ich verstehe nicht, dass Ihre Aufnahme von Bittorrent- oder P2P-Programmen die von Ihnen gestellte Frage widerspiegelt. Die gleichen Erklärungen würden zutreffen. Router können auch mit einem Port-Trigger konfiguriert werden, der einem bestimmten Port ein bestimmtes Gerät (oder eine bestimmte IP-Adresse) zuordnet. Wenn der Datenverkehr an Port 1234 eingeht, können die Router Daten an Device ABCD senden. Dies ist normalerweise mit einem ausgehenden TCP-Port verbunden. Wenn ich also Datenverkehr über Port 7890 sende, weiß der Router, dass eingehender Datenverkehr über Port 1234 erfolgt, und sendet ihn an mich.

Port-Triggering ist jedoch nicht mit (Remote-) Routing-Entscheidungen verbunden, sondern bezieht sich auf die interne MAC / IP-Tabelle, die der Router für das LAN verwendet.

Aktualisieren / Bearbeiten : Zur weiteren Beantwortung und Bearbeitung Ihres Kommentars. Router D kennt Computer A nur über seine IP-Adresse (192.168.2.2). Router C kennt Computer A jedoch anhand seiner IP-Adresse und seiner MAC-Adresse. Die MAC (Media Access Control) ist eine eindeutige (normalerweise ...) 48-Bit-Kennung, die nach internationalem Standard definiert ist. Jedes an ein LAN angeschlossene Gerät (verkabelt und drahtlos) muss eine eindeutige MAC-Adresse haben.

Der Router (Router C) verknüpft die IP-Adresse und die MAC-Adresse in einer Tabelle (der MAC-Adressentabelle). Wenn also Datenverkehr in Router C eingeht und der Router erkennt, dass er "lokal" ist, führt er eine MAC-Adressentabellensuche durch. Der Router ändert dann buchstäblich die Frame-Adressierungsinformationen.

Es rekonstruiert (überschreibt) die Layer 2-Zielinformationen, um die Ziel-MAC-Adresse von Computer A zu erhalten, behält jedoch die IP-Adressinformationen (Layer 3) bei.

Wenn die Route die MAC-Adresse NICHT kennt. Oder hat es keine IP-MAC-Beziehung in der Tabelle, so etwas wie ein ARP (Address Resolution Protocol), um zu fragen: "Hey, alle in diesem Netzwerk. Haben Sie diese MAC-Adresse?" Oder manchmal - "Alle, wie lautet Ihre MAC-Adresse?"). Das entsprechende Gerät (die entsprechenden Geräte) antwortet und der Router erstellt seine IP-MAC-Tabelle.


Router-D sendet also ein Paket über Port 60000 (vorkonfiguriert) an Router-C, Router-C empfängt das Paket, aber woher weiß er, dass dieses Paket an Computer-A weitergeleitet werden soll?
Pacerier

1
Router D kennt bereits das endgültige Ziel - Computer A. Er (Router D) kennt Computer A nur anhand seiner IP-Adresse: 192.168.2.2. Router C kennt Computer A jedoch auf zwei Arten: mit der IP-Adresse (192.168.2.2) und mit der MAC-Adresse. Ich werde die Antwort mit weiteren Informationen aktualisieren.
John

2

Port-Triggering. Wie sendet Ihnen ein Webserver eine Webseite, nachdem Sie diese angefordert haben? Weil du es angefordert hast. Wenn Sie es anfordern, muss der Router eine Antwort erwarten, und wenn er sie erhält, leitet er sie an den entsprechenden PC weiter. Einige Programme sind so geschrieben, dass sie in Erwartung eines Signals von einem bestimmten PC ein Öffnen auslösen, auch wenn man nicht wirklich unterwegs ist.

Einige Modelle verfügen über einen zentralen Server für die grundlegende Kommunikation. Zum Beispiel:

  • Client1 meldet sich bei Server für die bidirektionale Kommunikation an.
  • Client2 meldet sich für die gleiche Sache an.

Server kennt jetzt alle Dateien, die Client1 und Client2 haben.

  • Client2 sagt "Ich möchte Datei X von Client1" zu Server.
  • Server teilt Client1 mit "Client2 möchte X-Datei."
  • Client 1 sendet ein fehlerhaftes Datenelement an die öffentliche IP-Adresse von Client2 und setzt die Portauslösung in Gang, sodass der Port für eine Antwort von Client2 geöffnet wird.
  • Client2 sendet sein erstes Signal an die öffentliche IP von Client1.

Client1 hat den Router lediglich dazu gebracht, diesen Port für Client2 zu öffnen.

In einigen Fällen, z. B. bei BitTorrent oder dem ursprünglichen Napster (iirc), müssen Sie einen Port auf Ihrem Router weiterleiten, damit er optimal funktioniert.

Wenn andere Clients zunächst wissen, mit welchem ​​Port sie sich verbinden sollen, hat Ihr Client dem Schwarm oder Server mitgeteilt, welchen Port Sie verwenden. BitTorrent verwendet häufig einen Tracker, der nachverfolgt, welche Ports von welchen Clients verwendet werden.


Wenn Sie wissen, welche Ports Sie verwenden sollen, konfigurieren Sie den Client so, dass er einen bestimmten Port überwacht. Ihr Client teilt dem Schwarm (wie im Fall von BitTorrent) mit, auf welchem ​​Port Sie sich befinden, damit die anderen Clients wissen, mit was sie sich verbinden müssen. Ihr PC hat es ihnen gesagt.
UtahJarhead

Ich glaube, Sie haben geantwortet, als mein erster Nachtrag geschrieben wurde. Richtig?
UtahJarhead

aber wie soll der PC den Routing-Mechanismus kennen, wenn es der Router ist, der das macht? Einige Mechanismus könnte dynamisch gewesen , wie in gezeigt , superuser.com/a/187190/78897
Pacerier

Nein, das Routing muss nicht bekannt sein. Damit die meisten P2P-Clients ordnungsgemäß funktionieren, muss die Portweiterleitung auf Ihrem Router ordnungsgemäß konfiguriert sein. Ohne sie können Sie nur mit anderen Clients kommunizieren, mit denen Sie zuerst sprechen. Sie können das Gespräch nicht einleiten. Ich habe dies in meiner Antwort kurz angesprochen (vorletzter Absatz)
Utah Jarhead,

Eine Portweiterleitung ist jedoch nur möglich, wenn der Administrator diese vorkonfiguriert hat. Wollen Sie damit sagen, dass Bittorrent unsere Router neu konfiguriert ?
Pacerier
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.