IPFS - 一个基于点对点网络的超媒体协议

2022-05-03

本文章首发于语雀! 通过各种高科技功能同步到Hajeekn 的博客

IPFS's Author

IPFS's Author 是 Juan Benet Juan Benet在 2014 年创建了 Protocol Labs (协议实验室) 协议实验室旗下的项目:

  • IPFS
  • FileCoin

协议实验室旨在如何构建下一代互联网

What's IPFS?

依照官网的介绍,总的来说,IPFS 就是一种点对点超媒体协议,它可以使网络更快、更安全、更开放 本质上来说,它就是一种去中心化互联网(Peer to Peer) ≈ P2P 没错,就是孽种 P2P 下载器 这么牛的项目怎么是 P2P 下载器呢? P2P 下载器只是个披着羊皮的狼 P2P(Peer to Peer)依靠用户群交换信息 以 number.exe 为例 当你上传后,无数个 Node(用户) 会瓜分你的 number.exe 他们将你的文件分成许多分片,瓜分分片 他们在瓜分的同时会获得奖励

是不是听起来很神奇?对的,你没有付出任何东西,别人却能获得奖励,而且你既满足储存文件的需求,储存你文件的人也能得到金钱.这种机制,叫做 FileCoin.你可以把它想象成 Bittorrent+BitCoin 的结合物,实际上他就是这样的.当然不完全是,但核心理念就是这样的.只不过,BitCoin 付出的是算力,而 FileCoin 付出的是硬盘.

**摘自 **ChenYFan の Blog 这是 IPFS の不权威原理图(来自 ChenYFan の Blog) 所以,IPFS 相对于响应式请求(HTTP(S) / FTP)不同 传统的响应式请求由一个主服务器(或主集群)处理每一个请求,并贡献内容 而 IPFS 基于 Peer to Peer 技术,让每个 Node 都贡献,没有中心服务器(去中心化)

更细致的解释

IPFS 是一个基于 Git 模型版本管理 & DHT & CBA & Hash 等的产物 它基于 DHT(分布式哈希表) 进行寻址 而传统的响应式请求由 LBA(基于位置的寻址) 而这样,响应式请求的缺点就暴露了出来 LBA(基于位置的寻址) 它在查找时所看重的信息是位置,就好比一个网址 https://blog.slqwq.cn/link/如果这个位置被删除了,链接位置转移了,他就会暴露出404 Not Found 错误 而 IPFS 所采用的 DHT(CBA 基于内容的寻址)就没有这个缺点 它在查找时所看重的信息是内容,不管你位置在哪里,只要找到的内容符合要查找的信息,那他就是正确的

最后

基于响应式请求(中心化网络)还有一个超级大大大大的弊端 那就是 非常容易引入审查 也就是类似于我们国家的 **Great Firewall of China**** (GFW 是一个分布式的入侵检测系统,并不是一个严格意义上的防火墙)** 每个国家的 **gov** 可以很方便的 **BAN** 掉某个网站或者应用 引入一个具体事例 在 2017 年, **Turkey's GOV**就用国家安全的理由禁掉了维基百科 当然,去中心化也不能避免掉 Firewall 的屏蔽,只是不那么容易屏蔽掉罢了

Use IPFS - IPFS Client

进入 IPFS-Desktop の Releases 找到需要的客户端下载并安装 弹出防火墙警报请一定要允许 在文件处可以上传文件 上传点击导入即可

接下来,重点来了! > ipfs 分享文件有两种方式,是 ipfs 和 ipns,前者采用文件 hash 辨别文件,文件内容一旦改变,原来的链接无法更新,链接格式为 https://ipfs.io/ipfs/QmZCvMHrE56VqsejmG53xd9bW4RZjtFpLz46QMQjA81orL ;后者采用用户 id 辨别,内容允许更新,但是用户在线时间过短会导致无法同步,并且有可能暴露用户信息,后者格式为: https://ipfs.io/ipfs/QmQQKZphgJdEGhTp18NRvVdSJ3RJArRst2keKk3tZvmfPz?filename=index.html . > 如果你只是单个文件网页,此处比较建议使用 ipfs,ipns 可能离线时间过长导致无法下载。具体看个人所好。 > ipfs 链接获取:点击 ··· ,选择复制哈希,在前面加上网关域名即可。 > ipns 连接获取:点击 ··· ,选择分享,复制链接即可。 > 在善用技术上网的前提下访问 https://ipfs.io/ipfs/QmZCvMHrE56VqsejmG53xd9bW4RZjtFpLz46QMQjA81orL 显示目标界面 > 请注意,每次上传后一定要先访问一遍资源,否则文件是不会上传到 ipfs 服务器的!

**摘自 **ChenYFan の Blog

Use IPFS - IPFS Gateway

JSProxy - IPFS Gateway

因为 IPFS 默认的网关被 FW 了 所以我们可以通过 Worker JSProxy 的方式解锁你自己的网关

addEventListener("fetch", (event) => {
  let url = new URL(event.request.url);
  url.hostname = "cloudflare-ipfs.com";
  let request = new Request(url, event.request);
  event.respondWith(fetch(request));
});

粘贴进去,访问 Worker 地址就能看到 404 了 然后在 IPFS Client 里复制地址,接在后面就能打开你上传的文件了

JSProxy - Cloudflare IPFS Gateway

我们可以通过 Worker JSProxy 的方式解锁你自己的 CNAME

addEventListener("fetch", (event) => {
  let url = new URL(event.request.url);
  url.hostname = "cloudflare-ipfs.com";
  let request = new Request(url, event.request);
  event.respondWith(fetch(request));
});

粘贴进去,就变成了基于 CIG 的你自己的 IPFS 网关

Use IPFS - Build Blog

搭建博客就等下次吧