P2P网络基础(学习笔记)

基本概述

P2P(peer-to-peer)网络又称为对等式网络,或者点对点网络。这是一种无中心的服务器、完全由用户群进行交换信息的互联网体系,P2P网络的每一个用户即是一个客户端,同时也具备服务器的功能。
它的定义是:网络的参与者共享他们所拥有的一部分硬件资源(处理能力、存储能力、网络连接能力、打印机等),这些共享资源通过网络提供服务和内容,能被其它对等节点(Peer)直接访问而无需经过中间实体。在此网络中的参与者既是资源、服务和内容的提供者(Server),又是资源、服务和内容的获取者(Client)。

P2P与C/S架构

在P2P技术之前,我们所有的网络应用都采用C/S或者B/S架构来实现的,然而在之前C/S架构的应用程序中,客户端软件向服务器发出请求,服务器然后对客户端请求做出响应,在这种情况下,如果客户端越多,此时服务器的压力就越大。而采用P2P技术实现的每台计算机既是客户端,也是服务器,他们的功能都是对等的。对于安装了P2P软件(如迅雷,QQ等)的计算机加入一个共同的P2P网络,网络中的节点之间可以直接进行数据传输和通信。
那么以C/S架构为例,我们接下来就看一看P2P网络与传统的架构有什么异同点。
相比于C/S,P2P有其自己独特的优势: 所有的客户端都能够提供资源,包括贷款、存储空间以及计算能力。所以其网络容量可以远超过其他模式。

C/S架构的缺点

  1. 服务器负担过重: 当大量用户访问C/S系统的服务器时,服务器常常会出现网络堵塞等现象,这时候,我们可能会通过增加投资提高服务器的硬件性能;
  2. 系统稳健性和服务器关联密切: 指的是如果服务器出现了问题时,整个系统的运行将会瘫痪(感觉是面向对象中经常强调的原则——低耦合原则)。
     图1 C/S模式

P2P的优点

  1. 对等模式: P2P系统中的客户端能够同时扮演客户端和服务器的角色,使两台计算机之间能够不通过服务器直接进行信息分享。比如:QQ中当好友在线的时候发信息时,相信此时是不需要经过服务器转发的,只有当给离线好友发送消息时,此时应该会先把消息发送到服务器端存储起来,当好友再次登录的时候,会和服务器进行连接,服务器会进行判断是不是给这个用户的信息来决定是否转发,QQ软件的实现属于混合型P2P结构的, 这个会在后面的P2P系统分类中介绍。这也就是说信息的传输分散在各个节点,无须经过某个中心服务器,用户的隐私信息被窃听和泄露的可能大大减少。
  2. 网络资源的分布式存储: 在C/S架构中,所有客户端都直接从服务器下载所有数据资源,这样势必会加重服务器的负担,而P2P则改变了以服务器为中心的状态,使每个节点可以先从服务器上个下载一部分,然后再相互从对方或者其他节点下载其余部分。采用这种方式,当大量客户端同时下载时,就不会形成网络堵塞现象了。
    在这里插入图片描述

P2P网络的特点

  1. 去中心化: 网络中的资源和服务分散在所有结点上,信息的传输和服务的实现都直接在结点之间进行,可以无需中间环节和服务器的介入,避免了可能的瓶颈。P2P的非中心化基本特点,带来了其在可扩展性、健壮性等方面的优势。
  2. 健壮性: P2P架构天生具有耐攻击、高容错的优点。
  3. 高性价比: P2P架构可以有效利用大量普通用户节点的空闲资源,不需要部署服务器或者需要部署的服务器很少。目前,P2P在这方面的应用多在学术研究方面,一旦技术成熟,能够在工业领域推广,则可以为许多企业节省购买大型服务器的成本。
  4. 私密性: 在P2P中,所有参与者都可以提供中继转发的功能,因而大大提高了匿名通信的灵活性和可靠性,能够为用户提供更好的隐私保护。
  5. 流量均衡: P2P网络环境下,硬件资源和数据内容分布在多个节点,而P2P节点可以分布在网络中任何角落,可以很好的实现整个网络的流量均衡。
  6. 负载均衡: P2P 网络环境下由于每个节点既是服务器又是客户机,减少了对传统C/S结构服务器计算能力、存储能力的要求,同时因为资源分布在多个节点,更好的实现了整个网络的负载均衡。
  7. 可扩展性: 不管是用户几点组成的P2P网络还是服务器节点组成的P2P网络,都是完全分布式的,不存在单点性能上的瓶颈。

P2P网络的主要功能

  1. 数据发布和传输: 数据发布和传输有一对一(如即时通讯)、一对多(如群组通信和消息广播)和多对多三种方式;
  2. 数据存储和检索: 数据存储和检索分为基于结构化的P2P网络方法和基于非结构化的P2P网络方法。结构化的P2P网络也就是基于分布式哈希表(DHT)的P2P网络,这个也是目前应用最广泛的,它的网络拓扑结构是确定的。而非结构化的P2P网络的资源存储通常与网络拓扑结构无关,例如Gnutella。
  3. 分布式数据处理: 目前,大多数分布式数据处理技术采用的是master/slave的架构。而基于P2P网络,也能够进行分布式的数据处理。

P2P网络的分类

集中式全分布式非结构化全分布式结构化混合式

集中式

这种网络采用的是中心化的拓扑结构,存在“中心服务器”,而其作用为保存接入节点的地址信息。倘若两个peer之间想要进行通信,那么它们可以通过中心服务器进行对方地址的索要。例如:将音乐文件与保存文件的节点相互关联,用户查找某个音乐时,中心服务器告知储存节点地址,用户点对点连接以获得音乐。由此可知,中心服务器是用来提供地址索引的(其他架构的中心服务器是提供所有的服务)。倘若其出现故障,那么整个系统就出现瘫痪了。
对小型网络而言,中心化拓扑模型在管理和控制方面占一定优势。但是由于整个网络严重依赖于中心服务器,容易造成性能瓶颈和单点故障的问题。该模型并不适合大型网络应用。
在这里插入图片描述

全分布式非结构化

这种网络采用Flooding搜索算法,每次搜索都把要查询的消息广播给网络上的所有节点。因为它没有中央索引服务器,每台机器在网络中是真正的对等关系,既是客户机同时又是服务器。全分布 P2P 节点可以自由加入退出,并且没有中心节点,节点地址没有结构化统一标准,整个网络结构呈随机图的结构, 无固定网络结构图。然而完全的自由意味着新节点无法得知 P2P 网络节点信息,从而无法加入网络。全分布式 P2P 网络更加自由化的同时也带来节点管理的问题,节点频繁加入、退出使得整个网络结构无法稳定, 大量的广播消息不仅造成资源浪费,甚至会阻塞网络。而比特币采用的就是这种 P2P 网络结构,全分布式使得任何人任何节点都可以参与,非结构化使得节点间既可以通过区块链 P2P 协议同步区块数据,又保持匿名隐私保护。
例如:当一台计算机要下载一个文件,它首先以文件名或者关键字生成一个查询,并把这个查询发送给与它相连的所有计算机,这些计算机如果存在这个文件,则与查询的机器建立连接,如果不存在这个文件,则继续在自己相邻的计算机之间转发这个查询,直到找到文件为止。为了控制搜索消息不至于永远这样传递下去,一般通过TTL (Time To Live)的减值来控制查询的深度。
可以发现,当网络规模变大以后,这种搜索方式会引发”广播风暴”,严重消耗网络带宽和节点的系统资源。虽然避免了集中式对等网络的“单点故障”问题,但是效率却很低下。
在这里插入图片描述

全分布式结构化

目前采用最广泛的就是结构化的分布式网络,也就是基于DHT(分布式哈希表)的网络。DHT为了达到Napster的效率和正确性,以及Gnutella的分散性,使用了较为结构化的基于键值对的路由方法。(如下图所示)。
在这里插入图片描述
它也是一种分布式网络结构,但与纯分布式结构不同。纯分布式网络就是一个随机网络,而结构化网络则将所有节点按照某种结构进行有序组织,比如形成一个环状网络或树状网络。而结构化网络的具体实现上,普遍都是基于 DHT(Distributed Hash Table,分布式哈希表) 算法思想。结构化模型与非结构化模型相似,但结构化模型的节点管理有固定结构图。例如:以太坊将节点椭圆加密算法的公钥转换为64 Byte长度的NodeID作为唯一标志符来区分节点,使得以太坊可以在没有中心服务器的情况下实现节点地址精确查找。
目前实现了DHT协议的有Kademlia和Chord算法,其中Kad算法由于简单易用而被广泛使用,其中比特币和以太坊网络中的P2P网络采用的就是Kad算法。后面会对DHT进行进一步说明。

混合式

混合式也可称为半分布式。结合集中式和分布式模型各有的优点,半分布式 P2P 网络将节点分类成普通节点和超级节点,从而构成了半分布式网络结构。
如下图所示,网络中存在多个超级节点组成分布式网络,而每个超级节点则有多个普通节点与它组成局部的集中式网络。一个新的普通节点加入,则先选择一个超级节点进行通信,该超级节点再推送其他超级节点列表给新加入节点,加入节点再根据列表中的超级节点状态决定选择哪个具体的超级节点作为父节点。这种结构的泛洪广播就只是发生在超级节点之间,就可以避免大规模泛洪存在的问题。在实际应用中,混合式结构是相对灵活并且比较有效的组网架构,实现难度也相对较小,因此目前较多系统基于混合式结构进行开发实现。
在这里插入图片描述
其实,比特币网络如今也是这种结构。

比特币网络

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

P2P网络的应用

  1. 文件内容共享和下载: 利用P2P技术可以使计算机之间不通过服务器直接进行内容共享和数据分发,使得互联网上任意两台机器间共享数据成为可能。例如爱奇艺、腾讯视频客户端等采用的P2P流媒体技术,使得播放速度更加流畅。
  2. 计算能力和存储共享: 基于P2P网络的分布式结构构造出分布式的存储系统实现存储共享,提供高效率、高性价比、负载均衡的文件存取功能,例如国外的Sia、Storj等分布式云存储平台,不依赖第三方的大型集中存储空间,避免了数据泄露、保证了安全性。同时由于任何人的主机都可以提供存储服务,降低了门槛,大幅降低了存储的成本。 同时也可以共享CPU处理能力。例如360的共享云计划和星域CDN等,充分利用每个人机器的闲散计算资源来提供计算服务。
    在这里插入图片描述
  3. 基于P2P的即时通讯: 例如Skype通话软件就是从连接建立和数据传输都采用P2P实现,保证了良好的通话质量。
  4. 基于P2P方式的协同处理与服务共享平台: 常见的协同处理有视频会议、共享白板、协同协作等,而基于P2P技术的同样也可以实现上述功能,不同的是,这种实现方式不需要中心服务器,参与协同工作的计算机之间可以直接建立点对点的连接。例如被微软收购的Groove协同软件平台。

猜你喜欢

转载自blog.csdn.net/yeaqqqq/article/details/106897809
P2P