[技术推荐] IPFS(InterPlanetary File System/星际文件系统) -- 有趣的去中心化,分布式网络
-
什么是IPFS?
IPFS(InterPlanetary File System,星际文件系统) 是一种去中心化的文件存储和共享协议,旨在替代传统的中心化文件存储方式,如HTTP和FTP。它通过分布式网络来存储和共享文件,具有高效、安全和持久的特点。
内容寻址
传统互联网使用位置寻址(如'https://example.com/file.jpg'),你通过"去哪找"来获取文件。
而IPFS使用内容寻址——基于文件内容的"指纹"来识别文件,而不是它的位置。这意味着什么?
每个文件被分割成小块,每块通过加密哈希函数生成唯一指纹
整个文件获得一个CID(Content Identifier,内容标识符),这是文件的"数字身份证"
无论文件存储在世界哪个角落,只要你有CID,就能获取完全相同的文件
文件内容哪怕改动一个字节,CID就会完全不同,确保你拿到的是原版IPFS的操作步骤
存储:用户将文件上传到IPFS网络中,IPFS会将文件分散存储在多个节点。
寻址:IPFS通过文件的内容生成一个唯一的哈希值,可以通过这个值来查找文件。
下载:用户通过文件的哈希值来请求文件下载,IPFS会从网络中的多个节点上获取文件的不同片段,并将它们组装成完整的文件。
共享:用户可以将自己的文件分享给其他用户,其他用户可以通过文件的哈希值来获取文件。
小声BB:可以用来部署Blog等静态网页,真不错
如何使用?
PC端可使用命令行工具Kubo,其图形化界面IPFS Desktop,浏览器扩展IPFS Companion(需要搭配以上两个中的一个)
命令行(Windows应该差不多?) + WebUI
$ ipfs init #初始化IPFS $ ipfs daemon #启动服务 $ ipfs repo gc #清除未pin的文件
Desktop(推荐)
开启挂后台即可
一般人有什么用?
- 当分享盘(注:有点耗硬盘空间)
- 挂博客/静态网页 < 譬如这样(确保IPFS开启)
各界面是什么?完全看不懂
WebUI (以IPV4为准,默认在http://localhost:5001/webui)
Desktop打开就是↑介绍页面,没啥用(点击IPFS左上角图标即可)
状态
可以查看你的IPFS占用,网络带宽(你用了多少[接收],别人用了多少/你上传了多少[发送])
文件
点击导入
可以托管你的文件/静态网站
是否发现每个文件夹下面有Qmxxxx样式的文字?这就是CID
TIps:除了Qm开头的还有bafy开头和k51开头的
你只需要localhost:8080/ipfs/{CID}即可访问!
若目录下有index.html,则会被浏览器渲染为网页
(注:上传文件/文件夹会消耗一份同等与文件/文件夹大小的空间--ipfs复制了一份)来自IPFS路径
通过CID导入别人的文件/文件夹
如何下载?
文件/文件夹右边三个点-> 下载(若是文件夹会被打包为.tar格式的压缩包)
(或者wget -r -np -nH --cut-dirs=1 -P {你自定义文件夹名称}
http://localhost:8080/{ipns/ipfs 不是k51开头的选ipfs就行}/{cid})浏览 -- 没啥用 前三个分别是阿波罗计划的图片存档,XKCD网站的梗图存档,维基百科的IPFS镜像(英语),其余没啥用
节点
你连接到节点才能使用IPFS,越多越好!配置
(除了公共网关和IPNS发布密钥,其余的对于非高级用户没啥用)
本地网关是(默认端口8080)localhost:{端口}/{ipns/ipfs}/{CID}譬如:localhost:8080/ipfs/Qmxxxxx
那么如果对方没有安装IPFS如何访问呢?
这里就需要用到公共网关了!
(注:官方仅维护https://dweb.link和https://ipfs.io,且都无法在中国大陆使用)这里的子域名网关是什么?
emm...格式大概是这样的:{CID ipfs一般bafy开头}.{ipns/ipfs}.{host:port},例子:
bafyxxxxxxx.ipfs.localhost:8080
或者k51xxxxxx.ipns.localhost:8080
路径网关
{host:port}/{ipns/ipfs}/{CID},譬如:localhost:8080/ipfs/Qmxxxxxxxx
什么是IPNS发布密钥
这就要提到上文所述:" 文件内容哪怕改动一个字节,CID就会完全不同,确保你拿到的是原版"
那么如果我需要更改一点东西,譬如文本...文件...那么CID就会改变,这就蛋糕了,这时候,你或许就需要
IPNS(IPNS全称是Inter-Planetary Naming Service,星际命名系统)了!
简单来说,就是创建一个密钥,然后文件 -> 找个要发布的目录/文件,点击右边三个点 -> 点击发布至IPNS -> 选择密钥 -> 等待... -> 发布成功!
(注:建议开启"设置固定")
然后就可以参考网关部分{发布的密钥}.ipns.{host}或者{host}/ipns/{发布的密钥了}如何更新?
删掉原本的,(勾选同时也从本地固定中移除(推荐),最好再在命令行ipfs repo gc[windows需要安装到PATH]),然后重新上传-> 发布
若安装了Desktop和浏览器扩展IPFS Companion可使用这样的格式:
ipfs://{CID}
ipns://{CID}
测试CID
QmPDwD2m8FzwZY6PBbsX68ArDysrumDPP428MRpTafLCkc http://k51qzi5uqu5dgdmyxp21iljxpha2tewtak5ryhjz4ffegkfe6gefc1dsu6n42c.ipns.localhost:8080/onsyuri.html
一些小问题:
无法连接到Kubo RPC
你可能填错了API或者服务未开启,修改一下配置文件或者重启应用
连接不上
1.看看代理是不是开的
2.看看节点数,太少连不上很正常(尤其是IPNS)我发布的访问不了
确保IPFS在后台开启!或者至少需要一台与你发布CID内容相同的机器在线
安卓/IOS如何使用?
由于现在的Android客户端太老(在7-10年以上了)你需要Termux(IOS ISH没用过所以不知是否可行)
然后复制粘贴以下内容sed -i 's@^\(deb.*stable main\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/apt/termux-main stable main@' $PREFIX/etc/apt/sources.list #不想换源可以去掉 apt update && apt upgrade apt install kubo ipfs init # echo "ipfs daemon &" > $PREFIX/etc/termux-login.sh #若想termux开启就启动可以去掉 "#"号 #其余参考命令行部分,还有请确保电池优化关闭!
-
E ErrorEutopia 固定了该主题
-
一些巨坑:
1.请确保 状态 -> 地址那一栏至少一个IP地址双方可以ping通!
2.双方尽量有相同的节点
3.无法访问那就是没连上,以及尽量有一个公网IP(v4或者v6),没有请参考1.