Zum Inhalt springen

Technische Frage darüber wie Peers voneinander erfahren


Empfohlene Beiträge

Hallo,

wie in meinem letzten Beitrag erklärt, befinde ich mich gerade auf einer selbsternannten Mission, Bitcoin einmal vollständig für mich zu verstehen.

Meine Frage bezieht sich auf den Prozess des Kennenlernens im P2P-Network. Ich habe gelernt, dass Peers, wenn sie dem Netzwerk erstmalig beitreten, um überhaupt irgendwie Anschluss an andere Peers zu finden, einem Bootstrapping Prozess durchlaufen. Dieses Bootstrapping schaut so aus, dass bekannte Nodes von einer Liste von Internetseiten (Seed-Providern) gezogen werden. Zusätzlich, wohl als Plan B ist auch eine Liste von IP-Adressen im Bitcoin Core implementiert (hard gecodet), auf die der Client dann zurückgreifen kann.

Ich erfahre dadurch durch Nodes. Und da diese Nodes andere Nodes kennen und so weiter, ist irgendwann das ganze Netzwerk abgedeckt. So weit, so gut.

Dann hab ich mich gefragt, wie das Netzwerk von mir erfährt? Nun es erscheint logisch, dass Nodes, die ich kennenlerne, im gleichen Schritt auch mich kennenlernen.

Dadurch würden die Nodes, die im Seeding implementiert sind, aber über richtig viele Nodes erfahren, die sie in ihre eigene Liste bekannter Peers aufnehmen müssten. Eigentlich alle? Ist sowas denn skalierbar? Gleichzeitig... wenn alle Nodes die Seed-Nodes kennen (weil sie jeder initial hinzugefügt hat), wäre doch sehr viel Konzentration des Traffics auf diesen Seed-Nodes. Daher wieder meine Frage zur Skalierbarkeit.

Wahrscheinlich funktioniert es in Wirklichkeit aber nochmal anders 😄 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Aus bitcointalk:

"Die DNS-Seeder geben Listen von Seed-Knoten aus, und es gibt auch einige fest codierte Fallback-Seed-Knoten in Bitcoin Core, die verwendet werden können, wenn die DNS-Seeder nicht verfügbar sind.

 Es ist wichtig zu beachten, dass Knoten keine Verbindung zu Startknoten als normaler Knoten herstellen.  Stattdessen stellen sie eine Verbindung her, fordern IP-Adressen anderer Knoten an (mithilfe der getaddr-Nachricht) und trennen dann die Verbindung.  Die Knoten stellen dann eine Verbindung zu den Knoten her, die in der Adr-Nachricht angegeben wurden (die Antwort auf getaddr)."

 

  • Thanks 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Beim ersten Start: Deine Node fragt eine oder mehrere Bootstrap Nodes. Eine Bootstrap Node ist in der Regel eine leere Hülle, die ausschließlich diese eine p2p Anfrage bearbeiten und beantworten kann. Alle anderen Funktionen, die man von einer Full Node erwarten würde, werden von der Bootstrap Node nicht bedient. Vorteil: Die Bootstrap Node kann dank dieser vergleichbar einfachen Funktionalität so gut wie nie zum Absturz gebracht werden. Sie sind praktisch immer erreichbar. Alle anderen Full Nodes mögen wegen Fehlern Crashen aber die Bootstrap Nodes führt den fehlerhaften Code nicht aus und läuft einfach weiter.

Danach folgt eine Runde Peer Discovery. Dieses Peer Discovery ist häufig nicht zufällig sondern folgt einem Muster.

Stell dir das vor wie ein Raum voller Menschen, die sich alle in einem Kreis aufgestellt haben. Sie haben sich alphabetisch nach ihrem Namen sortiert. Möchtest du an diesem Netzwerk teilnehmen, musst du genau die Position finden, die in diesem Falle deinem Namen entspricht.

Also fragst du einfach eine beliebig Person nach ihrem Namen, vergleichst das mit deinem Namen. Außerdem fragst du die gleiche Person welche Nachbarn ihr bekannt sind und welche Namen diese haben. Du nimmst den Namen der deinem Ziel am nächsten kommt und fragst diese Person als nächstes genau die gleichen zwei Fragen.

Du bekommst jedesmal eine Liste von sagen wir 30 Kontakten zurück. Deine Aufgabe als Teilnehmer dieses Netzwerkes wird es am Ende sein ebenfalls eine Liste mit 30 Kontakten zu pflegen. Du solltest nicht alle Kontakte in diesem Netzwerk auswendig lernen sondern nur 30.

Deine Kontaktliste ist ebenfalls nicht zufällig erstellt sondern du speicherst dort neben deinen direkten Nachbarn auch ein paar Kontakte ab die möglichst weit entfernt von dir sind. Möchte eine andere Person den Raum betreten und hat zufällig einen Namen der sehr weit von dir entfernt ist, kannst du diese Person dank dieser Regel sehr schnell auf die andere Seite des Kreises verweisen. Damit läuft es auf Intervall Halbierungen hinaus und das ist ein sehr mächtiges Werkzeug. Selbst wenn in dem Raum 1 Millionen Menschen stehen musst du dank Intervall Halbierung nur mit maximal 20 Menschen reden um deine Position in diesem gigantischen Kreis zu finden.

So und jetzt übertragen wir dieses bildliche Beispiel auf ein p2p Netzwerk. Als erstes holen wir die 1 Millionen Meschen aus dem Raum raus und schicken sie nach Hause. Vorher notieren sie sich aber die Telefonnummern ihrer 30 Kontakte. Du rufst irgend jemanden aus diesem Netzwerk an und fragt nach dessen Namen und seiner Kontaktliste. Alles weitere wie gehabt. Der Trick ist, dass du auch wenn diese 1 Millionen Menschen nicht mehr in einem Raum in einem Kreis stehen trotzdem mit maximal 20 Intervall Halbierungen deine Position in diesem Netzwerk finden kannst.

Als nächsten Schritt tauscht du deinen Namen einfach gegen eine zufällig gewählte nodeID aus. Glückwunsch damit hast du jetzt ein Kademlia Netzwerk. Genau diese Regeln werden bei einem Kademlia Netzwerk befolgt und sorgen dafür, dass die Verbindungen in dem p2p Netzwerk nicht zufällig sind sondern der Intervall Halbierung dienen. Die meisten p2p Netzwerke nutzen meines Wissens das Kademlia Protokoll.

Beim zweiten Start kannst du optional anstelle der Bootsrap Node einfach eine Node aus deiner alten Kontaktliste fragen. Das Kademlia Netzwerk ist allerdings darauf angewiesen, dass du die Kontaktliste neu aufbaust. Du kannst nicht einfach die alte Kontaktliste nehmen und hoffen, dass das diese noch richtig ist. Es ist unerheblich welche Node du fragst aber es ist wichtig, dass du trotzdem die Regeln für die Kontaktliste befolgst.

Das ist jetzt natürlich eine vereinfachte Darstellung eines Kademlia Netzwerks. Ich hoffe das passt soweit. Bei Fragen einfach melden.

  • Thanks 2
  • Like 1
Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...

Wichtige Information

Wir haben Cookies auf Deinem Gerät platziert. Das hilft uns diese Webseite zu verbessern. Du kannst die Cookie-Einstellungen anpassen, andernfalls gehen wir davon aus, dass Du damit einverstanden bist, weiterzumachen.