IPFS–点对点高效传输实践

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

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

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

一 初始化

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

>ipfs init

该命令生成.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.net1.45 GiB / 1.45 GiB [=================================================] 100.00%

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

五 文件下载

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

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

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

六 感受

(1)优点:

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

(2)不足:

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

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

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

  1. 新书推荐 |《计算机安全:原理与实践(原书第4版)》

    新书推荐 <计算机安全:原理与实践(原书第4版)> 长按二维码 了解及购买 深入浅出地介绍计算机安全的原理,计算机安全领域的知名教材. 编辑推荐 本书作者William Stallings ...

  2. 【实践】强化学习在招聘推荐冷启动优化中的应用实践

    今天给大家带来58同城高级算法工程师沈冰阳所做的分享<强化学习在招聘推荐冷启动优化中的应用实践.pdf>,关注招聘推荐.强化学习.冷启动.搜索及推荐的伙伴们别错过啦!(到小程序:省时查报告 ...

  3. 四、点对点的传输层【网络全景图分析系列】

    0. 回顾 在前面几章中,我们分别经过了 很物理的物理层:提供了机械,电气,功能,过程特性(类似于马路,航线,水面) 透明成帧的数据链路层:封装成帧[比特到帧],透明传输[啥bit都能传],差错检测[ ...

  4. 一个简单的点对点文件传输程序

    一个简单的点对点文件传输程序 黄定伍   402431143 在网络飞速发展的今天,信息的共享给我们带来了莫大的益处,而文件传输又是网络数据交换的主要形式,谈到文件传输大家可能会想到FTP文件传输协议 ...

  5. 如何实现文件高速传输,推荐镭速高速文件传输解决方案

    随着互联网的发展,文件传输越来越频繁,如何实现文件高速传输已经越来越成为企业发展过程中需要解决的问题, 在当今的业务中,随着与客户和供应商以及内部系统的所有通信的数据量不断增加,对高速文件传输解决方案 ...

  6. 西圣ares pro无线蓝牙耳机 :挑战有线耳机稳定高效传输力

    无线蓝牙耳机,摆脱了线缆的束缚,给用户带来了更便捷的听觉体验.然而,很多人心目中,都有这样的固有印象,那就是:无线蓝牙耳机的声音传输速度.传输稳定性.传输的声音品质,都是无法与有线耳机相比的.其实,这 ...

  7. chatgpt赋能python:Python用什么软件搜题?推荐4款具有高效与准确性的题库搜索工具

    Python用什么软件搜题?推荐4款具有高效与准确性的题库搜索工具 Python是一种高级编程语言,基于其简洁的语法和强大的扩展能力,Python在越来越多的领域中得到广泛应用.其中,Python在教 ...

  8. TensorFlow在美团外卖推荐场景的GPU训练优化实践

    省时查报告-专业.及时.全面的行研报告库 省时查方案-专业.及时.全面的营销策划方案库 知识图谱在美团推荐场景中的应用实践 搜索场景下的智能实体推荐 机器学习在B站推荐系统中的应用实践 小红书推荐系统 ...

  9. YouTube高效传输策略:节省14%带宽 用户体验提升

    视频平台会侦测用户端的带宽来调整码率及分辨率,但通常只考虑到编码器的比特率率--质量关联,忽略了用户的可用带宽影响.YouTube团队通过让视频流匹配用户带宽,不仅节省了带宽,还有效提升了用户主观体验 ...

最新文章

  1. Spring Boot 整合Pagehelper(为什么PageHelper分页不生效)
  2. GPT-3成精了,万物皆文本时代来临!10年内通过图灵测试?
  3. c#中为datagrid添加下拉列表框
  4. python gpu加速库比matlab快吗_为什么异步库比此I/O绑定操作的线程慢?
  5. yaml,json,ini这三种格式用来做配置文件优缺点
  6. php openssl加密数据长度,PHP使用openssl解密数据(用mcrypt加密)
  7. Yolo家族算法分析
  8. ibatis3获得总记录数,同时计算数据分页?
  9. Theano 中文文档 0.9 - 7.2.1 起手式 —— 代数
  10. 2017 ACM-ICPC南宁网络赛: J. Minimum Distance in a Star Graph(BFS)
  11. chaos-monkey-spring-boot小试牛刀
  12. JavaWeb的目录结构(1)
  13. 快手短视频解析去水印原理及源码,sign+盐签名算法,获得无水印播放地址
  14. 腾讯手游助手选择不了服务器失败,腾讯手游助手启动模拟器失败的解决方法
  15. 分享几个国外模板网站(网页素材的下载)
  16. 【励志】知乎热门:我是怎么变自律的?
  17. 路由器信号总是无法与手机连接服务器,手机搜不到路由器信号_手机无法搜到路由器信号怎么办?-192路由网...
  18. 林子雨教程中sqoop安装过程时区问题解决
  19. Redis系列:Redis持久化机制与Redis事务
  20. 机器学习技术在日常生活和商业领域的应用有哪些,主要带来了什么商业收益?

热门文章

  1. ios 设置主题的三方库
  2. MATLAB图像处理与计算机视觉(2):在图像上取点划线
  3. kali linux aria2c 开机启动
  4. python之斩根除草,破开隐藏文件的诡计
  5. Vue.js - 插件的使用
  6. 【大数据】城市公交网络分析与可视化(三):获取公交站点信息并可视化站点重要程度
  7. 微软 MSR Image Recognition Challenge 2016(IRC@ICME) 测试demo
  8. tuend\stratis\vdo总结和案例
  9. Windows QT创建或者载入项目 No valid kits found 或者Kits显示感叹号
  10. 关于异常处理,应该这么回答