---
# System prepended metadata

title: libp2p Rust Notes

---

# libp2p Rust Notes
----

#### Documentation Link
[DOCS link](https://docs.libp2p.io/concepts/introduction/overview/)

#### What is Libp2p:

libp2p is a modular system of protocols, specifications and libraries that enable the development of peer-to-peer network applications.

#### Benefits of Libp2p

libp2p lets all users preserve their network identity, overcome network censorship, and communicate over different transport protocols.

#### Transport Layer Protocols used

TCP, QUIC, WebSocket, WebTransport and WebRTC


#### Peer Identity

libp2p uses public key cryptography as the basis of peer identity

1. libp2p gives each peer a globally unique “name”, in the form of a PeerId.
2. The PeerId allows anyone to retrieve the public key for the identified peer, which enables secure communication between peers.

#### Peer Routing

Peer routing is the process of discovering peer addresses by leveraging the knowledge of other peers.

#### Peer Messsaging 

libp2p defines a pubsub specification for sending messages to all peers subscribed to a given “topic”. 


#### libp2p 

**Transport** defines how to send bytes on the network, a **NetworkBehaviour** defines what bytes to send on the network.

A **Multiaddr** is a self-describing network address and protocol stack that is used to establish connections to peers. 

#### What problems does libp2p solve?

1. Data Transmission
2. Peer Identity
3. Secure Communication
4. Peer Routing
5. Content discovery 
6. Peer messaging 




## [Addressing](https://docs.libp2p.io/concepts/fundamentals/addressing/)

* Flexible addressing system

### Multiaddress

It is a convention for encoding multiple layers of addressing information into single `future-proof` path structure.

It allows many layers of addressing to be combined and used together.


### DHT

The Kademlia Distributed Hash Table is used in libp2p to provide peer discovery and content routing. In simple terms, a hash table is a set of records in which every record holds a key -> value mapping. In a distributed hash table, the records are spread across the network, which means that every node holds a subset of records.

When searching for a specific record, we do not have a centralized registry; therefore, we must ask peers in the network until the record is found. This search is not random however, but guided by the DHT distance metric.

#### Distance Metric
The distance metric represents the distance between two IDs