Skip to content
Joaquin Velazquez edited this page Nov 12, 2024 · 1 revision

Libp2p

Es un conjunto de protocolos para crear redes peer-to-peer. Surgió del equipo de desarrollo de IPFS pero se generalizó para funcionar en distintas redes.

Redes que utilizan Libp2p:

entre otras.

Conceptos básicos

Peer ID: hash único a cada nodo en una red.

Multiaddr: dirección de un peer. Incluye información de los protocolos que ese nodo soporta, incluyendo protocolos de la capa de transporte, relays, y red en la que se encuentra.

Protocolos

Libp2p ofrece sus protocolos de forma modular, y maneja diferentes opciones para cada tipo. Dependiendo del ecosistema, varían los protocolos empleados.

Transporte

Para envíar datos entre peers, libp2p permite elegir el protocolo a utilizar. Esta elección depende del ambiente de la aplicación, del margen de error, etc.

Peer Discovery

Dentro de los servicios que ofrece libp2p, se incluye TCP, UDP, y QUIC. Además, un cliente libp2p puede correr en un navegador y, debido a que una web app no tiene acceso a sockets, libp2p también cuenta con protocolos de WebSocket, WebTransport y WebRTC.

WebRTC

Es un protocolo estandarizado en navegadores para lograr una conexión peer-to-peer entre dos navegadores. Normalmente utiliza servidores TURN para manejar el tráfico, los cuáles son parte de los protocolos STUN y su implementación en protocolos de llamada y respuesta, ICE.

Por otro lado, hace posible establecer una conexion con un servidor que no tenga un certificado TLS, lo cual facilita la conexion entre pares.

En libp2p, se utiliza un relay en lugar del servidor TURN. Un relay libp2p es un nodo público que acepta una o varias "reservas" por parte de nodos privados. Una vez establecida la reserva, el nodo privado que la realizó puede empezar a anunciarse con el peer ID del relay.

NAT traversal

Los nodos en redes peer-to-peer suelen actuar como servidores y clientes a la vez. Esto significa que cada nodo debe poder recibir conexiones entrantes, lo cuál es una tarea dificil en nodos privados (detrás de un router con NAT y/o firewalls). Para circunventar esta limitación, hay diferentes técnicas.

Abrir un puerto

uPnP

TURN

STUN

P2P Circuit

Circuit Relay V2: A publicly reachable libp2p peer that can serve as a relay between browser nodes that have yet to establish a direct connection between each other. Unlike TURN servers, which are WebRTC-specific and can be costly to run, Circuit Relay V2 is a libp2p protocol that is resource-constrained by design. It’s also decentralized and trustless, in the sense that any publicly reachable libp2p peer supporting the protocol can help browser-based libp2p nodes by serving as a (time and bandwidth-constrained) relay.

https://docs.libp2p.io/guides/getting-started/webrtc/#peer-to-peer-connections-when-two-arent-enough-to-tango

Hole Punching

Clone this wiki locally