IPFS笔记 2.IPFS底层基础

2.1 分布式哈希表(DHT)

第一代P2P网络,需要中央数据库协调,使用中心服务器接收并返回客户端的所有查询。中心服务器的很容易因为单点宕机之类的使服务失效。

第二代P2P网络Gnutella使用message flooding来定位数据,查询消息会flooding到全网所有节点,这样的广播很容易引起广播风暴,造成通信阻塞、网络性能下降等问题。
第三代P2P网络文件系统就用到了DHT了。

DHT的主要思想:
全网维护一个巨大的文件索引哈希表,这个哈希表的条目以k,v形式存储。这里key通常是文件的某个哈希算法下的哈希值,(当然也可以是文件名或文件内容描述),而Value则是存储文件的IP地址。查询时,仅需要提供Key,就能从表中查询到存储到节点地址并返回给查询节点。
当然这个哈希表会被分割成小块,按照一定的算法和规则分布到全网各个节点上。每个节点仅需要维护一小块哈希表。这样,节点查询文件时,只要把查询报文路由到相应的节点即可。我们再下面介绍三种IPFS中会用到的具有代表性的分区表类型,分别是Kademlia DHT、Coral DHT和S/Kademlia。

2.1.1 Kademlia DHT

Kademlia DHT是分布式哈希表的一种实现。Kad DHT有如下特性:

  • 节点ID与关键字是同样的值域,都是使用SHA-1算法生成的160位摘要,这样大大简化了查询时的信息量,更便于查询。
  • 可以使用XOR异或运算,计算任意两个节点的距离或是节点和关键字的距离。
  • 查找一条请求路径的时候,每个节点的信息是完备的,只需要进行Log(n)量级次跳转。
  • 可根据查询速度和存储量的需求,调整每个节点需要维护的DHT大小。

KAD网络对之前我们说的DHT有较大的改进,一个新来的网络节点在初次连接网络会分配一个ID;
每个节点自身维护一个路由表和一个DHT,这个路由表保存网络中一部分节点的连接信息,DHT用于存放文件信息;
每个节点优先保存距离自己更近的节点信息,但一定确保距离在[2^n, 2^(n+1) -1]的全部节点,至少保存k个(k是常数),我们称为K-Bucket;每个网络节点需要优先存储与自己的ID,距离较小的文件;

每次检索时,将查询文件的哈希值与自己的ID求距离,然后找到这个距离对应的K-Bucket,向K bin中的节点查询。 接收查询的节点也做同样的检查,如果发现自己存有这个数据,便将其返回给查询的节点。

下面详细说明一下KAD网络算法细节。

  1. Kademlia二叉状态树


    Kademlia ID二叉树结构

Kad网络的节点ID是由一颗二叉树维护,我们最终生成的二叉树需要如下要求:

  • 每个网络节点可以从根节点出发,沿着它的最短唯一前缀到达。
  • 每个网络节点都应该是叶子节点。上图表示了二叉树的形成过程。Kad二叉树的建立,需要确保每个网络的节点都能从树根沿着它的最短唯一前缀的路径到达。

在Kad每个DHT条目包含<key,value>对。Key是文件的哈希值,Value是节点ID。key和value有相同的值域,都是160位。每一个新加入网络的计算机都会被随机分配一个节点ID值。数据就存放在Key值与ID值“最”接近key值得节点上。这样,我们就需要定义它们的远近了。XOR运算可以解决这个问题。在160位Hash上,判断两个节点x,y的距离远近是异或的二进制运算,d(x+y)=x xor y。 两个二进制位结果相同,它们的异或值是0;如不同则为1.

  1. 节点路由表K-Bucket
    节点路由表用于保存每个节点与自己一定距离范围内其他节点的连接信息。每一条路由信息由如下三部分组成:IP Address、UDP Port、Node ID。 KAD路由表将距离分成160个K桶(存放K个数据的桶),分开存储。编号为i的路由表,存放着距离为[2i, 2(i+1)-1]的K条路由信息。并且每个K桶内部信息存放位置是根据上次看到的事件顺序排列,最早看到的放在头部,最后看到的放在尾部。因为网络中节点可能处理在线或者离线状态,而在之前经常在线的节点,我们需要访问的时候也更大概率在线,那么我们会优先访问它(尾部的节点)。

通常来说当i值很小时,K桶通常是空的(以0为例,距离为0的自然只有自己这一个节点),而当i很大时,其对应的K桶的项数又很可能特别多(因为范围很大)。这时,我们只选择存储其中的K个。在这里k的选择,要根据系统性能和网络负载来选择。比如,在BT中,k=8。因为每个K-Bucket覆盖距离范围呈指数增长,那么只需要保存至多160k个路由信息就足以覆盖全部的节点范围了。在查询时采用递归方式,最多只需要经过logN步查询,就可以准确定位到目标节点。

当节点x收到一个消息时,发送者y的ip地址就被用来更新对应的K桶,具体步骤如下。

K桶更新步骤

1)路由查询机制

image.png

2)节点加入和离开

image.png

2.2 块交换协议(BitTorrent)

BitTorrent是一种内容分发协议。BT采用内容分发和点对点技术,帮助用户相互更高效地共享大文件,减轻中心服务器的负载。在BT网络里,每个用户同时需要上传和下载。文件持有者将文件发送给其中一个或多个用户,再由这些用户转发给其他用户,用户之间相互转发自己所拥有的文件部分,知道每个用户的下载都全部完成。这种方法可以使下载服务器同时处理多个大体积文件的下载请求,而无需占用大量带宽。

  1. BitTorrent术语解释
  • torrent:它是服务器接收的元数据文件(通常结尾是.Torrent)。这个文件记录了下载数据的信息,但不包括文件自身。例如,文件名,文件大小,文件的哈希值,以及Tracker的URL地址。
  • tracker:是指互联网上负责协调BT客户端行动的服务器。当你打开一个torrent,你的机器连接tracker,并且请求一个可以接触的的peers列表。在传输过程中,客户端将会定期向tracker提交自己的状态。Tracker的功能仅在于帮助Peers相互达成连接,它不参与文件本身的传输。
  • peer:互联网上参与p2p连接的普通电脑。通常情况下peer没有完整的文件。
  • seed:有一个特定Torrent完整拷贝的电脑称为Seed。文件初次发布时,需要一个Seed进行初次共享。
  • swarm:连接一个Torrent的所有设备群组。
  • Chocking:Chocking阻塞是一种临时的拒绝上传策略,虽然上传停止了,但是下载仍然继续。BitTorrent网络下载需要每个Peers相互上传,对于不合作的peer,会采取临时阻断策略。
  • Pareto效率:帕累托效率是指资源分配已经到了物尽其用的阶段,对任意一个个体进一步提升效率只会导致其他个体效率下降,此时说明系统已经达到最优化了。
  1. P2P块交换协议
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 156,907评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,546评论 1 289
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,705评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,624评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,940评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,371评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,672评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,396评论 0 195
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,069评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,350评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,876评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,243评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,847评论 3 231
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,004评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,755评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,378评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,266评论 2 259

推荐阅读更多精彩内容