主页 > imtoken中文版app > P2P网络基础(学习笔记)

P2P网络基础(学习笔记)

imtoken中文版app 2024-01-07 05:15:15

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架构的缺点

服务器不堪重负:当大量用户访问C/S系统的服务器时,服务器经常会出现网络拥塞等现象。 这时候,我们可能会通过增加投入来提高服务器的硬件性能; 系统健壮性与服务器息息相关:参考 最重要的是,如果服务器出现问题,整个系统的运行就会瘫痪(感觉就像面向对象中经常强调的原理-低耦合原则)。

 图1 C/S模式

P2P的优势

点对点模式:P2P系统中的客户端可以同时扮演客户端和服务器的角色,使两台计算机不经过服务器就可以直接共享信息。 例如:在QQ中,当好友在线发送消息时,认为此时不需要服务器转发。 只有在给离线好友发送消息时,才需要先将消息发送到服务器进行存储。 登录时会连接到服务器,由服务器判断信息是否为用户决定是否转发。 QQ软件的实现属于混合P2P结构,在后面的P2P系统分类中会介绍。 这意味着信息的传输是分散在各个节点之间,不经过一个中央服务器,大大降低了用户隐私信息被窃听和泄露的可能性。 网络资源的分布式存储:在C/S架构中,所有客户端直接从服务器下载所有数据资源,必然会增加服务器的负担,而P2P改变了以服务器为中心的状态,使得每个节点都可以下载一个先从服务器下载一部分,然后从彼此或其他节点下载其余部分。 这样,当大量客户端同时下载时,就不会出现网络拥塞的情况。

在这里插入图片描述

P2P网络的特点是去中心化的:网络中的资源和服务分散在各个节点上,信息的传递和服务的实现直接在节点之间进行,没有中间环节和服务器的介入,避免了可能的瓶颈。 P2P 去中心化的基本特征带来了其在可扩展性和健壮性方面的优势。 健壮性:P2P 架构本身具有抗攻击性和高度容错性。 性价比高:P2P架构可以有效利用大量普通用户节点的闲置资源,不需要部署服务器或部署很少的服务器。 目前,P2P在这方面的应用多停留在学术研究上。 一旦技术成熟,可以在工业领域推广,可以为很多企业节省购买大型服务器的成本。 隐私性:在P2P中,所有参与者都可以提供中继和转发的功能,从而大大提高匿名通信的灵活性和可靠性,为用户提供更好的隐私保护。 流量均衡:在P2P网络环境中,硬件资源和数据内容分布在多个节点中,P2P节点可以分布在网络的任何一个角落,可以很好的实现整个网络的流量均衡。 负载均衡:在P2P网络环境中,由于每个节点既是服务器又是客户端,降低了传统C/S结构服务器对计算能力和存储能力的要求。 同时,由于资源分布在多个节点,整个网络负载均衡。 可扩展性:无论是用户点组成的P2P网络,还是服务器节点组成的P2P网络,都是完全分布式的,不存在单点性能瓶颈。 P2P网络的主要功能 数据发布和传输:数据发布和传输有三种方式:一对一(如即时通讯)、一对多(如群组通信、消息广播)和多对多-太多; 数据存储和检索:数据存储和检索分为结构化P2P网络方法和非结构化P2P网络方法。 结构化P2P网络也是目前应用最广泛的基于分布式哈希表(DHT)的P2P网络,其网络拓扑结构是确定性的。 非结构化P2P网络的资源存储通常与网络拓扑无关,如Gnutella。 分布式数据处理:目前,大多数分布式数据处理技术都采用master/slave架构。 基于P2P网络,还可以进行分布式数据处理。 P2P网络的分类

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

集中

这种网络采用集中式拓扑结构比特币中节点的功能包括,有一个“中央服务器”,其作用是存储接入节点的地址信息。 如果两个点要通信,他们可以通过中央服务器请求对方的地址。 例如:音乐文件与存储文件的节点相关联。 当用户搜索音乐时,中央服务器通知存储节点地址,用户点对点连接获取音乐。 由此可见,中心服务器是用来提供地址索引的(其他架构的中心服务器提供所有服务)。 如果它失败了,整个系统就会瘫痪。

对于小型网络,集中式拓扑模型在管理和控制方面具有一定的优势。 但由于整个网络对中心服务器的依赖性很强,容易造成性能瓶颈和单点故障问题。 这种模式不适合大型网络应用。

在这里插入图片描述

完全分布式和非结构化

这种网络采用Flooding搜索算法,每次搜索将要查询的消息广播给网络上的所有节点。 因为它没有中央索引服务器,每台机器都是网络中真正的对等体,同时充当客户端和服务器。 全分布式P2P节点可以自由加入和退出,没有中心节点,节点地址也没有结构化的统一标准。 整个网络结构是一个随机的图结构,没有固定的网络结构图。 但是,完全自由意味着新节点无法获知P2P网络节点的信息,因此无法加入网络。 全分布式P2P网络在更加自由化的同时,也带来了节点管理的问题。 节点的频繁加入和退出使得整个网络结构不稳定。 大量的广播消息不仅造成资源浪费,甚至会阻塞网络。 比特币采用这种P2P网络结构,完全分布式使得任何人和任何节点都可以参与,非结构化使得节点可以通过区块链P2P协议同步区块数据,同时保持匿名和隐私保护。

例如:当一台计算机要下载一个文件时,它首先生成一个带有文件名或关键字的查询比特币中节点的功能包括,并将该查询发送给与其连接的所有计算机。 如果这些计算机有该文件,它们将与查询机器建立连接,如果该文件不存在,则继续在其相邻计算机之间转发查询,直到找到该文件。 为了控制搜索消息永远传递下去,一般通过TTL(Time To Live)的减值来控制查询的深度。

可以发现,当网络规模变大时,这种搜索方式会引起“广播风暴”,严重消耗节点的网络带宽和系统资源。 虽然它避免了集中式对等网络的“单点故障”问题,但效率很低。

在这里插入图片描述

全分布式结构化

目前应用最广泛的是结构化分布式网络,即基于DHT(分布式哈希表)的网络。 为了达到Napster的高效和正确以及Gnutella的去中心化,DHT采用了一种更加结构化的基于键值对的路由方式。 (如下所示)。

在这里插入图片描述

它也是一种分布式网络结构,但又不同于纯分布式结构。 纯分布式网络是随机网络,而结构化网络是将所有的节点按照一定的结构有序组织起来,比如组成环形网络或者树形网络。 结构化网络的具体实现一般是基于DHT(Distributed Hash Table,分布式哈希表)算法的思想。 结构化模型与非结构化模型类似,但结构化模型的节点管理有固定的结构图。 例如:以太坊将节点椭圆加密算法的公钥转换成一个64字节的NodeID作为区分节点的唯一标识符,这样以太坊就可以在没有中心服务器的情况下实现准确的节点地址查找。

目前实现DHT协议的有Kademlia和Chord算法。 其中,Kad算法因其简单易用而被广泛应用。 其中,比特币和以太坊网络中的P2P网络使用的是Kad算法。 稍后将进一步解释DHT。

混合型

混合也可以称为半分布式。 半分布式P2P网络结合了集中式和分布式模型的优点,将节点分为普通节点和超级节点,从而形成半分布式网络结构。

如下图所示,网络中有多个超级节点组成一个分布式网络,每个超级节点又有多个普通节点与其组成一个局部中心化网络。 当一个新的普通节点加入时,首先选择一个超级节点进行通信,超级节点再向新加入的节点推送其他超级节点的列表,由加入的节点根据具体情况决定选择哪个超级节点作为父节点。到列表中超级节点的状态。 这种结构的泛洪广播只发生在超级节点之间,可以避免大规模泛洪的问题。 在实际应用中,混合结构是一种比较灵活有效的组网架构,实现难度较小。 因此,目前很多系统都是基于混合结构开发和实现的。

在这里插入图片描述

事实上,今天的比特币网络也是这样构建的。

比特币网络

首先,比特币网络中的节点主要有四个功能:钱包、挖矿、区块链数据库、网络路由。 每个节点都将具有路由功能,但不一定具有所有其他功能。 不同类型的节点可能只包含部分功能。 通常,只有比特币核心节点才会包含所有四大功能。

在这里插入图片描述

所有节点都将参与验证和广播交易和区块信息,并发现和维护与其他节点的连接。 有些节点会包含一个完整的区块链数据库,包括所有的交易数据,也称为全节点。 其他节点只存储区块链数据库的一部分,一般只存储区块头,不存储交易数据,它们会通过“简化交易验证(SPV)”完成交易验证,这类节点也称为SPV节点或Lightweight Node。 钱包一般是PC或手机客户端的一个功能。 用户可以通过钱包查看自己账户的金额、管理钱包地址和私钥、发起交易等。 除了比特币核心钱包是全节点外,大部分钱包都是轻节点。 挖矿节点与其他挖矿节点竞争,通过解决工作量证明 (PoW) 算法问题来创建新区块。 有的挖矿节点也是全节点,也就是存储了一个完整的区块链数据库。 这样的节点一般都是独立矿工(Solo Miner)。 还有一些挖矿节点不是独立挖矿,而是和其他节点一起接入矿池,参与集体挖矿。 这样的节点一般被称为矿池矿工(Pool Miner)。 这样就会形成一个本地中心化的矿池网络,中心节点是矿池服务器,其他所有挖矿节点都连接到矿池服务器上。 矿池矿工与矿池服务器之间的通信不是使用标准的比特币协议,而是矿池挖矿协议,矿池服务器作为一个全节点然后使用主网的比特币协议与其他比特币通信节点进行通信。

P2P网络的应用文件内容共享和下载:利用P2P技术可以在计算机之间直接进行内容共享和数据分发,无需服务器,使互联网上任意两台机器之间的数据共享成为可能。 比如爱奇艺和腾讯视频客户端采用的P2P流媒体技术,让播放速度更加流畅。 计算能力与存储共享:基于P2P网络的分布式结构,构建分布式存储系统,实现存储共享,提供高效、低成本、负载均衡的文件访问功能,如分布式云存储等如国外的Sia和Storj等平台,不依赖第三方庞大的中心化存储空间,避免了数据泄露,保证了安全性。 同时,由于任何人的主机都可以提供存储服务,降低了门槛,大大降低了存储成本。 同时,CPU处理能力也可以共享。 比如360的共享云计划和星域CDN等,充分利用每个人机器闲置的计算资源,提供计算服务。

在这里插入图片描述

基于P2P的即时通信:例如Skype通话软件使用P2P进行连接建立和数据传输,保证了良好的通话质量。 基于P2P的协同处理和服务共享平台:常见的协同处理包括视频会议、共享白板、协同协作等,上述功能也可以基于P2P技术实现。 不同的是,这种实现不需要中央服务器,参与协同工作的计算机之间可以直接建立点对点的连接。 比如被微软收购的Groove协作软件平台。