IPFS

  1. IPFS is a protocol
    a content-addressed file system
    coordinates content delivery
    **combine Kademlia + Bittorrent + Git

#Kademlia协议
一种分布式哈希表。Kademlia是分布式哈希表(Distributed Hash Table, DHT)的一种。而DHT是一类去中心化的分布式系统。在这类系统中,每个节点(node)分别维护一部分的存储内容以及其他节点的路由/地址,使得网络中任何参与者(即节点)发生变更(进入/退出)时,对整个网络造成的影响最小。DHT可以用于构建更复杂的应用,包括分布式文件系统、点对点技术文件分享系统、合作的网页高速缓存、域名系统以及实时通信等。
Kademlia算法在2002年由Petar Maymounkov 和 David Mazières 所设计,以异或距离来对哈希表进行分层是其特点。Kademlia后来被eMule、BitTorrent等P2P软件采用作为底层算法。Kademlia可以作为信息安全技术的奠基之一。
Kademlia的优点在于:

对于任意一个有[ 2(n−1) ,2𝑛)个节点的网络,最多只需要n步搜索即可找到目标节点;
K-bucket的更新机制一定程度上保持了网络的活性和安全性。
Kademlia作为一种高效的分布式路由算法,还可以应用在分布式网络中的安全通讯。众享互联的分布式网络安全解决方案,将单点对单点的信息传输方式改为在多节点的分布式网络中多路径传输。采用Kademlia这种DHT算法,使得物联网设备的通讯信息在分布式网络中能够更快更准确地到达目标设备,并并大大提高了网络攻击者彻底阻断通讯路径的难度,令物联网设备通讯的安全性极大地提高。

[image:5DD33484-E40F-4C81-B379-94B0A17967AD-10237-00003B78E9D35075/09CB2DCF-5430-4FE7-BBDA-D079910852FE.png]

[image:EA3CDDF8-6664-4E85-B2B4-32449DD923BC-10237-00003D33EABB589E/09FD7620-FA47-4354-88FF-BB6DA35E7A5C.png]

*参数*
- keyspace:ID位数 -> 决定通讯录有几层
- k:
    1. 每一层k-bucket里装有k个node信息,即<node ID, IP Address, port>
    2. 每次查找node时,返回k个node信息
    3. 对于某个data,离其最近的k个节点会被要求存储这个node
- α:
    1. 向其他node发送请求查找某个node时,会向α个node发出请求

*节点的指令*
- PING:测试节点是否在线
- STORE:要求一个node存储一份data
- FIND_NODE:根据节点ID查找节点
- FIND_VALUE:根据KEY查找一个数据

*k-bucket的维护及更新机制
- bucket中节点按照最后一次接触的时间倒序排列
- 执行任一个指令即出发更新
- 当与节点接触时,检查是否在k-bucket中
    1. 如果在,则将node挪到k-bucket的最底层(最新)
    2. 如果不在,PING列表最上面(最旧)节点
        a. 如果PING通,将旧节点挪到最底层,并丢弃新节点
        b. 如果PING不同,删除旧节点,并将新节点加入列表
    - 改机制保证任意节点加入和离开都不影响整体网络