探索

本文只做一些初识探索,不介绍具体技术和原理,只是客观场景分析

我自己的看法是,IPFS在未来是有巨大的潜力,只是目前生错了时代,或者说被 加密货币给祸害(?)了。

BT 现在已经可以沦为一种底层技术了。而 PT 则是一个个圈子。

InterPlanetary File System

星际文件系统, 这个名字听起来非常浩大,但实际上也确实如此,设计的本意就是能够跨星际共享文件(但其实是有巨大的资源消耗的)。

搭建 IPFS 非常简单,本文不再赘述,只介绍几个概念。

为什么是IPFS,IPFS有哪些不一样

  1. 第一点,也是非常重要的一点:去中心化,这样就代表了更高的可靠性(相对),更高的安全性(难以篡改)
  2. 如果IPFS仅服务于文件存储,那么它无法进入普通消费者的视线。IPFS另一个特性就是,可以直接提供基于HTTP的服务,那么这样的话普通消费者就可以直接使用,并且自身可以成为节点。
  3. IPFS改变了传统网络寻址结构,不需要传统的DNS(可以兼容DNS)。
  4. IPFS 相当于 每个人都成为CDN节点(非严谨表述),这会带来大量的资源消耗,无论是网络还是存储。
  5. IPFS 难以受到监管。

CID

Content Identity 用于标识文件,如果一个文件在整个网络上重复,那么CID是一致的。

别人可以通过 CID 来去访问这个文件,或永久保存在本地(PIN)

CID: QmRDQ6M22qbd8auHyb4hVAr5pXLiJHxmgTdTsbNbNWMkxo

PIN Service

如果你想提供更好的服务,或没有人PIN你的文件(无法加速),那么你可以选择一个在线的供应商来去把你的文件PIN到服务商那里。

(相当于把静态文件存储到CDN了)

例如:4EVERLAND

传统 DNS 解析

你可以讲你的域名,映射到IPFS上,然后通过IPFS来访问你的网站。这个过程中不需要传统的 HTTP 服务器(nginx, caddy 等)

# 1. Add TXT Records, 
# e.g:testipfs.waynecommand.com
# e.g: /ipns/k51qzi5uqu5dirb4ojis7rvmg5w5iwtycebkka8te7fv6gt9s6d6y23ifagz67
_dnslink.testipfs.waynecommand.com=dnslink=/ipns/k51qzi5uqu5dirb4ojis7rvmg5w5iwtycebkka8te7fv6gt9s6d6y23ifagz67

# 2. Add Cloudflare Gateway (optional)
CNAME: testipfs.waynecommand.com=ipfs.cloudflare.com

这样的话 你就可以直接访问了:

普通域名

https://testipfs.waynecommand.com

IPFS Gateway 解析

https://ipfs.io/ipns/testipfs.waynecommand.com

IPNS 协议

ipns://testipfs.waynecommand.com

IPNS 直接访问

https://ipfs.io/ipns/k51qzi5uqu5dirb4ojis7rvmg5w5iwtycebkka8te7fv6gt9s6d6y23ifagz67

IPNS

IPNS 可以创建 一个指向到 CID 的链接,那么如果CID频繁变动 则不用更新域名的映射。

为什么要有 IPNS,或者说 IPNS 为什么仍然人类不可读:

这里引用Livid写的IPNS一段话

内容寻址是 IPFS 找到内容的最基础的方式。但是会有一个问题是,内容 ID 其实是内容的 hash。因此如果内容本身如果发生了任何变化,那么 hash 也会变。所以如果是用内容 ID(CID)来绑定给 ENS 的话,每更新一次博客就去烧 gas 重新设置 ENS 的 Content Hash,在现有的 gas fee 情况下,就太贵了。

而 IPNS 可以解决这个问题。每一个 IPNS 类似加密货币的钱包,会有一对 public key 和 private key。public key 就是 IPNS 的对外的地址,而 private key 可以用来修改这个对外地址所对应的 CID。

其中 ENS 到 IPNS 这层绑定,会需要一次性的 gas 费。

IPNS 到 CID 这一层,是免费的。

这样我们就可以实现用 IPFS 更新内容之后,ENS 上的网站也就能够动态更新,同时只需要消耗一次性的 gas 费。

IPFS 的 IPNS 解析

# IPNS
ipfs name resolve k51qzi5uqu5dkczezx3wje1dizdk7rta8uc50a5o9ix4wmzqniacrdbfapt8cf

# ENS
ipfs name resolve olivida.eth

通过 ENS 服务解析

https://dns.eth.limo/dns-query?name=vitalik.eth

ENS

https://app.ens.domains

你可以以非传统方式 去购买一个 .eth 域名,这个域名控制 比较特殊,可以直接绑定到 IPNS 上。

且 ENS 本身就是分布式的。

ENS的解析链路: ENS -> IPNS -> CID

ENS 加速器(Limo)

但是 众所周知,IPFS的利用率还不高,这就造成了访问太慢的问题,但是有一种极其简单的加速器,只需要加个后缀,就可以体验飞速的访问。

供应商:

你可以用 这些加速器 直接访问 IPNS 或者 ENS。

IPNS

https://k51qzi5uqu5dirb4ojis7rvmg5w5iwtycebkka8te7fv6gt9s6d6y23ifagz67.eth.sucks/#/

ENS

https://planetable.eth.limo

BitTorrent

BT协议其实大家都很熟悉了,那这里就不再赘述。

客户端

  • transmission
  • qBitTorrent

基本原理

它的主要原理是需要把提供下载的文件虚拟分成大小相等的块,块大小必须为2k的整数次方(由于是虚拟分块,硬盘上并不产生各个块文件)
并把每个块的索引信息和Hash验证码写入种子文件中;所以,种子文件就是被下载文件的“索引”。
下载时,BT客户端首先解析种子文件得到Tracker地址,然后连接Tracker服务器。
Tracker服务器回应下载者的请求,提供下载者其他下载者(包括发布者)的IP。
下载者再连接其他下载者,根据种子文件,两者分别告知对方自己已经有的块,然后交换对方所没有的数据。
下载者每得到一个块,需要算出下载块的Hash验证码与种子文件中的对比,如果一样则说明块正确,不一样则需要重新下载这个块。这种规定是为了解决下载内容准确性的问题。

一般的HTTP/FTP下载,发布文件仅在某个或某几个服务器,下载的人太多,服务器的带宽很易不胜负荷,变得很慢。而BitTorrent协议下载的特点是,下载的人越多,提供的带宽也越多,下载速度就越快。同时,拥有完整文件的用户也会越来越多,使文件的“寿命”不断延长

DHT (Distributed Hash Table)

分布式哈希表,这里使用的算法叫Kademlia(在eMule中也有使用,称为Kad网络,具体实现协议有所不同)。

DHT 可以在 不依赖 Tracker Server 的情况下 或 减少依赖的情况下,实现下载。DHT 可以自动发现其他节点,然后自动链接。

我们可以简单想一下,我们所有人都在一个 哈希表里,种子作为哈希表的Key,所有的人作为 Value,那么我们就可以通过哈希表,找到我们想要下载的文件,然后下载。

分布式哈希表 则是解决,怎么把所有人都放到一个哈希表里。其实也是IPFS主要要解决的问题。

PEX (Peer exchange)

Peer Exchange 允许一组 peers 中的成员自己在 swarm 中交换群组成员信息,但Peer Exchange 并没有完全的消除对 Tracker 的依赖
不过减少对 Tracker 的轮询,组员可以自行交换信息。

Private Torrent

Private,即小团体,小社群的 Swarm,PT 主要靠 Tracker Server,以及你个人的 Token,这样的话 就可以完美的控制访问和追踪个人的行为。

PT通常进行内部资料共享,中心化的服务器成本高,尤其是Tracker Server,它的负载 取决于活跃用户。

refs

IPFS

BT & PT