跳到主要内容

P2P点对点网络

P2P通信

节点之间直接通信而不需要经由第三方对等网络,即对等计算机网络,是一种在对等者(Peer)之间分配任务和工作负载的分布式应用架构,是对等计算模型在应用层形成的一种组网或网络形式。

在P2P网络环境中,彼此连接的多台计算机之间都处于对等的地位,各台计算机有相同的功能,无主从之分,一台计算机既可作为服务器,设定共享资源供网络中其他计算机所使用,又可以作为工作站,整个网络一般来说不依赖专用的集中服务器,也没有专用的工作站。网络中的每一台计算机既能充当网络服务的请求者,又对其它计算机的请求做出响应,提供资源、服务和内容。通常这些资源和服务包括:信息的共享和交换、计算资源(如CPU计算能力共享)、存储共享(如缓存和磁盘空间的使用)、网络共享、打印机共享等。

网络发现 当新节点启动时,首先需要找到网络中的其他比特币节点以加入进去。为开始这一流程,新节点必须在网络上找到至少一个节点,并与之连接。其他节点的地理位置无关紧要;比特币的网络拓扑不是以地理位置来定义的。因此,新节点可以随机选择任意存在的节点进行连接。 为了与已知节点相连,需要与之建立起TCP(传输控制协议)连接,比特币节点的服务端口通常为8333(约定俗成的比特币端口),或者其他约定的服务端口。一旦连接建立,新节点立即向服务端发送一个版本信息进行“握手(handshake)”。握手信息主要是识别信息,包括如下信息。 ▎协议版本(PROTOCOL_VERSION) 定义比特币P2P协议版本的常量(比如:70002)。 ▎本地服务(nLocalServices) 节点提供的本地服务列表,目前只有网络节点(NODE_NETWORK)。 ▎时间(nTime) 当前时间。 ▎对端地址(addrYou) 从本地节点看到的远端节点IP地址。 ▎本地地址(addrMe) 本地节点发现的本机IP地址。 ▎子版本(subver) 显示本地节点软件类型的子版本号(比如:“/Satoshi:0.9.2.1/”)+。 ▎最佳高度(BestHeight) 本地节点区块链的高度。

完全节点 完全节点是指那些维护了包含所有交易的区块链全量副本的节点。更确切地说,它们应该被称为“完全区块链节点”。

交换“库存” 完全节点与其他节点连接后,它要做的第一件事就是尝试创建一个完整的区块链。如果这是一个全新节点,本地完全没有区块链数据,那么它将只知道一个区块,即创世区块,它被静态内嵌到客户端软件里。从0号区块(创世区块)开始,新节点必须下载成千上万的区块来实现与网络的同步,并重建本地区块链。

轻节点 SPV方法可以保证它们在不保存全量区块链的情况下也能正常运行。这些类型的客户端被称为SPV客户端或者轻量级客户端。因为SPV节点需要获取特定的交易以有选择地验证交易,这就给隐私带来了威胁。不像完全区块链节点收集每个区块中的所有交易,SPV节点对特定数据的请求,会无意中泄露它们钱包中的地址。布隆过滤器 布隆过滤器是一个概率搜索过滤器,采用一种不精确指定的方式来描述期望的匹配模式。布隆过滤器提供了一种在保护隐私的前提下表达搜索模式的有效途径。SPV节点使用这种方式向其对等节点请求匹配特定模式的交易列表,而不用暴露它们搜索的确切地址。

P2P技术及其发展历程

P2P是一种分布式应用计算网络架构,可在地位对等的参与者之间划分任务或工作负载。参与节点在应用中享有同等的权利,平等参与,并形成点对点网络。网络节点将其部分资源(例如处理能力、磁盘存储或网络带宽)直接提供给其他参与者,而无须服务器或稳定主机的集中协调。与传统的客户端服务器模型(其中资源消费和供给相分离)相反,这些节点既是网络资源的供应者,又是消费者。P2P在隐私性要求高的网络中和文件共享领域得到了广泛的应用。P2P这一概念最早出现在1969年4月7日的第一份RFC(RequesFor Comments,即征求意见)文档中,RFC是互联网工程任务组(Internet Engineering Task Force缩写为IETF)发布的一系列备忘录,后来演变为用来记录互联网规范、协议、过程等的标准文件。

1999年:P2P音乐共享服务Napster上线

1999年,18岁的肖恩·范宁与19岁的肖恩·帕克上线发布P2P音乐共享服务Napster,首次把P2P技术变成为广大消费者接受并喜欢的主流,是互联网文件下载共享方式的一次变革。

2001年:BitTorrent(比特流)协议

2001年4月,布拉姆·科恩发布了BitTorrent协议,并在7月正式应用。BitTorrent协议是架构于TCP/IP协议(传输控制协议/网际协议)之上的一个P2P文件传输通信协议。它把文件虚拟分成大小相等的块,并把每个块的索引信息和哈希验证码写入种子文件。下载者根据种子文件告知对方自己已有的块,然后交换没有的数据。使用BitTorrent协议,下载的人越多,提供的带宽越多,下载速度也就越快;同时,拥有完整文件的用户也会越来越多,文件的“寿命”会不断延长。

2002年:Kademlia协议

2002年,彼塔·梅耶蒙科夫与戴维·马兹埃瑞斯提出了第三代P2P网络的节点动态管理和路由协议Kademlia,通过分布式哈希表实现信息的存储和检索。相比之前的两代协议,Kademlia以全局唯一ID(身份识)标记P2P网络节点,以节点ID异或(XOR)值度量节点之 间距离,并通过距离分割子树构建路由表,建立起一种全新的网络拓扑结构,相比其他算法更加简单和高效。

2005年,BitTtorrent实现基于Kademlia协议的分布式

哈希表技术,eMule也实现了基于Kademlia的类似技术。以太坊使用Kademlia作为分布式网络的底层算法。

2009年:比特币协议

2009年1月,比特币网络上线,发布了第一个开源的比特币客户端软件。这是P2P技术首次应用于加密数字货币,也成为区块链最重要的基础技术之一。

P2P网络技术的特点体现在以下几个方面。

  • 1)非中心化:网络中的资源和服务分散在所有节点上,信息的传输和服务的实现都直接在节点之间进行,可以无须中间环节和服务器的介入,避免了可能出现的瓶颈。P2P的非中心化基本特点,带来了其在可扩展性、健壮性等方面的优势。
  • 2)可扩展性:在P2P网络中,随着用户的加入,不仅服务的需求增加了,系统整体的资源和服务能力也在同步地扩充,始终能比较容易地满足用户的需要。理论上其可扩展性几乎可以认为是无限的。例如:在传统的通过FTP的文件下载方式中,当下载用户增加之后,下载速度会变得越来越慢;P2P网络正好相反,加入的用户越多,P2P网络中提供的资源就越多,下载的速度反而越快。
  • 3)健壮性:P2P架构天生具有耐攻击、高容错的优点。由于服务是分散在各个节点之间进行的,部分节点或网络遭到破坏对其他部分的影响很小。P2P网络一般在部分节点失效时能自动调整整体拓扑,保持其他节点的连通性。P2P网络通常是以自组织的方式建立起来的,并允许节点自由地加入和离开。
  • 4)高性价比:性能优势是P2P网络被广泛关注的一个重要原因。随着硬件技术的发展,个人计算机的计算和存储能力以及网络带宽等性能依照摩尔定理高速增长。采用P2P架构可以有效地利用互联网中散布的大量普通节点,将计算任务或存储资料分布到所有节点上。利用其中闲置的计算能力或存储空间,达到高性能计算和海量存储的目的。目前,P2P在这方面的应用多在学术研究方面,一旦技术成熟,能够在工业领域推广,就可以为许多企业节省购买大型服务器的成本。 5)隐私保护:在P2P网络中,由于信息的传输分散在各节点之间进行而无须经过某个集中环节,用户的隐私信息被窃听和泄漏的可能性大大缩小。此外,目前解决Internet隐私问题主要采用中继转发的技术,从而将通信的参与者隐藏在众多的网络实体之中。在一些传统的匿名通信系统中,实现这一机制依赖于某些中继服务器节点。而在P2P网络中,所有参与者都可以提供中继转发的功能,因而大大提高了匿名通信的灵活性和可靠性,能够为用户提供更好的隐私保护。 6)负载均衡:在P2P网络环境下,由于每个节点既是服务器又是客户机,减少了对传统C/S结构服务器计算能力、存储能力的要求。同时因为资源分布在多个节点,可以更好地实现整个网络的负载均衡。

P2P网络协议在业界的应用

目前,P2P计算技术正逐渐应用到军事、商业、政府信息、通信等领域。根据具体应用不同,可以把P2P大致分为以下类型。

  • 文件内容共享和下载,如Napster、Gnutella、eDonkey、eMule、Maze、BT等;
  • 计算能力和存储共享,如SETI@home、Avaki、Popular Power等;
  • 基于P2P技术的协同与服务共享平台,如JXTA、Magi、Groove等;
  • 即时通信工具,包括ICQ、QQ、Yahoo Messenger、MSN Messenger等;
  • P2P通信与信息共享,如Skype、Crowds、Onion Routing等;
  • 基于P2P技术的网络电视,如PPStream、PPLive、QQLive、SopCast等。