Einstieg: Node, P2P-Netzwerk, Meine Node.
Was ist ein Peer?
Aus Sicht einer Bitcoin-Node ist jeder direkt verbundene Netzwerkteilnehmer ein Peer.
Peer bedeutet wörtlich „Gleichgestellter“, „Gleichberechtigter“ oder „ebenbürtiger Teilnehmer“.
Eine Node kommuniziert nicht mit dem gesamten Netzwerk gleichzeitig, ondern nur mit einer begrenzten Anzahl direkter Nachbarn.
Diese Nachbarn werden Peers genannt.
Wenn ein neuer Block oder eine neue Transaktion eintrifft, erhält die Node diese zunächst von einem ihrer Peers. Anschließend entscheidet sie selbst, ob die Daten gültig sind und an weitere Peers weitergeleitet werden.
Das Bitcoin-Netzwerk besteht daher aus vielen tausend Nodes, die jeweils nur mit einem kleinen Teil des Netzwerks direkt verbunden sind.
Wie entstehen Peer-Verbindungen?
Damit sich neue Blöcke und Transaktionen möglichst schnell durch das Netzwerk verbreiten können, benötigen Nodes Verbindungen zu anderen Peers.
Diese Verbindungen können auf zwei Arten entstehen:
Für den Datenaustausch macht die Richtung später keinen Unterschied. Über beide Verbindungen können Blöcke, Transaktionen und andere Netzwerkdaten in beide Richtungen übertragen werden.
Die Begriffe beschreiben lediglich, wer die Verbindung ursprünglich aufgebaut hat: als Outbound- oder Inbound-Peer.
Outbound-Peers
Outbound-Verbindungen werden aktiv von der eigenen Node aufgebaut.
Dafür benötigt die Node zunächst Adressen anderer Bitcoin-Nodes.
Diese Adressen lernt sie beispielsweise:
- von bereits verbundenen Peers
- über DNS-Seeds beim ersten Start
- aus früher bekannten Verbindungen im Adressbuch
Die bekannten Adressen werden in einem lokalen Adressbuch gespeichert und verwaltet.
Aus diesem Adressbuch wählt die Node einige geeignete Kandidaten aus und versucht, zu ihnen eine Verbindung aufzubauen.
Die Node kennt normalerweise deutlich mehr mögliche Peers, als sie gleichzeitig verbunden halten kann.
Sobald eine Verbindung besteht, können darüber P2P-Nachrichten in beide Richtungen übertragen werden. Dazu gehören beispielsweise neue Blöcke, Transaktionen und Informationen über weitere Peers.
Wie dieses Adressbuch intern funktioniert und wie Bitcoin Core neue Peer-Adressen sammelt, speichert und auswählt, betrachten wir später bei Addrman.
Inbound-Peers
Während Outbound-Verbindungen von der eigenen Node aufgebaut werden, entstehen Inbound-Verbindungen umgekehrt:
Eine andere Node wählt deine Node als Peer aus und baut die Verbindung zu dir auf.
Für den späteren Datenaustausch macht die Richtung keinen Unterschied. Über die Verbindung können Blöcke, Transaktionen und andere P2P-Nachrichten in beide Richtungen übertragen werden.
Der Begriff Inbound beschreibt lediglich, dass die Verbindung ursprünglich von einem anderen Peer initiiert wurde.
Damit andere Nodes eine Verbindung aufbauen können, muss deine Node aus dem Internet erreichbar sein.
Typischerweise erfordert das bei IPv4- oder IPv6-Verbindungen:
- eine öffentliche IP-Adresse
- Port-Forwarding (bei vielen Heimnetzwerken)
- einen offenen TCP-Port 8333
Nodes, die eingehende Verbindungen akzeptieren, werden häufig als Listening Nodes bezeichnet.
Listening Node
Eine Listening Node akzeptiert eingehende Verbindungen anderer Peers.
Dafür muss sie über das Internet erreichbar sein und auf Port 8333 auf neue Verbindungen warten ("listen").
Listening Nodes bauen in der Praxis zusätzlich eigene Outbound-Verbindungen auf und akzeptieren gleichzeitig eingehende Verbindungen anderer Teilnehmer.
Outbound-only Node
Eine Outbound-only Node baut selbst Verbindungen zu anderen Peers auf, akzeptiert aber keine eingehenden Verbindungen.
Das ist bei vielen privaten Setups der Normalfall: Die Node läuft zum Beispiel auf einem Laptop, Raspberry Pi oder Mobilgerät und befindet sich hinter einem Router, NAT oder einer Firewall. Andere Nodes können sie dadurch nicht direkt erreichen.
Für die eigene Validierung ist das kein Problem. Eine Outbound-only Node kann weiterhin Blöcke und Transaktionen empfangen, eigene Transaktionen über das Relay verbreiten und alle Konsensregeln vollständig prüfen.
Der Unterschied zu einer Listening Node liegt nicht in der Validierung, sondern in der Erreichbarkeit. Eine Listening Node kann zusätzlich eingehende Verbindungen annehmen und dadurch anderen Peers als erreichbarer Netzwerkpartner dienen.
Eine Outbound-only Node schützt also weiterhin den eigenen Nutzer durch vollständige Validierung. Sie trägt nur weniger zur Erreichbarkeit und Weitervernetzung des Bitcoin-Netzwerks bei.
Wie viele Peers hat eine Node?
Die genaue Anzahl hängt von der Software, der Konfiguration und der Erreichbarkeit der Node ab.
Bitcoin Core hält standardmäßig mehrere dauerhafte Outbound-Verbindungen aufrecht, über die die Node neue Blöcke und Transaktionen empfängt.
Zusätzlich kann eine Listening Node eingehende Verbindungen anderer Peers akzeptieren.
Typischerweise besitzt eine Bitcoin-Core-Node:
- etwa 8 dauerhafte Outbound-Peers
- zusätzlich eine variable Anzahl von Inbound-Peers
Eine Outbound-only Node verfügt meist nur über ihre Outbound-Verbindungen.
Eine Listening Node kann dagegen von vielen weiteren Peers erreicht werden und dadurch deutlich mehr Verbindungen besitzen.
Bitcoin Core erlaubt standardmäßig bis zu 125 gleichzeitige Peer-Verbindungen. In der Praxis nutzen die meisten Nodes jedoch nur einen Teil dieser möglichen Verbindungen.
Dadurch entsteht ein dicht vermaschtes Netzwerk, in dem Blöcke und Transaktionen viele verschiedene Wege durch das P2P-Netzwerk nehmen können.
Die genauen Grenzwerte können über die Konfiguration angepasst werden.