Wie funktioniert Peer to Peer in der Praxis?
-
Hi,
ich verstehe nicht so ganz, wie P2P-Netzwerke eigentlich arbeiten.
Client<->Server-Modelle kann ich nachvollziehen, aber bei P2P frag
ich mich, wie der eine PC den anderen überhaupt findet, wenn es keine
zentrale Stelle gibt, wo alle IP-Adressen gelistet werden.Es wird ja vermutlich nicht so sein, dass wie bei einem Portscanner
erstmal Kiloweise IP-Adressen auf Port XY gescannt werden, um einen
Treffer zu landen und eine aktive Verbindung aufzubauenBitte bringt mal Licht ins Dunkel. Wiki und Google waren mir da nicht
so hilfreich wie ich es gedacht hätte.
-
wozu "kiloweise" IP-Adressen? Er nimmt einfach x bekannte Peers und schickt an die die Anfrage raus... die nehmen wieder jeweils x und immer so weiter... innerhalb kürzester Zeit sollte man so genug abgedeckt haben
Wie es genau funktioniert, weiß ich natürlich nicht, aber wie ich aus wiki und der entsprechenden Diskussionseite entnommen hab gibts unterschiedliche P2P-Netze, die alle ein wenig anders arbeiten.
Das Hauptproblem ist wirklich, wie man den Rechner mit dieser Datei herausfindet... Ist der einmal gefunden, ist der Rest ein Kinderspiel
-
Genau das meine ich ja. Wenn man selbst also ein P2P-Netz aufbauen würde, müsste
man tatsächlich zunächst einen Rechner und dessen IP im Quellcode verankern,
um den folgenden Installationen der P2P-Software zu ermöglichen sich zu diesem
einen PC zu verbinden und dort ebenfalls die eigene IP abzulegen.PC1 wäre mal angenommen dieser "Knotenpunk-PC", dann würde PC2 dort seine
IP mitteilen, damit PC3 aus diesem IP-Pool direkt zu PC2 verbinden könnte.Dann ist mir aber nicht klar, warum man solche Netze - und hier besonders
im Hinblick auf den Conficker(!) nicht relativ einfach abschalten kann?!Liegt es daran, dass dann PC2 und PC3 die IP-Liste von PC1 kopieren und sich
somit eine Eigendynamik losgelöst von einer Server<->Client-Struktur ergibt?
Schaltet man nun PC1 ab, ist es also praktisch egal, da dann PC2 bzw 3 einfach
zur nächsten IP über gehen und dort versuchen sich zu verbinden?Aber wie würde dann ein PC4 wissen wohin er sich erstmals verbinden muss...
-
eine Eigendynamik entsteht wirklich...
Angenommen PC1 ist der eigentliche Urheber der Datei
Bei einem zentralisiertem Netzwerk meldet er regelmäßig seine Dateiliste dem Server, das macht die Suche natürlich sehr schnell, aber nicht jedem gefällt der Gedanke, dass ein Server seine Dateien kennt
Dann gibts natürlich noch das "reine" P2P, wo es einen solchen Server nicht gibt, hier helfen alle Peers bei der Suche... irgendwer wirds ja schon wissen
das könnte so ablaufen, wenn sich PC1-4 im Netz befinden und PC4 will eine Datei von PC1, ohne zu wissen, wer von den Teilnehmern die Datei wirklich hat
- PC4 fragt PC3, ob er die Datei hat, wenn ja, sag es PC4
- PC3 fragt PC2, ob er die Datei hat, wenn ja, sag es PC3
- PC2 fragt PC1, ob er die Datei hat, wenn ja, sag es PC2
- PC1 hat sie und sagt es PC2
- PC2 meldet den Fund an PC3
- PC3 meldet den Fund an PC4
- PC4 kann von PC1 herunterladen.Das gleiche, wenn man nicht nach einer speziellen Datei sucht, sondern nur eine Suchanfrage gestellt hat... jeder Teilnehmer sieht einfach nach, ob er eine zur Suchanfrage passende Datei hat und schickt die Informationen darüber an den Anfragesteller weiter, schickt aber selbst nochmal eine Anfrage raus.
Der Vorteil da: PC3 kann zum Beispiel nicht wissen, ob PC4 die Datei selbst will oder die Anfrage nur weitergeleitet hat. Dafür dauert es unter umständen etwas. Man kann es beschleunigen, wenn jeder PC wie gesagt mehrere andere Peers frägt, anstatt immer nur einen. Mehr Netzlast, dafür bessere und schnellere Treffer.
Will jetzt PC5 ebenfalls die Datei und er frägt PC4, so kann dieser ihm sofort PC1 und sich selbst als Besitzer der Datei melden. Würde PC1 wegfallen, bleibt immernoch PC4 übrig, der hoffentlich bereits einen Teil heruntergeladen hat
Sind aber alles nur Vermutungen und im Detail dürfte das Prinzip ein wenig ausgeklügelter sein
-
zwutz schrieb:
- PC4 fragt PC3, ob er die Datei hat, wenn ja, sag es PC4
- PC3 fragt PC2, ob er die Datei hat, wenn ja, sag es PC3
- PC2 fragt PC1, ob er die Datei hat, wenn ja, sag es PC2
- PC1 hat sie und sagt es PC2
- PC2 meldet den Fund an PC3
- PC3 meldet den Fund an PC4
- PC4 kann von PC1 herunterladen.so kanns gehen, aber wie findet pc4 pc3 und pc3 pc2 usw. im internet? broadcasts gehen ja nicht, jeder kann 'ne dynamische ip-adresse haben und alle möglichen ip-adressen durchzuprobieren würde verdammt lange dauern.
-
Es funktioniert folgendermaßen. Am Anfang, wen das Programm noch kaum Nutzer hat, gibt es in der Tat eine Server mit einer statischen IP. Diese IP haben alle Clients gespeichert. Alle verbinden sich nun und machen sich untereinander bekannt. Nun hat jeder Client eine Liste mit anderen PCs. Über 3 Ecken kennt sich also jeder jeden. Nun wird der "Server" abgestellt und das Netzwerk sich selbst überlassen. Wenn wirklich alle Clients gleichzeitig offline gehen würden wäre das Netzwerk weg und keiner könnte sich mehr finden, aber das passiert so gut wie nie. Wie die Suchanfragen laufen wurde ja schon erklärt. Der Server ist allerdings auch nur ein Client, nur halt mit statischer IP und die anderen haben seine IP von Anfang an in der Liste.
-
+fricky schrieb:
so kanns gehen, aber wie findet pc4 pc3 und pc3 pc2 usw. im internet? broadcasts gehen ja nicht, jeder kann 'ne dynamische ip-adresse haben und alle möglichen ip-adressen durchzuprobieren würde verdammt lange dauern.
Ein dezentrales (ohne zentralen Server) P2P-Netzwerk funktioniert (beispielsweise) folgendermaßen:
Jeder Peer hat eine Liste von bekannten Peers, die er beim letzten mal erfolgreich kontaktiert hat.
Falls diese Liste veraltet (letzter Start zu lange her) oder schlichtweg nicht vorhanden ist (neue Installation etc.) Probiert er einfach wirklich ein paar Tausend IPs durch. Man schickt einfach an sehr viele zufällige Adressen UDP-Pakete raus (UDP ist hier äußerst praktisch, da es ein verbindungsloses Protokoll ist) und sich nicht weiter um sie kümmert. Irgendwann wird eine Antwort zurückkommen, die besagt, dass hinter dieser Adresse ein Peer sitzt.
Nun hat man schonmal einen Peer.
Mit großer Wahrscheinlichkeit ist dieser Peer schon zum P2P-Netz verbunden (und nicht auch erst auf Verbindungssuche) und er kann unserem Client seine Liste mit Peers geben. Falls diese Liste nicht ausreicht (oder wir einfach noch mehr wollen) schicken wir einfach nochmal ein paar Pakete raus (um noch ein paar andere Listen und evtl. einen "vielfältigeren" Überblick über das Netz zu bekommen).Um dem Problem beizugehen, dass die Listen nicht ewig aktuell bleiben, könnte man zum einen einfach wieder neue UDP-Pakete verschicken, aber - und was noch sinnvoller ist - man kann auch einfach mit den noch funktionierenden Peers aus seiner Liste einfach die Listen untereinander abgleichen und die kaputten Peers aussortieren (hierbei muss man evtl. aufpassen, dass das Netzwerk nicht zu einzelnen Subnetzen degeneriert, die nur sich selbst untereinander kennen, aber mit einem geschickten Abgleichalgorithmus kann man auch dieses Problem lösen).