Warum libp2p?

Wenn Sie die Entwicklung von Polkadot, Ethereum 2.0 oder Substrate verfolgt haben, haben Sie vielleicht schon von libp2p gehört. Libp2p ist ein Netzwerk-Framework, das es Ihnen ermöglicht, dezentrale Peer-to-Peer-Anwendungen zu schreiben. Ursprünglich das Netzwerkprotokoll von IPFS, wurde es inzwischen zu einem eigenen, erstklassigen Projekt ausgebaut.

Als Teil des Entwicklungsprozesses von Polkadot haben wir unsere eigene, in Rust geschriebene Implementierung von libp2p erstellt, mit der Absicht, sie in Polkadot und Substrate zu verwenden. Obwohl sie noch nicht ganz ausgereift ist, ist sie bereits recht robust und treibt die aktuellen Testnetze erfolgreich an.

Was also ist libp2p und warum haben wir sie als Netzwerkschicht für Polkadot und Substrate gewählt?

Zielsetzung

Alle verteilten Peer-to-Peer-Netzwerke haben eine Reihe von Herausforderungen, die sich von traditionellen Netzwerken unterscheiden. Libp2p ist ein verallgemeinertes Toolkit, mit dem Entwickler Plug-and-Play-Netzwerke für ihre verteilten Anwendungen nutzen können.

Ein grundlegender Wandel in der verteilten Datenverarbeitung besteht darin, dass das "Client/Server"-Paradigma nicht mehr gültig ist. Schauen wir uns einmal an, was Ihr Heimrouter macht. Jedes Gerät in Ihrem Heimnetzwerk hat eine private IP-Adresse. Wenn Sie Daten von einem Server anfordern, ersetzt Ihr Router die private Adresse Ihres Geräts durch die öffentliche IP-Adresse Ihres Hauses und merkt sich, an welches Gerät er die Antwort senden soll.

Das funktioniert gut, wenn alle Ihre Geräte Clients sind, aber was ist, wenn eine Anfrage aus der Außenwelt bei Ihrem Router auftaucht? Es handelt sich nicht um eine Antwort auf eine Anfrage, sondern um eine Anfrage, so dass der Anfragende Sie für einen Server hält. Eines Ihrer Geräte fungiert als Server, aber Ihr Router weiß nicht, welches es ist. Dieses Problem wird NAT-Traversal genannt, und libp2p bietet Werkzeuge, die dabei helfen, es zu lösen.

Libp2p kümmert sich auch um Peer Discovery und Handshake-Protokolle. In einer Welt, in der Clients auch als Server fungieren, wird es zwangsläufig eine Vielzahl von Hardware, Betriebssystemen und Kommunikationsprotokollen zwischen den Nodes geben. Verschlüsselung und Sicherheit untermauern das Design von Web3, und libp2p unterstützt sowohl unverschlüsselte (z.B. TCP, UDP) als auch verschlüsselte Protokolle (z.B. TLS, Noise) von Haus aus.

Viele Webprotokolle sind in den 90er Jahren stecken geblieben, und da immer wieder Sicherheitslücken auftauchen, werden immer mehr Patches hinzugefügt. Hier kommt die Modularität von libp2p ins Spiel. Libp2p ist so konzipiert, dass Sie jedes Element, das Sie wollen, aktualisieren können und dabei abwärtskompatibel bleiben.

Modularität

Libp2p wurde von Anfang an so konzipiert, dass sie sehr modular ist, so dass sie in vielen verschiedenen Peer-to-Peer-Projekten eingesetzt werden kann. Während Nodes in traditionellen Peer-to-Peer-Anwendungen durch eine Kombination aus IP-Adresse und Port bezeichnet werden, verwendet libp2p stattdessen das Konzept der Multi-Adressen. Einige Beispiele:

  • - /ip4/90.46.231.22/udp/25000 zeigt die Node an, dessen IP-Adresse 90.46.231.22 lautet und der auf den UDP-Port 25000 hört.

  • */ip6/fe80::0202:b3ff:fe1e:8329/udp/1567/*quic bedeutet, dass wir das QUIC-Protokoll über den UDP-Port 1567 mit einer IPv6-Adresse verwenden sollten.

  • /dnsaddr/example.com/tcp/80/ws bedeutet, dass das WebSocket-Protokoll über den TCP-Port 80 verwendet werden soll, wobei DNS zur Auflösung des Hostnamens example.com verwendet wird.

Nicht alle Projekte, die libp2p verwenden, müssen alle Protokolle unterstützen. Tatsächlich existiert das Konzept der Multi-Adressen, um es zu ermöglichen, libp2p mit neuen Protokollen zu erweitern (wie es zum Beispiel in der Vergangenheit mit QUIC gemacht wurde). In der Zukunft könnten wir zum Beispiel Bluetooth als Transportprotokoll hinzufügen.

Der zweite Hauptaspekt der Modularität von libp2p ist der Prozess der Protokollaushandlung. Sobald eine Verbindung zwischen zwei Peers hergestellt wurde, ist das Einzige, was libp2p erledigt, die Abstimmung der Protokolle, die auf dieser Verbindung verwendet werden.

Obwohl die Node dazu angehalten sind, eine bestimmte Anzahl gängiger Protokolle zu unterstützen, ist keines von ihnen technisch vorgeschrieben. Dies macht es möglich, mit neuen Protokollen oder neuen Ideen zu experimentieren und neue Versionen von Protokollen einzusetzen, während alte Versionen weiterhin unterstützt werden, ohne dass technische Schulden entstehen.

Die wichtigsten libp2p-Protokolle

Obwohl es kein obligatorisches Protokoll gibt, werden die Nodes in der Praxis ermutigt, die am häufigsten unterstützten Protokolle zu unterstützen. Dazu gehören:

  • secio, welches für die Verschlüsselung der Kommunikation zuständig ist.

  • mplex oder yamux, Protokolle, die auf secio aufsetzen und für das Multiplexing zuständig sind.

Multiplexing ist der Prozess, bei dem mehrere einzelne Datenströme zu einer einzigen Verbindung zusammengeführt werden. Sie haben wahrscheinlich ein Koaxial- oder Glasfaserkabel, das in Ihre Wohnung führt, aber Sie und Ihr Mitbewohner wollen beide verschiedene Filme auf Netflix streamen. Die Daten müssen gemultiplext werden, um zu Ihnen nach Hause zu gelangen, und demultiplext werden, um am richtigen Gerät anzukommen.

Sobald wir dazu in der Lage sind, können wir fast kostenlos so viele Substreams öffnen, wie wir wollen, und dabei so viele verschiedene Protokolle verwenden, wie wir wollen. Zu diesen Protokollen gehören:

  • identify, das es ermöglicht, Informationen über eine Node zu erhalten, einschließlich der Multi-Adressen, an denen er lauscht, und der Multi-Adresse, als die er uns sieht, ähnlich wie das STUN-Protokoll es tut.

  • ping, das es ermöglicht, die Gegenstelle anzupingen, um festzustellen, ob sie noch am Leben ist.

  • kademlia, für Peer Discovery und verteilte Datenspeicherung.

  • floodsub und gossipsub, zwei Pub-Sub-Protokolle.

  • Und noch einige mehr, einschließlich natürlich jedes benutzerdefinierte Protokoll, das man erstellen möchte.

Im Rahmen von Substrate kann jedes Projekt sein eigenes Netzwerkprotokoll definieren. Zum Beispiel heißt das Protokoll, das vom BBQ Birch Testnet verwendet wird, bbq, während das Protokoll, das von Polkadot verwendet wird, dot heißt.

Die globale Vision von libp2p

Ein weiterer Grund, libp2p zu verwenden, ist seine Beteiligung an dezentralen Projekten. Es hat IPFS von Anfang an angetrieben und wird mehrere neue Projekte wie Filecoin, wahrscheinlich Ethereum 2.0, Agoric und natürlich Substrate und Polkadot antreiben.

Dass mehrere Projekte dasselbe Netzwerkprotokoll verwenden, hat einen großen Vorteil: Es ermöglicht den Nodes, ihre Fähigkeiten über mehrere Netzwerke hinweg zu nutzen. Nehmen wir zum Beispiel das Relay-Protokoll.

In einer dezentralen Umgebung möchte man oft, dass die Node direkt miteinander verbunden sind. In der Praxis sind jedoch viele Nodes nicht erreichbar, da sie hinter NATs liegen oder Plattformen verwenden, die keine eingehenden Verbindungen zulassen.

Um dieses Problem zu lösen, bietet libp2p ein Protokoll namens Relay, das es einer Node ermöglicht, als Proxy zwischen zwei anderen Nodes zu fungieren. Die gesamte Kommunikation ist verschlüsselt und die Identität der Gegenstelle wird überprüft, so dass der Proxy nicht als Man-in-the-Middle agieren kann.

Wenn mehrere Projekte libp2p als Netzwerkstack verwenden, können sie alle von denselben Relais-Nodes profitieren und somit Ressourcen gemeinsam nutzen.

Libp2p wurde als Netzwerkprotokoll entwickelt, das die Zukunft der Dezentralisierung antreibt. Wenn Unternehmen traditionelle Anwendungen auf den Markt bringen, konzentrieren sie sich nur auf die Anwendungserfahrung und -logik - sie müssen TCP/IP nicht neu erfinden. Das ist das ultimative Ziel von libp2p: Anwendungsentwicklern die Möglichkeit zu geben, Anwendungen in der Gewissheit zu entwickeln, dass ihr Dienst erreichbar und verfügbar sein wird. Mit Implementierungen in Rust, JavaScript und Go und Entwicklungen in Java, Haskell und Python wächst libp2p schnell.

Sie können den Rust-Code hier finden: libp2p/rust-libp2p

Wenn Sie einen Beitrag leisten wollen, sollten Sie sich zunächst die Richtlinien für Beiträge ansehen.

Original Artikel “Why libp2p?”

0
aemonkPost author

Web3 is the future!

Das ist der offizielle WagMedia Space Germany! Hier werden interessante und lesenswerte DotSama-Artikel durch die Wag-Media community übersetzt und öffentlich zur Verfügung gestellt. Mitmachen? Trete unserem Discord bei und werde Teil der größten News Community im DotSama Universum.

0 comments

Das ist der offizielle WagMedia Space Germany! Hier werden interessante und lesenswerte DotSama-Artikel durch die... Show More