【推荐了解】IPFS--点对点高效传输实践

IPFS–点对点高效传输实践

IPFS,有着远大的志向要成为“星际文件系统--InterPlanetary File System”。 
在我看来,它确实是一种具有代表性的点对点分布式文件系统,
与传统互联网规则不同之处在于,IPFS以内容进行寻址,而不是先找主机再找内容的方式。

本文进行了一次IPFS点对点文件传输的尝试。
请注意,本次文件传输的前提是:
(1)已知文件发送方
(2)获得文件索引
(3)文件发送方数据在线

IPFS下载与安装过程网上教程很多,不再赘述。
如果有问题,可以留言,看到就回答

一 初始化

安装IPFS之后,在收、发节点分别进行IPFS初始化。
本实践中发送方是我的笔记本电脑,接受方是远程阿里云主机。

>ipfs init

该命令生成.ipfs目录结构如下:
.ipfs文件目录
其中,keystore用于存放私钥。

二 启动节点

在收发双方分别执行:

ipfs daemon

输出信息示例如下:

Initializing daemon...
go-ipfs version: 0.6.0
Repo version: 10
System version: amd64/linux
Golang version: go1.14.4
Swarm listening on /ip4/127.0.0.1/tcp/4001
Swarm listening on /ip4/127.0.0.1/udp/4001/quic
Swarm listening on /ip4/192.168.1.127/tcp/4001
Swarm listening on /ip4/192.168.1.127/udp/4001/quic
Swarm listening on /ip6/xxxxxxx人为匿了xxxxxxxxxx/tcp/4001
Swarm listening on /ip6/xxxxxxx人为匿了xxxxxxxxxx/udp/4001/quic
Swarm listening on /ip6/xxxxxxx人为匿了xxxxxxxxxx/tcp/4001
Swarm listening on /ip6/xxxxxxx人为匿了xxxxxxxxxx/udp/4001/quic
Swarm listening on /ip6/::1/tcp/4001
Swarm listening on /ip6/::1/udp/4001/quic
Swarm listening on /p2p-circuit
Swarm announcing /ip4/127.0.0.1/tcp/4001
Swarm announcing /ip4/127.0.0.1/udp/4001/quic
Swarm announcing /ip4/192.168.1.127/tcp/4001
Swarm announcing /ip4/192.168.1.127/udp/4001/quic
Swarm announcing /ip6/xxxxxxx人为匿了xxxxxxxxxx/tcp/4001
Swarm announcing /ip6/xxxxxxx人为匿了xxxxxxxxxx/udp/4001/quic
Swarm announcing /ip6/::1/tcp/4001
Swarm announcing /ip6/::1/udp/4001/quic
API server listening on /ip4/127.0.0.1/tcp/5001
WebUI: http://127.0.0.1:5001/webui
Gateway (readonly) server listening on /ip4/127.0.0.1/tcp/8080
Daemon is ready

节点此时开始利用4001端口接受peers信息,建立联系。
我们可以访问5001端口获得可视化页面。
【页面中显示的Peers ID在每次节点初始化( ipfs init) 的时候都会更新】
可视化页面

三 连接节点

收发双方均可进行发起链接,方法有两种:
(1)方法一:页面操作
连接节点--页面操作
点击File后,在当前页面选择“+Import”。之后在候选框中选择 from IPFS
输入对方提供的节点索引,形如:

/ip4/102.92.10.209/udp/4001/quic/p2p/QmZ3DTrfPdahviV2xV9Ni4LXND8BALbykRC2zqNLonw

其中:
ip4 = ipv4地址型;
102.92.10.209 =ipv4地址;
4001 = 对方监听端口号
QmZ3DTrfPdahviV2xV9Ni4LXND8BALbykRC2zqNLonw = 对方节点ID

该链接获取方式:
在对方主机通过ipfs id命令进行查看,在Addresses处复制一条即可(建议复制公网IP)。
示例:

>ipfs id
输出:
{
	"ID": "QmZ3DTrfPdahviV2xV9Ni4LXND8BALbykRC2zqNLonw",
	"PublicKey": "CAASpgIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ/s+ocPZBJv4L5FEHhd3pty0GKC4wEOoHXAgRxwhjgO7ngmOXWsseG7hWjR7IAKpBZEXPnKDsZIYqsPt6cwQrqMWKPwzJaRzo4qmSTO774+mqOTE4daBfnG6nENb/fuZc/C6WHL4+SGyUu97TnzYqKGc/rDuTqzE9whV70wHY2K5eFZugvzm7iFqSHmAhpxjp7XfRCyN7x8af4HzidhyzZjSSfCbJJOKL55plgeqOV/YY1xBfM3xzEDAQXpvskNrem4KrG/XwSZHRr62YK7MUxjXsq1FkTh5YbGuhqu3Q7rsb6SIbTvGF37+o2V2gRC2KVzOfBWzISJRbKlQ8fSgRAgMBAAE=",
	"Addresses": [
		"/ip4/127.0.0.1/tcp/4001/p2p/QmZ3DTrfPdahviV2xV9Ni4LXND8BALbykRC2zqNLonw",
		"/ip4/172.17.55.9/tcp/4001/p2p/QmZ3DTrfPdahviV2xV9Ni4LXND8BALbykRC2zqNLonw",
		"/ip6/::1/tcp/4001/p2p/QmZ3DTrfPdahviV2xV9Ni4LXND8BALbykRC2zqNLonw",
		"/ip4/127.0.0.1/udp/4001/quic/p2p/QmZ3DTrfPdahviV2xV9Ni4LXND8BALbykRC2zqNLonw",
		"/ip4/172.17.55.9/udp/4001/quic/p2p/QmZ3DTrfPdahviV2xV9Ni4LXND8BALbykRC2zqNLonw",
		"/ip6/::1/udp/4001/quic/p2p/QmZ3DTrfPdahviV2xV9Ni4LXND8BALbykRC2zqNLonw",
		"/ip4/102.92.10.209/tcp/4001/p2p/QmZ3DTrfPdahviV2xV9Ni4LXND8BALbykRC2zqNLonw",
		"/ip4/102.92.10.209/udp/4001/quic/p2p/QmZ3DTrfPdahviV2xV9Ni4LXND8BALbykRC2zqNLonw"
	],
	"AgentVersion": "go-ipfs/0.6.0/",
	"ProtocolVersion": "ipfs/0.1.0"
}

(2)方法二:命令行
和上述步骤相同,在对方主机用命令行通过 ipfs id 查询peers节点连接索引。
接着,在命令行输入:

ipfs bootstrap add  /ip4/102.92.10.209/udp/4001/quic/p2p/QmZ3DTrfPdahviV2xV9Ni4LXND8BALbykRC2zqNLonw

即指定对方节点为seed节点优先连接。由于网络问题,该环节时间可能较长(本次测试3min左右)。

补充一行命令ipfs ping,用来检验连通性和时延:

ipfs ping /ip4/102.92.10.209/udp/4001/quic/p2p/QmZ3DTrfPdahviV2xV9Ni4LXND8BALbykRC2zqNLonw

四 文件上传

当连接建立后,即ipfs ping可Ping 通时,发送端可以开始进行文件上传。
【以下代码均为真实数据】

>ipfs add 20w_address.net 
added QmfN7mWDfChb9PMubEW9nC39mk6PXdX625wEtHz7kBTraP 20w_address.net
 1.45 GiB / 1.45 GiB [=================================================] 100.00%

上传过程一般为秒级,因为只需本地进行文件hash处理,将最终的文件hash(默克尔图的根哈希)上传网络即可。

五 文件下载

当文件上传成功后,在接收端进行:

>ipfs get QmfN7mWDfChb9PMubEW9nC39mk6PXdX625wEtHz7kBTraP
Saving file(s) to QmfN7mWDfChb9PMubEW9nC39mk6PXdX625wEtHz7kBTraP
 1.45 GiB / 1.45 GiB [============================================] 100.00% 8m4s

实践中传输时间为8m4s,后续进行上传下载时均保持较高的速度,不需要重新进行节点发现。

六 感受

(1)优点:

a)高效传输。通过测试发现,IPFS进行点对点文件传输时更多的时间损耗在于节点发现部分,
单从节点间信息传输来看,其性能远优于百度w盘 (没用过会员,不知道会员速度)
b)私密性好。点对点分享减少了第三方中转环节,具有更好的数据隐私性。
c)去中心化。数据分散存储便于避免单点故障,可以多点存储可以有力提升下载速度。

(2)不足:

a)节点发现较慢。节点之间的发现过程费时较多,不确定性较大,用户体验差。
b)需要发送方在线。IPFS(特别在文件发布初期)需要发送者保证数据在线,却无法得知接收者何时使用。
c)用户体验不好。IPFS目前更多功能仍依赖API调用,并不利于非专业用户快速上手。

结束语:
有时候,缺陷代表着希望。

猜你喜欢

转载自blog.csdn.net/weixin_43347204/article/details/107888269