So erstellen Sie eine P2P-Anwendung

8

[Auf Vorschlag von SO-Benutzern hierher verschoben (10k SO +) ]

Ich möchte eine Peer-to-Peer-Anwendung entwickeln. Obwohl ich viel Erfahrung mit LOB-Apps habe, bin ich neu in der P2P-Arena.

Ich habe eine ungefähre Vorstellung davon, wie die Dinge funktionieren sollten, brauche aber einige weitere Details, um mein Verständnis zu vervollständigen.

Was ich weiß (glaube), muss ich tun:

  • Ein erheblicher Teil der Clients muss eingehende Verbindungen aktivieren (ua uPnP / NAT-Regeln).
  • Knoten sollten andere bekannte Knoten gemeinsam nutzen, um die Ausfallsicherheit zu gewährleisten, wenn ein bestimmter Knoten ausfällt
  • Zum Senden von Daten zwischen beliebigen Clients ist eine Form der Synchronisation / Routenfindung erforderlich
  • Möglicherweise einige Ressourcen, die zwischen "dummen" Clients und leistungsstärkeren "Superknoten" unterscheiden, um die Synchronisierung / Freigabe von Knotenlisten zu handhaben und möglicherweise Nachrichten weiterzuleiten
  • Clients ohne eingehende Unterstützung sollten eine ausgehende Verbindung offen halten, über die sie Informationen zu Knoten erhalten können, zu denen eine Verbindung hergestellt werden soll

Kurz gesagt, ich hoffe, (zunächst) einen Chat- / Messenger-Dienst anbieten zu können, der nicht auf einer Verbindung zu einem bestimmten zentralen Server beruht. Obwohl ich mir vorstelle, dass ich eine Reihe zentraler "Superknoten" bereitstellen muss, um die Dinge in Gang zu setzen (oder nach erheblichen Upgrades), sollten diese optional sein, sobald ein funktionierendes P2P-Netzwerk eingerichtet wurde.

Ich kann eine Reihe von Problemen erkennen und weiß nicht, wie ich sie angehen soll. Hauptsächlich wie man ...

  • Authentifizieren Sie Benutzer bei anderen Knoten ohne eine zentrale Berechtigung zur Überprüfung
  • Koordinieren Sie, welche Knoten über welche anderen Knoten Bescheid wissen (Min-Max-Anzahl / nach Latenz / ???)
  • Ermöglichen Sie einem bestimmten Benutzer zu bestimmen, ob ein anderer Benutzer (oder Knoten) online ist
  • Behandeln Sie eine Situation, in der zwei Gruppen von Knoten physisch getrennt sind (Luftspalt) und wie Sie beim erneuten Verbinden der Gruppen erneut synchronisieren
  • Usw.

Ich weiß, dass dies eine ziemlich offene Frage ist. Obwohl hochrangige Designmuster geschätzt würden, suche ich wirklich einen anständigen Leitfaden dafür, wie andere mit diesen Problemen umgegangen sind (und mit denen, die ich noch nicht in Betracht gezogen habe) ).

Basic
quelle
Ist das Webanwendungs-Tag beabsichtigt? Wenn ja, was macht Ihrer Meinung nach eine P2P- Web-App aus ?
Svidgen
@svidgen: Es ist nicht unangemessen, dass der Schwarm ein Cluster-Webhost sein könnte.
Steven Evers
@svidgen Guter Fang, ich wollte die Frage etwas größer machen, habe es mir aber anders überlegt, also sollte ich das Tag entfernen. Danke
Basic
1
Schauen Sie sich BitTorrent und DHT sowie die von ihnen verwendeten Prinzipien und Technologien an. Mit zehnjähriger Erfahrung haben beide die meisten Probleme gelöst, die Sie ansprechen möchten. Das ist wirklich zu breit.
CodeCaster
@ CodeCaster Ich fange an zu denken, dass du mich verfolgst;)
Basic

Antworten:

5
  1. Das Entwerfen eines Protokolls und das Erstellen einer Anwendung darauf ist ein großes Projekt. Nehmen Sie so viel wie möglich aus vorhandenen Protokollen.
  2. Die wichtigsten Protokolle (über Skype hinaus, bei dem es sich um Peer-to-Peer-Nachrichten handelt, das Protokoll jedoch geheim ist) sind diejenigen, die Ressourcen über ein Peer-to-Peer-Netzwerk bereitstellen. Dies bedeutet insbesondere, dass TOR die .onion-Domäne und das Freenet bereitstellt .
  3. Die meisten Dinge, die Sie unter "Muss" auflisten, werden von Freenet erledigt, viele davon auch in TOR.
  4. Die Identität der Benutzer muss kryptografisch sein. Das Zuordnen von Real-Word-Identitäten zu den kryptografischen Schlüsseln erfordert eine Art Vertrauensnetz wie in PGP / GPG .
  5. Ein wichtiger Grund für die Verwendung von Peer-to-Peer-Nachrichten ist der Datenschutz. Off-the-Record-Nachrichten sind grundsätzlich obligatorisch (gibt an, wie die Authentifizierung funktionieren muss).
  6. Präsenz muss auch vertraulich sein, im Grunde eine besondere Art von Botschaft.
  7. Trennungen sind kein spezielles Problem, das über die allgemeine Fehlertoleranz hinausgeht. Für jede Seite sieht es so aus, als ob die anderen Knoten ausfallen und sich wieder verbinden.
  8. Möglicherweise möchten Sie das Protokoll als Signalisierung für ein Streaming-Protokoll verwenden, wahrscheinlich für sRTP . Dieses Protokoll behandelt die NAT-Durchquerung, sodass Sie den Mechanismus für das p2p-Protokoll selbst klonen können.
Jan Hudec
quelle