p2p学习笔记

p2p技术概览


P2P思想,共同参与、透明开放、平等分享。基于P2P技术的应用有很多,包括文件分享,即时通信,协同处理,流媒体通信等等。P2P本质是一种新的网络传播技术,这种新的传播技术打破了传统的C/S架构
传统的通信方式,C/S结构:主服务器加上客户机,如一般网络上下载电影,http和ftp(文件传输协议)。
==》难以解决单一服务器的带宽压力,随着客户端的增多,下载速度越来越慢。
==》P2P方式提出:
   它的主要思想是把整体任务或负载划分到对等的多个节点中去,这些节点在应用架构中具有平等的权利和参与度,称之为对等节点(peer)。
节点主动把自身的部分资源(包括算力、存储和网络)直接供给其他节点使用,而不需要中央服务器的集中协调。对等节点既是资源的提供者,也是资源的消耗者,

   如在下载一个文件时,只要得到那些已经存在文件的 peer 地址,并和这些 peer 建立点对点的连接,就可以就近下载文件,而不需要到中心服务器上。一旦下载了文件,你的设备也就称为这个网络的一个 peer(入网),其他机器也可能会选择从你这里下载文件。


P2P在文件分享系统的应用(P2P技术目前最集中的体现)

P2P一般来说有两种。一种是依赖于Tracker 的,如BitTorrent:元数据集中,文件数据分散。另一种是基于分布式的哈希算法(DHT网络),元数据和文件数据全部分散,如,电驴、IPFS。当然还有混合型,这里无需再讨论(只是以文件系统为例大致了解p2p)

种子(.torrent)

.torrent 文件由Announce(Tracker URL)和文件信息两部分组成。
    其中,文件信息里有以下内容:

Info 区 指定该种子包含的文件数量、文件大小及目录结构,包括目录名和文件名
Name 字段 指定顶层目录名字
每个段的大小 BitTorrent(BT)协议把一个文件分成很多个小段,然后分段下载
段哈希值 将整个种子种,每个段的 SHA-1 哈希值拼在一起。

工作原理:

  1. 下载时,BT 客户端首先解析 .torrent 文件,得到 Tracker 地址,然后连接 Tracker 服务器。Tracker 服务器回应下载者的请求,将其他下载者(包括发布者)的 IP 提供给下载者。

  2. 下载者再连接其他下载者,根据 .torrent 文件,两者分别核对自己已经有的块,然后交换对方没有的数据。obviously, 下载的过程不需要其他服务器参与,并分散了单个线路上的数据流量,减轻了服务器的压力。

  3. 下载者每得到一个块,需要算出下载块的 Hash 验证码,并与 .torrent 文件中的进行对比。如果一样,说明块正确,不一样就需要重新下载这个块==》解决下载内容的准确性问题。

But, 这种方式特别依赖 Tracker。Tracker 需要收集所有 peer 的信息,并将从信息提供给下载者,使下载者相互连接,传输数据。虽然下载的过程是非中心化的,但是加入这个 P2P 网络时,需要借助 Tracker 中心服务器,这个服务器用来登记有哪些用户在请求哪些资源。

所以,这种工作方式有一个弊端,一旦 Tracker 服务器出现故障或者线路被屏蔽,BT 工具就无法正常工作了。也就是说,他并不是一个完全其中去中心化的模式。

DHT(Distributed Hash Table)网络

DHT是一种分布式存储方法,一类可由键值来唯一标示的信息,这些信息按照某种约定/协议被分散地存储在多个节点上,这样也可以有效地避免“中央集权式”的服务器(比如:tracker)的单一故障而带来的整个网络瘫痪。
实现DHT的技术(算法)有很多种(Chord, Pastry, Kademlia),更广泛应用的是Kademlia,这个算法(也有人把它称作协议,个人觉得区别不大,应用而已)IPFS区块链都有涉及,他主要解决以最快的速度来定位到期望的节点,一种路由寻址技术,可以在无中心服务器的情况下,在网络中快速找到目标节点,比如在P2P文件分享应用中则是以最快的速度来查找到正在分享某一文件/种子的peers列表信息。区别于其他在于:采用简单的异或计算来衡量两节点间的距离(论文:Kademlia-A-P2P-Information-System)。


P2P网络特点如下:
(1)可扩展性。在P2P网络中,用户可以随时加入、离开网络。而且随着用户节点的加入,系统整体的服务能力也在相应的提高。如P2P下载中,加入的用户越多,则P2P网络中提供的资源就越多,下载速度就越来越快。

(2)robust。由于P2P不存在中心化服务器,天生就具备耐攻击和高容错的特点。即使网络中某个节点被攻击或下线,也不影响整个系统的正常运行。

(3)高性价比。采用P2P结构的网络,可以有效地利用互联网中大量分散的普通用户节点。充分利用这些普通节点中闲散的CPU、带宽、存储资源,从而达到高性能计算和海量存储的目的。

(4)隐私保护。信息的传输分散在各个节点之间,而无需经过中心服务器,减少用户隐私信息被窃听和泄露的风险。

(5)负载均衡。由于P2P网络中,资源分散存储在多个节点上,而每个节点又都可以充当服务器的角色。当某个节点需要获取资源时,只需要向相邻节点发送请求即可,很好地实现了整个网络的负载均衡。


区块链上

包括比特币、以太坊等在内的去中心化的区块链平台,其底层网络都是采用的P2P技术实现。
首先我们要解决的是选取什么样的网络拓扑架构???(remaining)

网络架构
P2P网络通常在已有的物理网络拓扑之上实现某种形式的虚拟覆盖网络,网络中的节点形成一个物理网络中的子集。数据仍然通过底层的TCP/IP网络直接交换,但是在应用层,节点能够通过逻辑链路(每个链路对应于一个建立在底层物理网络上的连接)直接通信。通过一定的索引和节点发现算法,P2P系统能够独立于物理网络拓扑。按照 P2P 网络是否去中心化、节点地址是否结构化两个方面,将 P2P 网络分为如下四类。

  1. 中心化P2P网络
    在中心化网络中存在“中心服务器”,而其作用为保存接入节点的地址信息。倘若两个peer之间想要进行通信,那么它们可以通过中心服务器进行对方地址的索要。这个其实就是依赖于tracker.
    对小型网络而言,中心化拓扑模型在管理和控制方面占一定优势,但模型并不适合大型网络应用。(pass)

  2. 全分布式非结构化 P2P 网络
    没有中央索引服务器,每台机器在网络中是真正的对等关系,既是client同时又是server。
    全分布 P2P 节点可以自由加入退出,并且没有中心节点, 节点地址没有结构化统一标准,整个网络结构呈随机图的结构, 无固定网络结构图。
    这种网络一般采用Flooding搜索算法,每次搜索都把要查询的消息广播给网络上的所有节点。当一个节点要下载某个文件的时候,这个节点会以文件名或者关键字生成一个查询,并把查询发送给所有跟他相连的节点。如果这些节点存在文件,则跟这个节点建立连接,如果不存在,则继续向相邻的节点转发这个查询,直到找到文件位置。所以当网络规模扩大之后,会引发所谓的广播风暴。(pass)

  3. 半分布式 (混合式)P2P 网络
    结合中心化和分布式模型各有的优点,半分布式 P2P 网络将节点分类成普通节点和超级节点,从而构成了半分布式网络结构。
    每个超级节点则有多个普通节点与它组成局部的集中式网络。一个新的普通节点加入,则先选择一个超级节点进行通信,该超级节点再推送其他超级节点列表给新加入节点,加入节点再根据列表中的超级节点状态决定选择哪个具体的超级节点作为父节点
    如超级账本 hyperledger fabric 采用的 P2P 网络结构就如此。其将节点分为普通用户节点和超级节点(排序、背书节点等)。超级节点可以由普通节点选举,也可以自行配置,单独一个超级节点停机不影响系统运行。另外比特币网络也采用这样的结构。

  4. 全分布式结构化P2P网络
    它也是一种分布式网络结构,但与纯分布式结构不同。纯分布式网络就是一个随机网络,而结构化网络则将所有节点按照某种结构进行有序组织,比如形成一个环状网络或树状网络。而结构化网络的具体实现上,普遍都是基于 **DHT(分布式哈希表) **算法思想。DHT 只是提出一种网络模型,并不涉及具体实现,主要想解决如何在分布式环境下快速而又准确地路由、定位数据的问题。具体的实现方案有 Chord、Pastry、CAN、Kademlia 等算法,其中 Kademlia也是以太坊网络的实现算法。

比特币(混合,第三种):

比特币网络中的节点主要有四大功能:钱包、挖矿、区块链数据库、网络路由。每个节点都会具备路由功能,但其他功能不一定都具备,一般只有比特币核心(bitcoin core)节点才会包含所有四大功能。
所有节点都会参与校验和广播交易及区块信息,且会发现和维持与其他节点的连接。有些节点会包含完整的区块链数据库,包括所有交易数据,这种节点也称为全节点(Full Node)。另外一些节点只存储了区块链数据库的一部分,一般只存储区块头而不存储交易数据,它们会通过“简化交易验证(SPV)”的方式完成交易校验,这样的节点也称为 SPV节点或轻节点(Lightweight Node)。钱包一般是 PC 或手机客户端的功能,用户通过钱包查看自己的账户金额、管理钱包地址和私钥、发起交易等。除了比特币核心钱包是全节点之外,大部分钱包都是轻节点。挖矿节点则通过解决工作量证明(PoW)算法问题,与其他挖矿节点相互竞争创建新区块。有些挖矿节点同时也是全节点,即也存储了完整的区块链数据库,这种节点一般都是独立矿工(Solo Miner)。还有一些挖矿节点不是独立挖矿的,而是和其他节点一起连接到矿池,参与集体挖矿,这种节点一般也称为矿池矿工(Pool Miner)。这会形成一个局部的集中式矿池网络,中心节点是一个矿池服务器,其他挖矿节点全部连接到矿池服务器。矿池矿工和矿池服务器之间的通信也不是采用标准的比特币协议,而是使用矿池挖矿协议,而矿池服务器作为一个全节点再与其他比特币节点使用主网络的比特币协议进行通信。
总的来说,在整个比特币网络中,除了不同节点间使用比特币协议作为通信协议的主网络,也存在很多扩展网络,包括上面提到的矿池网络。不同的矿池网络可能还会使用不同的矿池挖矿协议,目前主流的具体矿池协议应该是 Stratum协议,该协议除了支持挖矿节点,也支持瘦客户端钱包。一个包含了比特币协议主网络各种节点和 Stratum 网络
另外,需要一个专门的传播网络用来加快新区块在矿工之间的同步传播,这个专门网络也叫比特币传播网络或比特币中继网络(Bitcoin Relay Network)。

以太坊网络 (第四种)

和比特币一样,以太坊的节点也具备钱包、挖矿、区块链数据库、网络路由四大功能,也同样存在很多不同类型的节点,除了主网络之外也同样存在很多扩展网络。但与比特币不同的,比特币主网的 P2P 网络是无结构的,但以太坊的 P2P 网络是有结构的。前面我们已经提过,以太坊的 P2P 网络主要采用了 Kademlia(简称 Kad) 算法实现,在分布式环境下快速而又准确地路由、定位数据的问题。


对比比特币和以太坊:
比特币网络的结构明显容易理解,实现起来也相对容易得多,而以太坊网络引入了异或距离、二叉前缀树、K-桶等,结构上复杂不少,但在节点路由上的确会比比特币快很多。另外,不管是比特币还是以太坊,其实都只是一种或多种协议的集合。

你可能感兴趣的:(网络)