开发工具:
文件大小: 626kb
下载次数: 0
上传时间: 2019-09-04
详细说明:星际文件系统是一种点对点的分布式文件系统, 旨在连接所有有相同的文
件系统的计算机设备。在某些方面, IPFS 类似于 web, 但 web 是中心化的,而
IPFS 是一个单一的 Bittorrent 群集, 用 git 仓库分布式存储。换句话说, IPFS
提供了高吞吐量的内容寻址块存储模型, 具有内容寻址的超链接。这形成了一
个广义的 Merkle DAG 数据结构,可以用这个数据结构构建版本文件系统,区块
链,甚至是永久性网站。。 IPFS 结合了分布式哈希表, 带有激励机制的块交换和
自我认证命名空间。IPFS 没有单故障点, 节点不需要相互信任。2.1.3 S/KADEMLIA DHT
S/ Kademlia[1]扩展了 Kademlia,用于防止恶意的攻击。有如下两方面的方
法
1.SKad提供了方案来保证 Nodeld的生成已经防止Syb川攻击。它需要节
点产生PK|公私钥对。从中导出他们的身份,并彼此间签名。一个方案使用POW
工作量证明,使得生成 Sybill成本高昂。
2S/Kad节点在不相交的路径上查找直,即使网终中存在大量的不诚实节
点,也能确保诚实节点可以互相链接。即使网终中存在一半的不诚实节点,S/Kad
也能达到85%的成功率。
2.2块交换- BitTorrent
BitTorrent3]是一个广泛成功应用的点对点共享文件系统,它可以在存在不
信任的对等节点(群集)的协作网络中分发各自的文件数据片。从 BitTorrent和
它的生态系统的关键特征,1PFS得到启示如下:
1. BitTorrent的数据交换协议使用了一种bt-for-tat的溦励策略,可以奖励
对其他方面做贡献的节点,惩罰只榨取对方瓷源的节点。
2. BitTorrent对等体跟踪文件的可用性,优先发送稀有片段。这减轻了 seeds
节点的负担,让non- seeds节点有能力互相交易
3对于一些剥削带宽共亨策略, Bit Torrent的标准tt-for-tat策略是非常脆
弱的。然而, Propshare8是种不同的对等带宽分配策略,可以更好的抵制
剥削战略,提高群集的表现。
2.3.版本控制系统-Git
版本控制系统提供了对随时间变化的文件进行建模的设施,并有效地分发不
同的版本。流行版本控制系统Git提供了强大的 Merkle dag对象模型,以分布
式友好的方式捕荻对文件系统树的更改。
1不可更改的对象表示文件(bob),目录(树)和更改(提交)。
2通过加密hash对象的内容,让对象可寻址。
3链接到其他对象是嵌入的,形成一个 Merkle dag。这提供了很多有用的完
整和work-fow属性
4、很多版本元数据(分支,标示等等)都只是指针引用,因此创建和更新的
代价都小
5版本改变只是更新引用或者添加对象。
6分布式版本改变对其他用户而言只是转移对象和更新远程引用
24自我认证认文件系统SFS
SFS[12,11提出∫两个引人注日的实现(a)分布式信任链,和(b)平等
共享的全局命名空间。SFS引入了一种自我建构技术一注册文件:寻址远程文件
系统使用以下格式
因此SFS文件系统的名字认证了它的服务,用户可以通过服务提供的公钥来
验证,协商个共享的私钥,保证所有的通信。所有的SFS实例都共亨了个全
局的命名空间,这个命名空间的名称分配是加密的,不被任何中心化的body控
伟
3.IPFS设计
PFS是一个分布式文件系统,它综合」以前的对等系统的成功想法,包括
DHT, BitTorrent,Git和sFs。IPFS的页献是简化,发展和将成熟的技术连接成
个单一的内聚系统,大于其部分的总和。|PFS提供了编写和部署应用程序的
新平台,以及一个新的分发系统版本化大数据。1PFS甚至可以演进网络木身。
PFS是点对点的;没有节点是特权的。|PFS节点将|PFS对象存储在本地存
储中。节点彼此连接并传输对象。这些对象表小文件和其他数据结构。IPFS协
议分为一组负责不同功能的子办议
1身份-管理节点身份生成和验证。描述在31节
2网络-管理与其他对等体的连接,使用各种底层网络协议。可配置的。详
见32节
3,路由—维护信息以定位特定的对等体和对象。响应本地和远程査询。默认
为DHT,但可吏换。在33节描述。
4交换-一种支持有效块分配的新型块交換协议( Bit Swap)。模拟市场,弱
化数据复制。贸易策略可替换。措述在34节。
5对象-具有链接的内容寻址不可更改对象的 Merkle dag。用于表示任意
数据结构,例如文件层次和通信系统。详见第3.5节
6文件-由Git启发的版本化文件系统层次结构。详见36节。
7命名-自我认证的可变名称系统。详见3.7节
这些子系统不是独立的;它们是集成在一起,互相利用各自的属性。但是,
分开描述它们是有用的,从下到上构建协议栈。符号:Go语言中指定了以下数
据结构和功能
31身份
节点由 Nodeld标识,这是使用S/ Kademlia的静态加密难题[]创建的公钥
的密码散列。节点存储其公私钥(用密码加密)。用户可以在每次启动时自由地
设置一个新"节点身份,尽管这会损失积累的网络利益。激励节点保持不变。
首次连接时,对等体交换公钥,并检查:hash( other PublicKey)等于
other Nodeld。如果没有,则连接被终止
关于加密函数的注意事项
IPFS不是将系统锁定到一组特定的功能选择,而是支持自我描述的值。哈希
摘要值以多重哈希格式存储,其包括指定使用的哈希函数的头和以字节为单位的
摘要长度。例如
这允许系统
a)选择最佳功能用例(例如,更强的安全性与更快的性能),
(b)随着功能选择的变化而演变。自描述值允许兼容使用不同的参数选择
3.2网络
PFS节点与数百个其他节点进行定期通信恻络中的节点,可能跨越广域鬥
络。1PFS网络堆栈功能:
传输层:IPFS可以使用任何传输协议,并且最适合 WebrtC Data Channels
(用于浏览器连接)或uTP( LEDBAT[14])
可靠性:如果底层网络不提供可靠性,PFS可使用uTP( LEDBAT141)或
sCTP[15]来提供可靠性。
可连接性:IPFS还可以使用 CE NAT穿墙打洞技术[13]
完整性:可以使用哈希校验和来检査邮件的完整性
可验证性:可以使用发送者的公钥使用HMAC来检查消息的真实性
321对等节点寻址注意事项
PS可以使用任何网络;但它不承担对P的获取以及不直接依赖于ip层
这允许在覆盖网络中使用|PFS
PS将地址存储为多层地址,这个多层地址是出字节字符串组成的,以便
于给底层网络使用。多层地址提供了一种方式来表示地址及其协议,可以封装成
好解析的格式。例如:
33路由
PFS节点需要一个路由系统,这个路由系统可用于查找
(a)其他同伴的终地址
(b)专门用于服务特定对象的对等节点
PFS使用基于S/ Kademlia和Cora|的DSHT,在2.1节中具体介绍过。在
对象大小和使用模式方面,IPFS类似于Cora5]和 Mainline[16,因此,|PFS
DHT根据其大小对存储的值进行区分。小的值(等于或小于1KB)直接存储在
DHT上。对于更大的值,DHT只存储值索引,这个索引就是一个对等节点的
Nodeld,该对等节点可以提供對该类型的值的具体服务。
DSHT的接口如
注意:不同的用例将要求基本不同的路由系统(例如广域网屮使用DHT,局
域网中使用静态HT)。因此,IPFS路由系统可以根据用户的需求替换的。只要使
用上面的接口就可以了,系统都能继续正常运行。
34块交换- BitSwap协议
PFS中的 Bit Swap协议受到 Bit Torrent的启发,通过对等节点间交换数据
块来分发数据的。像BT一样,每个对等节点在下载的同时不断向其他对等节点
上传已下载的数据。和BT协议不同的是, Bit Swap不局限于一个 torrent文件
中的数据块。 BitSwap协议中存在一个永久的市场。这个市场包括各个节点想
要获取的所冇块数据。而不管这些块是哪些如 torrent文件中的·部分。这些快
数据可能来自文件系统中完全不相关的文件。这个市场是由所有的节点组成的
虽然易货系统的概念意味着可以创建虚拟货币,但这将需要一个全局分类账
本来跟踪货币的所有权和转移。这可以实施为 Bit Swap策略,并将在未来的论文
中探讨。
在基本情况下, BitSwap节点必须以块的形式彼此提供直接的值。只有当跨
节点的块的分布是互补的时候,各取所需的时候,这才会工作的很好。通常情
况并非如此,在某些情况下,节点必须为自己的块而工作。在节点没有其对等
节点所需的(或根本没有的)情况下,它会更低的优先级去寻找对等节点想要的
块。这会激励节点去缓存和传播稀有片段,即使节点对这些片段不感兴趣。
34.1-B| TSWAP信用
这个协议必须带有激励机制,去激励节点去seed其他节点所需要的块
而它们本身是不需要这些块的。因此, Bit Swap的节点很积枚去给对端节点发
送块,期待获得报酬。但必须防止水蛭攻击(空负载节点从不共享块),一个简
单的类似信用的系统解决了这些问题:
1,对等节点间会追踪他们的平衡(通过字节认证的方式)
2,随着债务増加而概夲降低,对等者概率的向债务人发送块。
注意的是,如果节点决定不发送到对等体,节点随后忽略对等体的
ignore cooldown超时。这样可以防止发送者尝试多次发送(洪水攻击)
BitSwap默认是10秒)
342 BITSWAP的策略
彡Bisw对等节点采用很多不同的策略,这些簧略对整个数据块的交换执行
力产生了不同的巨大影响。在Bτ中,标准策略是明确规定的(t-for-tat),其
他不同的策略也已经被实施,从 BitTyrant8](尽可能分享)到 BitThief i8](利用
个漏洞,从不共享),到 PropShare[8](按比例分享)。 Bit Swap对等体可以类
似地实现一系列的策略(良好和恶意)。对于功能的选择,应该瞄准:
1为整个交易和节点最大化交易能力。
2为了防止空负载节点利用和损害交易
3高效抵制木知策咯。
4对可信任的对等节点更宽容
探索这些策略的空白是未来的事情。在实践中使用的一个选择性功能是
sigmoid,根据负债比例进行缩放:
让负债比例在一个节点和它对等节点之间:
根据r,发送到负债节点的概率为
正如你看到的图片1,当节点负债比例超过节点已建立信贷的两倍,发送到
负债节点的概率就公急速下降。
负债比是信任的衡量标准:对于之前成功的互换过很多数据的节点会宽容债
务,而对不信任不了解的节点会严格很多。这个(a)给与那些创造很多节点的攻击
者(syb攻击)一个障碍。(b)保扩了之前成功交易节点之间的关系,即使这个
节点暂吋无法提供数据。(C)最终阻塞那些关系已经恶化的节点之间的通信,直到
他们被再次证明
34.3B| TSWAP账本
BitSwap节点保存了一个记录与所有其他节点之间交易的账本。这个可以让
节点追踪历史记录以及避免被篡改。当激活了一个链接, Bit Swap节点就会互换
它们账本信息。如果这些账本信息并不完全相同,分类账本将会重新初始化,那
些应计信贷和债务会丢失。恶意节点会有意去失去“这些“账本,从而期望清除
自己的债务。节点是不太可能在失去了应计信托的情况下还能累积足够的债务去
授权认证。伙伴节点可以自由的将其视为不当行为,拒绝交易。
节点可以自由的保留分布式账本历史,这不需要正确的操作,因为只有当前
的分类账本条目是有用的。节点也可以根据需要自出收集分布式帐本,从不太有
用的分布式帐开始:老(其他对等节点可能不存在)和小
3.44 BITSWAP详解
BitSwap节点有以下简单的协议
对等连接的生命周期草图
1○pen:对等节点间发送 ledgers直到他们同意
2 Sending:对等节点间交换 want lists和 block
3 Close:对等节点断开链接。
4 Ignored:(特殊)对等体被忽略(等待时间的超时)如果节点采用防止发
送策略。
Peer.open (Nodeld ledger
当发生链接的时候,节点会初始化链接的账本,要么保存一个你链接过去的
账本,要么创建一个新的被清零的账本。然后,发送一个携带账本的open信息
给对等节点
接收到一个open信息之后,对等节点可以选择是否接受此链接。如果,根
据接收者的账本,发送者是一个不可信的代理(传输低于零或者有很大的未偿还
的债务),接收者可能会选择忽略这个请求。忽略请求是 ignore -cooldown超时
来概率性实现的,为了让错误能够有时间改正和攻击者被挫败
如果链接成功,接收者用木地账木来初始化一个Peer对象以及设置
ast seen时间戳。然后,它会将接受到的账本与自己的账本进行比较。如果两个
账本完全一样,那么这个链接就被Open,如果账本并不完全一致,那么此节点
公创建一个新的被清零的账本并且会发送此账本。
Peer send want /(WantList)
链接已经Open的时候,节点会广发它们的 want list给所有已经链接的
对等节点。这个是在(a)open链接后()随机间歇超吋后( chant_list改变后(o)接收
到一个新的块之后完成的。
当接收到一个 want list之后,节点会存储它。然后,公检查自己是否拥有任
何它想要的块。如果有,会根据上面提到的 BitSwap策略来将want|ist所需要的
块发送出去。
Peer send block Block
发送一个块是直接了当的。节点只是传输数据块。当接收到了所有数据的时
候,接收者会计算多重hash校验和来验讦它是否是自己所需数据,然后发送确
认信息。
在完成一个正确的块传输之后,接受者会将此块从 need list一到 have list,
最后接收者和发送者都会更新它们的账木来反映出传输的额外数据字节数。
如果一个传输验证失败了,发送者要么会出故障要么会攻击接收者,接收者
以选择拒绝后面的交易。注意,BⅰSWap是期望能够在一个可靠的传输通道上
进行操作的,所以传输错误(可能会引起一个对诚实发送者错误的惩罚)是期望
在数据发送给 BitSwap之前能够被捕捉到。
Peerclose(Boo∥
传给cose最后的个参数,代表cose链接是否是发送者的意愿。如果参
数值为 false,接收者冋能会立即重新open链接,这避免链过早的cose链接。
个对等节点 close链接发生在卜面两种情况卜:
silence wait超时已经过期,并且没有接收到来自于对等节点的任何信息
( BitSwap默认使用30秒),节点会发送 Peer. close( (false)。
在节点退出和 BitSwap关闭的时候,节点会发送 Peer close(true)
接收到dose消息之后,接收者和发送者公断开链接,清除所有被存储的状
态。账本可能会被保存下来为」以后的便利,当然,只有在被认为账本以后会有
用时才会被保存下来。
注意点:
非open信息在一个不活跃的连接上应该是被忽略的。在发送 send block信
息时,接收者应该检查这个块,看它是否是自己所需的,并且是否是正确的,如
果是,就使用此块。总之,所有不规则的信息都会让接收者触发一个dose(alse)
信息并且强制性的重初始化此链接。
35 Merkle dag对象
DHT和 BitSwap允许|PFs构造一个庞大的点对点系统用来快速稳定的分发
和存储。最主要的是,PFS建造了一个 Merkle dag,一个无叵路有向图,对象之
间的inκs都是hash加密嵌入在源目标中。这是Git数据结构的一种推广。 Merkle
DAGS给IPFS提供了很多有用的属性,包括
1内容叮寻址:所有内容都是被多重hash校验和来唯一识别的,包括 links
2.防止篡改:所有的内容都用它的校验和来验证。如果数据被篡改或损坏
PFS会检测到。
3重复数据删除:所有的对象都拥有相同的内容并只存储一次。这对于索引
对象非常有用,比如gt的tree和 commits,或者数据的公共部分。
PFS对象的格式是
IPFS Merkle dag是存储数据非常灵活的一种方式。只要求对象引用是(a)
内容可寻址的,(b)用上面的格式编码。PFS允许应用完全的掌控数据域;应用可
以使用仁何自定义格式的数据,即使数据PFS都无法理解。单独的内部对象link
表允许|PFS做
用对象的形式列出所有对象引用,例如
解决字符串路经查找,例如foo/bar/baz。给出一个对象,IPFS会解析第
个路经成分进行hash放入到对象的link表中,冉获取路径的第二个组成部分,
直如此重复下去。因此,任何数据格式的字符串路经都可以在 Merkle dag中
使用
大递归性的解决所有对象引用
原始数据结构公共link结构是|PFS构建仼意数据结构的必要组成部分。冂
以很容易看岀Git的对象模型是如何套用DAG的。一些其他潜在的数据结构:
(a)键值存储
(b)传统关系型数据
(c)数据三倍存储
(d)文档发布系统
(e)通信平台
(加密货币区块。
这些系统都可以套用| PFS Merkle dag,这使这些系统更复杂的应用可以使
用|PFS作为传输协议。
351路经
iPFS对象可以遍历个字符串路经。路经格式与传统∪NⅨX文件系统以及
web—致。 Merkle dag的inks使遍历变得很容易。全称路经在IPFS中的格式
是
ips前缀允许只要在挂载点不冲突(挂载点名称当然是可配置的)的情况下挂
载到一个已存在的系统上。第二个路经组成部分(第一个是PFS是一个对象的
hash。通常都是这种情况,因为没有全局的根。一个根对象可能会有一个不可能
完戍的任务,就是在分布式环境(可能还断开链接)中处理百万对象的一致性。因
此,我们用地址可寻址来模拟根。通过的hash所有的对象都是可访问的。这意
思是说,给一个路经对象/ba/baz,最后一个对象可以可以被所有的访问的:
3.52本地对象
PFS客户端需要一个本地存储器,一个外部系统可以为PFS管理的对象存
储以及检索本地原始数据。存储器的类型根据节点使用案例不同而不同。在大多
数情况下,这个存储器只是硬盘空间的一部分(不是被本地的文件系统使用键值
存储如 leveldb来管理,就是直接被PFS客户端管理),在其他的情况下,例如
咔持久性缓存,存储器就是RAM的一部分。
最终,所有的块在|PFS中都是能够获取的到的,块都存储在了一些节点的
本地存储器中。当用户请求一个对象时,这个对象会被查找到并下载下来存储到
本地,至少也是暂时的存储在本地。这为一些可配置时间量提供了快速的查找
3.53对象锁定
希望确保特定对象生存的节点可以锁定此对象。这保证此特定对象被保存在
了节点的木地存储器上。也可以递归的进行锁定所有相关的派生对象。这使所有
被指定的对象都保存在本地存储器上。这对长久保存文件特别有用,包括引用。
这也同样让IPFS成为一个inks是永久的Web,且对象可以确保其他被指定对象
的生存。
354发布对象
PFS是全球分布的。它设计为允许成千上万的用户文件可以共同的存在的。
DHT使用内容哈希寻址技术,使发布对象是公平的,安全的,完全分布式的。任
何人都可以发布对象,只需要将对象的key加入到DHT中,并且以对象是对等
节点的方式加入进去,然后把路径给其他的用户。要注意的是,对象本质上是不
可改变的,就像在Git中一样。新版本的哈希值不同,因此是新对象。跟踪版本
则是额外版本对象的工作。
3.55对象级别的加密
PFS是具备可以处理对象级別加密操作的。一个已加密的或者已签名的对象
包装在一个特殊的框架里,此框架允许加密和验证原始字节。
加密操作改变了对象的哈希值,定义·个不同的新的对象。|PFS自动的验证
签名以及使用用户指定的钥匙链解密薮据。加密数据的 links也同样的被保护着
没有解密秘钥就无法遍历对象。也存在着一种现象,可能父对象使用∫一个秘钥
进行了加密,而子对象使用了另一个秘钥进行加密或者根本没有加密。这可以保
证inks共享对象安全
36文件
PFS在 Merkle dag上还为模型化版本文件系统定义了一组对象。这个对象
模型与Gt比较相似:
Block:一个可变大小的数据块
List:块或者其他链表的集合
Tree:块,链表,或者其他树的集合
Commit:树在版本历史记录中的一个快照
我原本希望使用与Git对象格式一致的模型,但那就必须要分开来引进在分
布式文件系统中有用的某些特征,如
(a)快速大小查找(总字节大小已经加入到对象中
(b)大文件的重复删除添加到|st对象)
(c) commits嵌入到 trees中。不过,PFS文件对象与Git还是非常相近的,
两者之闫进行交流都是有可能的。而且,Git的一个系列的对象叮以被引进过来
转换都不会丢失任何的信息。(UN文件权限等等)。
标记:下面的文件对象格式使用JSON。注意,虽然IPFS包含了JSON的互
相转换,但是文件对象的结构体还是使用 protobufs的二进制编码
3.61文件对象:BLOB
blob对象代表一个文件且包含一个可寻址的数据单元,|PFS的bobs就像
Git的 blobs或者文件系统数据块。它们存储用户的数据。需要留意的是|PFS文
件可以使用lsts或者 blobs来表小。 Blobs没有inks
3.62文件对象:LST
List对象代表着由几个IPFS的 blobs连接成的大文件或者重复数据删除文
件。 Lists包含着有序的blob序列或list对象。从某种程度上而言,IPFS的list函
数就像一个间接块的文件系统。由于ists可以包含其他的lsts,那么包含 linked
的链表和平衡树的拓扑结构是有可能的。有向图中相同的节点出现在多个不同地
方允许在文件中重复数据删除。当然,循环是不可以能的,因为是被哈希寻址强
制实行的
3.63文件对象:TREE
PFS中的tree对象与Git中相似,它代表着一个日录,一个名字到哈希值的
映射。哈希值则表示着 blobs,ists,其他的 trees,或者 commits。注意,传统
路径的命名早已经被 Merkle dag实现了。
3.64文件对象: COMMIT
PFS中的 commit对象代表仁何对象在版本历史记录中的一个快照。与Git
中类似,但是它能够表示任何类型的对象。它同样ink着发起对象。
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.