libp2p: libp2p网络栈的Python实现
项目描述
py-libp2p
警告
py-libp2p是一个正在开发中的实验性仓库,仍在开发中。我们目前不建议在生产环境中使用py-libp2p。目前,CI已关闭tests_interop
,许多tests
测试失败。WIP。
libp2p网络栈的Python实现
更多内容请参阅ReadTheDocs上的文档。查看发行说明。
维护者
请注意,tests/core/test_libp2p/test_libp2p.py中包含两个libp2p主机之间的端到端消息测试,这是我们概念证明的主要部分。
功能分解
py-libp2p旨在与标准libp2p模块保持一致。以下是我们已经开发、正在开发以及未来可能开发的模块分解。
说明::green_apple: 完成 :lemon: 进行中 :tomato: 缺失 :chestnut: 未计划
libp2p节点 | 状态 |
---|---|
libp2p |
:green_apple |
标识协议 | 状态 |
---|---|
标识 |
:lemon |
传输协议 | 状态 |
---|---|
TCP |
:green_apple |
UDP |
:tomato |
WebSockets |
:chestnut |
UTP |
:chestnut |
WebRTC |
:chestnut |
SCTP |
:chestnut |
Tor |
:chestnut |
i2p |
:chestnut |
cjdns |
:chestnut |
蓝牙LE |
:chestnut |
音频TP |
:chestnut |
Zerotier |
:chestnut |
QUIC |
:chestnut |
流复用器 | 状态 |
---|---|
multiplex |
:green_apple |
yamux |
:tomato |
benchmarks |
:chestnut |
muxado |
:chestnut |
spdystream |
:chestnut |
spdy |
:chestnut |
http2 |
:chestnut |
QUIC |
:chestnut |
协议复用器 | 状态 |
---|---|
multiselect |
:green_apple |
交换机(Swarm) | 状态 |
---|---|
交换机 |
:green_apple |
拨号堆栈 |
:green_apple |
对等发现 | 状态 |
---|---|
引导列表 |
:tomato |
Kademlia DHT |
:chestnut |
mDNS |
:chestnut |
PEX |
:chestnut |
DNS |
:chestnut |
内容路由 | 状态 |
---|---|
Kademlia DHT |
:chestnut |
floodsub |
:green_apple |
gossipsub |
:green_apple |
PHT |
:chestnut |
对等路由 | 状态 |
---|---|
Kademlia DHT |
:chestnut |
floodsub |
:green_apple |
gossipsub |
:green_apple |
PHT |
:chestnut |
NAT穿越 | 状态 |
---|---|
nat-pmp |
:chestnut |
upnp |
:chestnut |
外部地址发现 |
:chestnut |
STUN-like |
:chestnut |
线路交换中继 |
:chestnut |
数据包交换中继 |
:chestnut |
交换 | 状态 |
---|---|
HTTP |
:chestnut |
Bitswap |
:chestnut |
Bittorrent |
:chestnut |
共识 | 状态 |
---|---|
Paxos |
:chestnut |
Raft |
:chestnut |
PBTF |
:chestnut |
Nakamoto |
:chestnut |
基本两节点通信说明
核心概念
(非规范性,适用于团队笔记,非参考)
libp2p堆栈的几个组件在建立两个节点之间的连接时参与其中
- 主机:libp2p网络中的一个节点。
- 连接:libp2p网络中两个节点之间的第三层连接。
- 传输:创建连接的组件,例如TCP、UDP、QUIC等。
- 流:在连接之上表示不同主题的并行对话的抽象,每个对话都由一个协议ID标识。通过复用器在连接之上分层多个流。
- 复用器:负责将发送到流上的消息包裹在一个标识该流的外壳中,通常通过ID。另一个复用器解包消息并根据流标识将其内部路由。
- 安全通道:可选地在连接之上建立安全、加密和认证的通道。
- 升级器:一个组件,它从传输返回的原始第三层连接中提取,并执行安全和复用协商,以在流可以打开的上面建立安全、复用的通道。
主机X和Y之间的通信
(非规范性,适用于团队笔记,非参考)
发起连接:主机是libp2p网络中能够与其他节点通信的节点。为了使X和Y能够相互通信,必须有一个主机发起连接。假设X将发起连接。X首先打开到Y的连接。所有实际通信都将在该连接上进行。
通过单一连接使用多种协议进行通信:X 和 Y 可以使用不同的协议通过相同的连接进行通信,多路复用器将根据特定协议的消息适当地路由到该协议的特定处理函数,从而允许每个主机使用不同的函数处理不同的协议。此外,我们可以为给定的协议使用多个流,使得相同的协议和相同的底层连接可以用于节点 X 和 Y 之间关于不同主题的通信。
为什么使用多个流?:使用相同连接进行多个流的目的是为了避免在 X 和 Y 之间有多个连接的开销。为了使 X 和 Y 能够区分不同流和不同协议上的消息,使用多路复用器在发送消息时对消息进行编码,在接收到消息时对消息进行解码。多路复用器通过在要发送的任何消息的开头添加一个包含流 ID(以及一些其他信息)的头部来对消息进行编码。然后,消息通过原始连接发送,接收主机将使用其多路复用器对消息进行解码,即确定消息应被路由到哪个流 ID。
项目详情
下载文件
下载您平台的文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。
源分发
构建分发
libp2p-0.2.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e3fbbd9986c546447886d4a2408892a58319137cba38592e9361bbe68bec549f |
|
MD5 | 6115747a15d6e81eb04e1cb7b8ee507a |
|
BLAKE2b-256 | 6e3069ab7bf3eab8a55fd67fa40a6eb75215903956cab5d5f06940c151081d7b |
libp2p-0.2.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 61be1ddb282a9ba90d09e125324cfdb2c99e1a5414ec3c6d55af25eb868836c0 |
|
MD5 | 6bf0099a6a0f27aa9ab4d2a303d6cc3f |
|
BLAKE2b-256 | 4aeca0d4d32cadc834fcde931e625f1ff6756373c15ce6fb5dd65f961ba54187 |