🗒️IPFS分布式存储
type
status
date
slug
summary
tags
category
icon
password
✅一些IPFS分布式存储的基础知识。简单记录,方便回顾,
BitTorrent协议
⑴术语
①torrent:服务器接收的元数据文件 (.tot),记录下载数据的信息(不包括文件自身),例如文件名、大小、hash,Tracker的URL地址
②tracker:负责协调BTot客户端行动的服务器.当打开一个tot时,机器连接tck,请求一个可以接触的peers列表.传输过程中,客户端定期向tck提交自己状态.作用:仅帮助peers相互达成连接,不参与文件本身传输
③peer:互联网上另一台可以连接并传输数据的计算机.通常没有完整的文件.peer之间相互上传下载
④seed:有一个特定tot完整拷贝的计算机.文件初次发布时要一个seed进行初次共享
⑤swarm:连接一个tot的所有设备群组
⑥Chocking:对不相互上传的peer临时阻断
⑦Pareto:系统已最优
⑧针锋相对:贡献多少v下载,给多少v上传.
(2)发布文件
seed先生成一个扩展名为.tot的文件,包含:文件名、大小、tck的 URL.一次发布至少要一个tck和一个seed,tck保存文件信息和seed的连接信息,seed保存文件本身.一旦seed向tracker注册,就开始等待为需要这个tot的peer上传信息.通过.tot文件,peer会访问tck,获取其他peer/seed的连接信息,如IP和端口.tck和peer之间只需简单远程通信,peer就能使用连接信息与其他peer/seed沟通,建立连接下载文件.
(3)片段选择算法
①优先完成单一片段:若请求了某一片段的子片段,则本片段会优先被请求.尽可能先完成完整片段,避免片段都请求同一子片段但都没完成
②优先选择稀缺片段:选择新片段时优先下载拥有者最少的片段.最少意味着大多peer最希望得到.
降低两种风险:
1)某个peer上传大家都有的片段,就没人下载
2)拥有稀缺片段的peer停止上传,所有peer都不能得到完整文件
③第一个片段随机选择:下载刚进行时,下载者没有任何片段可供上传,需尽快获取一个完整片段,而最少片段通常只有某一peer拥有,可能比多个都拥有的片段下载得慢.因此第一个片段随机选择,直到第一个片段下载完成,才换成优先稀缺
④结束时取消子片段请求:当速率很慢的peer请求片段时,peer会向其他peer发送对某片段的子片段请求,一旦有子片段到了,就会向其他peer发送取消消息,取消子片段请求,避免浪费带宽.
libp2p
⑴分层
①接口:实现ID-service、pub-sub、dht、ping偏应用属性的功能接口,开发人员只需关注这一层,即可快速上手,使用libp2p进行开发.
②host:分为routed host和basic host,这两个host是继承关系,routed是basic的一个扩展实现.在libp2p中,一个host代表一个节点,所以在IPFS中,以host为单位进行数据分发与传输.
③协议:负责定义和实现不同的协议,提供了节点之间的通信和数据交换能力.
④网络:负责实现节点之间的路由和连接管理.
⑤传输:IP地址和传输
协议抽象为统一的接口,对外只要匹配好接口就可按照原来的方式使用.负责处理数据的传输和接收,将Websocket、TCP、UTP、Quic等主流传输协议封装起来.
(2)swarm5组件
①peer-store:地址簿,记录了所有“联系人”相关信息.key book公私钥,metrics链接耗时,加权平均评估,addr book实现超时地址信息,data store给地址打标签.
②bwc-reporter,监控和优化带宽使用.
③filter:地址过滤器,判断地址是否在黑白名单内,
④dialer,同步、后台限制、有限制的拨号器,共同完成整个拨号过程.
⑤listener:监听器,等待并接受连接请求.
分布式哈希表
⑴DHT历史
①由中心化服务器协调,客户端向服务器请求拥有数据块的地址列表
②洪泛方法定位数据.查询消息会公布给全网所有节点,直到找到这个信息,然后返回给查询者.由于网络承载力有限,这种盲目请求会导致网络快速耗尽,因此需设置请求的生存时间以控制网络内请求的数量.但所需网络请求量大,易造成拥堵
③DHT思想:全网维护一个巨大的文件索引哈希表,条目形如<Key,Value>.查询时仅需提供Key,就能查到存储节点的地址并返回给查询节点.
(2)介绍Kademlia
①节点 ID 与KEY是值域相同,都是用SHA-1生成的160位摘要,简化查询的信息量.
②可用XOR计算节点与节点或关键字的距离.
③查找请求路径,Log(n)量级次跳转.
④可根据查询速度和存储量需求调整每个节点需维护的DHT大小.
⑶节点u加入网络
u先把一个已在KAD网络中的节点w插入自己适当桶中,对自己的节点ID执行FN操作,再更新自己K桶内容.通过对邻近节点由近及远查询,u完成了仍是空K桶的构建,同时也把自己信息发布到其他节点K桶中.在KAD网络中,每个节点的路由表都表示为一棵二叉树,叶子节点为K桶,K桶存放相同ID前缀的节点信息,前缀就是该桶在二叉树中的位置.这样每个K桶都覆盖ID空间的一部分,全部K桶信息加起来就覆盖了整个160bit的ID空间且没有重叠.
u的路由表生成:
①最初,u的路由表为一个单个的K桶,覆盖了整个160bit ID空间.
②学习到新节点信息后,u尝试把新节点信息根据其前缀值插入对应K桶中:该桶未满,直接插入;该桶已满:1.若K桶覆盖范围包含了节点的ID,则把K桶分裂为俩大小相同的新K桶,对原桶节点信息按照新K桶前缀值重新分配2.若该K桶覆盖范围没有包含节点的ID直接丢弃新节点信息.
③重复直到满足路由表的要求.近节点的信息多,远节点的信息少,保证了路由查询过程快速收敛.
(4)查找ID值为t文件
①d(x,t)=X⊕t.
②从x第log(d)个k桶中取a个节点,进行FV,若桶中少于a,则在附近多个桶中选择最接近d的a个节点.
③若这a个节点ID为t,则回答自己最接近t;若不为t,则d(t,自己),然后从自己的k 桶中取a个节点给x.
④x对接收到的新节点FV,重复,直到每个分支都有节点回答自己最接近t.x就得到k个最接近t的文件.
(5) Kad攻击方式
①日蚀:若一节点在网络中能自由选择它的ID,攻击者可在网络中安放一些信息必须经它们传递的恶意节点.恶意节点就能将一或几个节点从网络中隐藏掉.
②女巫:开放的对等网络里,攻击者可假冒多个ID,用少数网络节点控制多个虚假身份.KAD 网络难以控制节点的数量,则攻击者伪造大量虚假节点身份,就能控制部分网络.
③流失:攻击者拥有网络一些节点,即恶意节点,可能会引发大量流量流失,导致网络稳定性降低.
④对抗路由:恶意节点收到查询指令后,不按照KAD的要求返回距离Key最接近的网络节点,而是转移给同伙节点.同伙节点也做同样的操作,不返回给查询节点所需的信息,查询就会失效.目的是干扰网络正常运行,并可能会导致其他攻击方式成功.
(6)解决攻击
①日蚀和女巫:S/K节点ID分配策略.通过非对称加密确保节点身份不被窃取和伪装,设置一定的计算量障碍,强迫节点进行一定的哈希运算来确保不能自由选择和批量生产ID(公钥两次hash后具有c1个前导0,一次hash为nID;随机数x和nID异或再hash有c2个前导0.接收消息时先验签名合法性,再查难题.合理选c1c2.)
②对抗路由:不相交路径查找算法.每次查询从d个不同的桶选择k个节点.这d个桶并行查找,桶内部查找方式和KAD协议完全相同.这样d条查找路径就能做到不相交.只要d个桶中有一条查询到了所需要的信息,就完成了.
IPFS协议栈
上到下:
①身份:创建用于P2P通讯的节点信息
②网络:支持传输层的协议(兼容,完整,可靠、连接、验证)
③路由:内容路由、节点路由、文件存取
④交换:保证节点网络稳定,激励交换数据行为
⑤对象:内容可寻址的、不可篡改的、去冗余的对象链接
⑥文件:版本控制的文件系统
⑦ 命名:SFS&IPNS,给文件加“别名”
Kad优化查询效率
①优化路由表:采用动态路由表的方式,动态更新路由表中的节点信息.同时可采用路由表分片的方式,将路由表划分为多个子表,每个子表负责维护一部分节点信息,从而减少查询时遍历整个路由表的开销.
②使用缓存机制:采用分布式缓存,将查询结果缓存到多个节点上,下次查询时直接从缓存中获取,避免重复查询,同时提高缓存的容错性和可用性.
③采用多路径查询:为避免查询时需遍历整个对象图,可采用多路径查询,将查询请求同时发送给多个节点,每个节点返回最接近查询Key的节点列表,然后将这些节点列表进行合并,得到整个网络中最接近Key的节点列表.这样可减少查询时遍历整个对象图的开销,同时提高查询的准确率和响应速度.
④优化节点选择策略:采用基于历史响应时间的节点选择策略,即选择响应时间较短的节点作为查询的目标节点.同时可选择可用性较高的节点
作为查询的目标节点,避免选择不可用的节点.
kademlia:二叉树,log(n),d(x,y)=x+y,节点文件ID值域相同
Tree:特殊的DAG,n叉树
HashList:特殊的Tree,树高2的n叉树
BitSwap交易市场
SFS命名层
S/Kad不能自由选择ld,不能解决对抗路由
BitTorrent不满足请求
DAG:有向无环图.内容寻址,防篡改,去重
Filecoin:激励层
http:防范、存储成本,中心化风险,存储难
ipfs:速度,存储,安全,保存
分布式概念:多个独立设备,网络连接(概念:数据分片、冗余、访问、一致性,架构)
上一篇
区块链进阶
下一篇
共识机制
Loading...