-
Notifications
You must be signed in to change notification settings - Fork 280
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
archive old specs, add minimal index
- Loading branch information
1 parent
effa408
commit 79ae167
Showing
12 changed files
with
136 additions
and
85 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,104 +1,51 @@ | ||
# libp2p specification | ||
|
||
|
||
<h1 align="center"> | ||
<img src="https://raw.githubusercontent.com/libp2p/libp2p/a13997787e57d40d6315b422afbe1ceb62f45511/logo/libp2p-logo.png" alt="libp2p logo"/> | ||
</h1> | ||
|
||
<a href="http://protocol.ai"><img src="https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square" /></a> | ||
<a href="http://libp2p.io/"><img src="https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square" /></a> | ||
<a href="http://webchat.freenode.net/?channels=%23libp2p"><img src="https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square" /></a> | ||
<a href="https://waffle.io/libp2p/libp2p"><img src="https://img.shields.io/badge/pm-waffle-yellow.svg?style=flat-square" /></a> | ||
|
||
> This document presents `libp2p`, a modularized and extensible network stack to overcome the networking challenges faced when doing peer-to-peer applications. `libp2p` is used by IPFS as its networking library. | ||
Authors: | ||
|
||
- [Juan Benet](https://github.com/jbenet) | ||
- [David Dias](https://github.com/daviddias) | ||
|
||
Reviewers: | ||
|
||
- `N/A` | ||
|
||
## Abstract | ||
|
||
This describes the [IPFS](https://ipfs.io/) network protocol. The network layer provides point-to-point transports (reliable and unreliable) between any two IPFS nodes in the network. | ||
|
||
This document defines the spec implemented in `libp2p`. | ||
|
||
## Status of this spec ![](https://img.shields.io/badge/status-wip-orange.svg?style=flat-square) | ||
|
||
## Organization of this document | ||
|
||
This RFC is organized by chapters described on the *Table of contents* section. Each of the chapters can be found in its own file. | ||
## Overview | ||
|
||
## Table of contents | ||
This repository contains the specifications for [`libp2p`](https://libp2p.io), a | ||
framework and suite of protocols for building peer-to-peer network applications. | ||
libp2p has several [implementations][libp2p_implementations], with more in development. | ||
|
||
- [1 Introduction](1-introduction.md) | ||
- [1.1 Motivation](1-introduction.md#11-motivation) | ||
- [1.2 Goals](1-introduction.md#12-goals) | ||
- [2 An analysis the state of the art in network stacks](2-state-of-the-art.md) | ||
- [2.1 The client-server model](2-state-of-the-art.md#21-the-client-server-model) | ||
- [2.2 Categorizing the network stack protocols by solutions](2-state-of-the-art.md#22-categorizing-the-network-stack-protocols-by-solutions) | ||
- [2.3 Current shortcomings](2-state-of-the-art.md#23-current-shortcomings) | ||
- [3 Requirements](3-requirements.md) | ||
- [3.1 Transport agnostic](3-requirements.md#34-transport-agnostic) | ||
- [3.2 Multi-multiplexing](3-requirements.md#35-multi-multiplexing) | ||
- [3.3 Encryption](3-requirements.md#33-encryption) | ||
- [3.4 NAT traversal](3-requirements.md#31-nat-traversal) | ||
- [3.5 Relay](3-requirements.md#32-relay) | ||
- [3.6 Enable several network topologies](3-requirements.md#36-enable-several-network-topologies) | ||
- [3.7 Resource discovery](3-requirements.md#37-resource-discovery) | ||
- [3.8 Messaging](3-requirements.md#38-messaging) | ||
- [3.9 Naming](3-requirements.md#38-naming) | ||
- [4 Architecture](4-architecture.md) | ||
- [4.1 Peer Routing](4-architecture.md#41-peer-routing) | ||
- [4.2 Swarm](4-architecture.md#42-swarm) | ||
- [4.3 Distributed Record Store](4-architecture.md#43-distributed-record-store) | ||
- [4.4 Discovery](4-architecture.md#44-discovery) | ||
- [4.5 Messaging](4-architecture.md#45-messaging) | ||
- [4.5.1 PubSub](4-architecture.md#451-pubsub) | ||
- [4.6 Naming](4-architecture.md#46-naming) | ||
- [4.6.1 IPRS](4-architecture.md#461-iprs) | ||
- [4.6.2 IPNS](4-architecture.md#462-ipns) | ||
- [5 Data structures](5-datastructures.md) | ||
- [6 Interfaces](6-interfaces.md) | ||
- [6.1 libp2p](6-interfaces.md#61-libp2p) | ||
- [6.1 Transport](6-interfaces.md) | ||
- [6.2 Connection](6-interfaces.md) | ||
- [6.3 Stream Multiplexer](6-interfaces.md) | ||
- [6.3 Swarm](6-interfaces.md#63-swarm) | ||
- [6.5 Peer Discovery](6-interfaces.md#65-peer-discovery) | ||
- [6.2 Peer Routing](6-interfaces.md#62-peer-routing) | ||
- [6.2 Content Routing](6-interfaces.md#62-peer-routing) | ||
- [6.3.1 Distributed Record Store](6-interfaces.md#64-distributed-record-store) | ||
- [6.6 libp2p interface and UX](6-interfaces.md#66-libp2p-interface-and-ux) | ||
- [7 Properties](7-properties.md) | ||
- [7.1 Communication Model - Streams](7-properties.md#71-communication-model---streams) | ||
- [7.2 Ports - Constrained Entrypoints](7-properties.md#72-ports---constrained-entrypoints) | ||
- [7.3 Transport Protocol](7-properties.md#73-transport-protocols) | ||
- [7.4 Non-IP Networks](7-properties.md#74-non-ip-networks) | ||
- [7.5 On the wire](7-properties.md#75-on-the-wire) | ||
- [7.5.1 Protocol-Multiplexing](7-properties.md#751-protocol-multiplexing) | ||
- [7.5.2 multistream - self-describing protocol stream](7-properties.md#752-multistream---self-describing-protocol-stream) | ||
- [7.5.3 multistream-selector - self-describing protocol stream selector](7-properties.md#753-multistream-selector---self-describing-protocol-stream-selector) | ||
- [7.5.4 Stream Multiplexing](7-properties.md#754-stream-multiplexing) | ||
- [7.5.5 Portable Encodings](7-properties.md#755-portable-encodings) | ||
- [7.5.6 Secure Communications](7-properties.md#756-secure-communications) | ||
- [8 Implementations](8-implementations.md) | ||
- [9 References](9-references.md) | ||
The main goal of this repository is to provide accurate reference documentation | ||
for the aspects of libp2p that are independent of language or implementation. | ||
This includes wire protocols, addressing conventions, and other "network level" | ||
concerns. | ||
|
||
## Other specs that haven't made to the main document | ||
## Status | ||
|
||
- [Relay](/relay) | ||
- [PubSub](/pubsub) | ||
The specifications for libp2p are currently incomplete, and we have recently | ||
[defined a process][spec_lifecycle] for categorizing specs according to their | ||
maturity and status. Many of the existing specs linked below are not yet | ||
categorized according to this framework, however, they will soon be updated for | ||
consistency. | ||
|
||
## Contribute | ||
This document replaces an earlier RFC, which still contains much useful | ||
information and is helpful for understanding the libp2p design philosophy. It is | ||
avaliable at [archive/README.md](./archive/README.md). | ||
|
||
Please contribute! [Dive into the issues](https://github.com/libp2p/specs/issues)! | ||
## Index | ||
|
||
Please be aware that all interactions related to multiformats are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md). | ||
- [identify](./identify/README.md) Exchange keys and addresses with other peers | ||
- [mplex](./mplex/README.md) The friendly stream multiplexer | ||
- [pnet](./pnet/README.md) Private networking in libp2p using pre-shared keys | ||
- [pubsub](./pubsub/README.md) PubSub interface for libp2p | ||
- [gossipsub](./pubsub/gossipsub/README.md) An extensible baseline PubSub | ||
protocol | ||
- [episub](./pubsub/gossipsub/episub.md) Proximity Aware Epidemic PubSub for libp2p | ||
- [relay](./relay/README.md) Circuit Switching for libp2p (aka TURN in | ||
networking literature) | ||
- [rendezvous](./rendezvous/README.md) Rendezvous protocol | ||
- [tls](./tls/tls.md) The libp2p TLS Handshake (TLS 1.3+) | ||
|
||
## License | ||
|
||
[CC-BY-SA 3.0 License](https://creativecommons.org/licenses/by-sa/3.0/us/) © Protocol Labs Inc. | ||
[libp2p_implementations]: https://libp2p.io/implementations | ||
[spec_lifecycle]: 00-framework-01-spec-lifecycle.md |
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
# libp2p specification | ||
|
||
<h1 align="center"> | ||
<img src="https://raw.githubusercontent.com/libp2p/libp2p/a13997787e57d40d6315b422afbe1ceb62f45511/logo/libp2p-logo.png" alt="libp2p logo"/> | ||
</h1> | ||
|
||
<a href="http://protocol.ai"><img src="https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square" /></a> | ||
<a href="http://libp2p.io/"><img src="https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square" /></a> | ||
<a href="http://webchat.freenode.net/?channels=%23libp2p"><img src="https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square" /></a> | ||
<a href="https://waffle.io/libp2p/libp2p"><img src="https://img.shields.io/badge/pm-waffle-yellow.svg?style=flat-square" /></a> | ||
|
||
> This document presents `libp2p`, a modularized and extensible network stack to overcome the networking challenges faced when doing peer-to-peer applications. `libp2p` is used by IPFS as its networking library. | ||
Authors: | ||
|
||
- [Juan Benet](https://github.com/jbenet) | ||
- [David Dias](https://github.com/daviddias) | ||
|
||
Reviewers: | ||
|
||
- `N/A` | ||
|
||
## Abstract | ||
|
||
This describes the [IPFS](https://ipfs.io/) network protocol. The network layer provides point-to-point transports (reliable and unreliable) between any two IPFS nodes in the network. | ||
|
||
This document defines the spec implemented in `libp2p`. | ||
|
||
## Status of this spec ![](https://img.shields.io/badge/status-wip-orange.svg?style=flat-square) | ||
|
||
## Organization of this document | ||
|
||
This RFC is organized by chapters described on the *Table of contents* section. Each of the chapters can be found in its own file. | ||
|
||
## Table of contents | ||
|
||
- [1 Introduction](1-introduction.md) | ||
- [1.1 Motivation](1-introduction.md#11-motivation) | ||
- [1.2 Goals](1-introduction.md#12-goals) | ||
- [2 An analysis the state of the art in network stacks](2-state-of-the-art.md) | ||
- [2.1 The client-server model](2-state-of-the-art.md#21-the-client-server-model) | ||
- [2.2 Categorizing the network stack protocols by solutions](2-state-of-the-art.md#22-categorizing-the-network-stack-protocols-by-solutions) | ||
- [2.3 Current shortcomings](2-state-of-the-art.md#23-current-shortcomings) | ||
- [3 Requirements](3-requirements.md) | ||
- [3.1 Transport agnostic](3-requirements.md#34-transport-agnostic) | ||
- [3.2 Multi-multiplexing](3-requirements.md#35-multi-multiplexing) | ||
- [3.3 Encryption](3-requirements.md#33-encryption) | ||
- [3.4 NAT traversal](3-requirements.md#31-nat-traversal) | ||
- [3.5 Relay](3-requirements.md#32-relay) | ||
- [3.6 Enable several network topologies](3-requirements.md#36-enable-several-network-topologies) | ||
- [3.7 Resource discovery](3-requirements.md#37-resource-discovery) | ||
- [3.8 Messaging](3-requirements.md#38-messaging) | ||
- [3.9 Naming](3-requirements.md#38-naming) | ||
- [4 Architecture](4-architecture.md) | ||
- [4.1 Peer Routing](4-architecture.md#41-peer-routing) | ||
- [4.2 Swarm](4-architecture.md#42-swarm) | ||
- [4.3 Distributed Record Store](4-architecture.md#43-distributed-record-store) | ||
- [4.4 Discovery](4-architecture.md#44-discovery) | ||
- [4.5 Messaging](4-architecture.md#45-messaging) | ||
- [4.5.1 PubSub](4-architecture.md#451-pubsub) | ||
- [4.6 Naming](4-architecture.md#46-naming) | ||
- [4.6.1 IPRS](4-architecture.md#461-iprs) | ||
- [4.6.2 IPNS](4-architecture.md#462-ipns) | ||
- [5 Data structures](5-datastructures.md) | ||
- [6 Interfaces](6-interfaces.md) | ||
- [6.1 libp2p](6-interfaces.md#61-libp2p) | ||
- [6.1 Transport](6-interfaces.md) | ||
- [6.2 Connection](6-interfaces.md) | ||
- [6.3 Stream Multiplexer](6-interfaces.md) | ||
- [6.3 Swarm](6-interfaces.md#63-swarm) | ||
- [6.5 Peer Discovery](6-interfaces.md#65-peer-discovery) | ||
- [6.2 Peer Routing](6-interfaces.md#62-peer-routing) | ||
- [6.2 Content Routing](6-interfaces.md#62-peer-routing) | ||
- [6.3.1 Distributed Record Store](6-interfaces.md#64-distributed-record-store) | ||
- [6.6 libp2p interface and UX](6-interfaces.md#66-libp2p-interface-and-ux) | ||
- [7 Properties](7-properties.md) | ||
- [7.1 Communication Model - Streams](7-properties.md#71-communication-model---streams) | ||
- [7.2 Ports - Constrained Entrypoints](7-properties.md#72-ports---constrained-entrypoints) | ||
- [7.3 Transport Protocol](7-properties.md#73-transport-protocols) | ||
- [7.4 Non-IP Networks](7-properties.md#74-non-ip-networks) | ||
- [7.5 On the wire](7-properties.md#75-on-the-wire) | ||
- [7.5.1 Protocol-Multiplexing](7-properties.md#751-protocol-multiplexing) | ||
- [7.5.2 multistream - self-describing protocol stream](7-properties.md#752-multistream---self-describing-protocol-stream) | ||
- [7.5.3 multistream-selector - self-describing protocol stream selector](7-properties.md#753-multistream-selector---self-describing-protocol-stream-selector) | ||
- [7.5.4 Stream Multiplexing](7-properties.md#754-stream-multiplexing) | ||
- [7.5.5 Portable Encodings](7-properties.md#755-portable-encodings) | ||
- [7.5.6 Secure Communications](7-properties.md#756-secure-communications) | ||
- [8 Implementations](8-implementations.md) | ||
- [9 References](9-references.md) | ||
|
||
## Other specs that haven't made to the main document | ||
|
||
- [Relay](/relay) | ||
- [PubSub](/pubsub) | ||
|
||
## Contribute | ||
|
||
Please contribute! [Dive into the issues](https://github.com/libp2p/specs/issues)! | ||
|
||
Please be aware that all interactions related to multiformats are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md). | ||
|
||
## License | ||
|
||
[CC-BY-SA 3.0 License](https://creativecommons.org/licenses/by-sa/3.0/us/) © Protocol Labs Inc. |