BitcoinVonInnen

P2P Netzwerk

Peers, Verbindungen, verteilte Kommunikation.

Block 951.468Live

Einstieg: Node.

Was ist ein P2P-Netzwerk?

Ein Peer-to-Peer-Netzwerk (P2P) besteht aus unabhängigen Teilnehmern, die Informationen direkt untereinander austauschen.

Im Gegensatz zu klassischen Client/Server-Systemen muss Kommunikation nicht über eine zentrale Vermittlungsinstanz laufen.

In vielen heutigen Internetdiensten verbinden sich Clients mit einer Betreiber-Infrastruktur: Server vermitteln Verbindungen, koordinieren Kommunikation und kontrollieren den Datenfluss, selbst dann, wenn diese Infrastruktur aus vielen verteilten Servern besteht.

Bitcoin verwendet dagegen ein Peer-to-Peer-Netzwerk.

Jeder Node verbindet sich direkt mit anderen Peers und kann selbst:

  • Daten empfangen,
  • Informationen weiterleiten,
  • Nachrichten prüfen
  • und neue Verbindungen aufbauen.

Informationen wie Transaktionen oder Blöcke werden nicht zentral verteilt, sondern von Peer zu Peer weitergereicht, bis sie sich über das Netzwerk verbreitet haben.

Client-Server Kommunikation vs Peer-to-Peer KommunikationCLIENT/SERVERVermittelte KommunikationBITCOIN P2P MESHDirekte Peer-KommunikationClients kommunizieren ueber die Vermittlungsinfrastruktur.Peers relayn direkt untereinander. Es gibt keine zentrale Vermittlungsinstanz.
Client (Endpoint, kein Relay)
Server / Infrastruktur (Vermittlung)
Peer (gleichwertig, Relay-faehig)
Links: Rollentrennung. Rechts: keine Serverrolle, alle Teilnehmer sind Peers.

Dadurch entsteht ein Netzwerk, in dem Kommunikation nicht von einer einzelnen Vermittlungsinstanz abhängt.

Selbst wenn einzelne Verbindungen oder Peers ausfallen, können Informationen weiterhin über andere Nachbarn und alternative Pfade weitergeleitet werden.

Das bedeutet nicht, dass Bitcoin keine Infrastruktur benötigt. Nodes brauchen weiterhin Internetzugang, bekannte Peer-Adressen (Addrman) und funktionierende Netzwerkverbindungen.

Die Kommunikation selbst entsteht jedoch direkt zwischen den Teilnehmern, ohne zentrale Kommunikationsautorität (Dezentralisierung).

Wie breiten sich Informationen im Netzwerk aus?

Informationen wandern im Bitcoin-P2P-Netzwerk nicht zentral, sondern schrittweise von Peer zu Peer.

Jeder Node hält dafür mehrere Verbindungen zu anderen Peers: einige davon selbst aufgebaut (Outbound-Verbindungen), andere von außen angenommen (Inbound-Verbindungen).

Neue Informationen wie Transaktionen oder Blöcke werden zunächst nur an diese direkt verbundenen Nachbarn weitergegeben.

Die empfangenden Peers prüfen die Nachricht lokal und leiten gültige Informationen wiederum an ihre eigenen Nachbarn weiter (Relay).

Dadurch breiten sich Informationen schrittweise über viele lokale Peer-Verbindungen aus, bis große Teile des Netzwerks sie gesehen haben.

Node zurückgesetztTX akzeptiertBlock bekanntPolicy-Reject (TX)RelayTransaktionBlock

Jeder Node kennt dabei nur seine direkten Peer-Verbindungen, nicht das gesamte Netzwerk.

Trotzdem nähern sich tausende unabhängige Nodes durch kontinuierliches Relay und neue Blöcke immer wieder einem gemeinsamen gültigen Zustand an. Ob jeder Node dieselben unbestätigten Daten sieht, ist damit noch nicht gemeint.

Bevor Informationen weitergegeben werden, durchläuft eine Nachricht mehrere Prüfungen auf Netzwerkebene.

Ein Node prüft unter anderem:

  • Ist das Nachrichtenformat gültig?
  • Unterstützt der Peer die jeweilige Protokollversion?
  • Wurde das Objekt bereits gesehen?
  • Entspricht die Nachricht den lokalen Relay- und Policy-Regeln?

Erst wenn diese Prüfungen erfolgreich sind, wird die Information an weitere Peers weitergeleitet.

Ungültige, fehlerhafte oder unerwünschte Daten werden verworfen und nicht weitergeleitet. Auffällige oder fehlerhafte Peers können zusätzlich getrennt, gebremst oder eingeschränkt werden.

Danach folgen tiefere Verarbeitungsschritte innerhalb der Node:

Die späteren Netzwerk-Seiten gehen diese Schritte im Detail durch:

  • Peers: Inbound- und Outbound-Verbindungen
  • Relay: Weitergabe zwischen Peers (INV, GetData)
  • Policy: lokale Weiterleitungsregeln
  • Mempool: unbestätigte Transaktionen

Warum kennt kein Node das gesamte Netzwerk?

Ein Bitcoin-Node kennt nur seine direkten Peer-Verbindungen, nicht das gesamte P2P-Netzwerk.

Es existiert keine zentrale Teilnehmerliste und keine globale Sicht, die zwischen allen Nodes synchronisiert wird (Dezentralisierung).

Jeder Node baut seine eigene lokale Sicht auf:

Neue Informationen breiten sich deshalb nicht sofort global aus, sondern leiten schrittweise von Peer zu Peer durch das P2P-Netzwerk (Relay).

Dadurch sehen Nodes das Netzwerk oft zu leicht zu unterschiedlichen Zeitpunkten und in unterschiedlicher Reihenfolge.

  • Eigener Node
  • Direkter Peer
  • Direkte Verbindung (Relay)
  • Transaktion
  • Unbekannt
  • Tor / versteckt
  • Nur Outbound
  • Verworfen
  • nur lokale Sicht

Deshalb lässt sich auch nur schwer bestimmen, wie viele Nodes tatsächlich im Bitcoin-Netzwerk existieren.

Öffentlich sichtbar sind meist nur Nodes mit offenen Inbound-Verbindungen. Viele andere Nodes laufen jedoch hinter NAT, Firewalls oder Carrier-Grade-NAT von Internetprovidern und akzeptieren ausschließlich Outbound-Verbindungen.

Zusätzlich existieren Nodes über anonyme Overlay-Netzwerke wie Tor oder I2P, die für große Teile des öffentlichen Netzwerks nicht direkt sichtbar sind.

Die bekannten öffentlichen Node-Zahlen zeigen deshalb nur einen Teil des tatsächlichen Netzwerks.

Trotzdem nähern sich Nodes durch kontinuierliches Relay, Validation und Konsensregeln immer wieder einem gemeinsamen Zustand an.

Wie Nodes neue Peers finden und bekannte Adressen speichern, behandelt Addrman.

Warum sehen Nodes das Netzwerk unterschiedlich?

Das folgt aus der begrenzten Sicht jedes Nodes und der schrittweisen Weitergabe im P2P-Netzwerk.

Bitcoin ist ein verteiltes System ohne zentrale Reihenfolge.

Neue Transaktionen breiten sich schrittweise über lokale Relay-Verbindungen aus.

Dadurch entstehen zunächst unterschiedliche lokale Sichtstände unter anderem in den Mempools einzelner Nodes.

Lokale Policy, Peer-Auswahl und Latenz können dazu führen, dass ein Node Transaktionen früher, später oder gar nicht sieht als ein anderer.

Erst durch Blöcke entsteht regelmäßig ein gemeinsames Ordnungsfenster für gültige Zustandsübergänge, auf das sich das Netzwerk wieder synchronisieren kann.