PCP: 一个P2P文件传输工具
2022-06-24 本文已影响0人
夕午wuw
PCP:Peer Copy
1. PCP简介
基于libp2p实现的,完全去中心化的p2p文件传输工具。
传统的p2p文件传输工具,比如croc和magic-wormhole都需要一个公网固定IP的中继服务器,来进行p2p节点的互相发现、数据中转、NAT穿透。这样的p2p应用,仍然避免不了单点故障、受运营者监管的问题。
2. PCP工作原理
PCP的使用方法非常简单,主要思想就是发送方和接收方可以分别独立生成相同的标识符
,然后双方在DHT表中通过这个标识符来 碰头。下面分别从发送方与接收方进行介绍。
发送方:
- 运行
pcp send $FILE
命令,就会出现四个随机的单词。使用四个随机单词的idea来自比特币第39号改进提案:BIP39 - 第一个单词会被翻译成由整数表示的Channel ID,范围从0-2047。
PCP
通过mDNS, 将/pcp/{unix-timestamp}/{channel-id}
作为discovery ID,广播到局域网中。并且将这个discovery ID的Hash(IPFS CID)
传到IPFS的DHT当中,作为Provider ID。实现局域网以及广域网的p2p节点发现。{unix-timestamp}
是由当前的时间减去五分钟而来 (It's truncated to the most recent 5-minutes time slot),为了减少碰撞、网络延迟、节点间时钟不统一、DHT节点间通信、网络延迟等问题的影响。一般来说,Provider ID可以在DHT中保留24小时。/PCP
是IPFS中的协议前缀。
接收方:
- 运行
pcp receive four-words-from-above
命令。接收方会采用第一个单词以及时间戳,来生成一个相同的discovery ID。为了缓解时钟不同步、网络延迟等问题的影响,接收方会并行地向DHT查询,过去5分钟时间间隙内的所有 (queries the DHT in parallel for the previous 5 minutes time slot)。查询DHT中的其他peer节点;同时也会通过mDNS在局域网中查询。
完成 碰头 后,即接收方在DHT中查询到了对应的Discovery ID:
- p2p节点连接:这一步完全通过Libp2p实现。
- 鉴权:双方完成一次PAKE协议,将四个单词组成的弱密码,替换成一个安全性高的会话密钥。
- 文件传输:发送方先传输文件的大小、名称等信息,待接收方确认后,进行文件传输。
3. PCP使用示例
发送方:
$ pcp send my_file
Code is: bubble-enemy-result-increase
On the other machine run:
pcp receive bubble-enemy-result-increase
接收方:
$ pcp receive bubble-enemy-result-increase
Looking for peer bubble-enemy-result-increase...
4. PCP现阶段弊端以及未来改进
- DHT查询的速度很慢,通常会花费2-3分钟
- libp2p对于NAT的处理并不优秀,不能很好的穿透NAT后面的节点。
- 未来将考虑利用本地IPFS节点,来加速peer间 碰头 的问题