P2P对等网络
网络的参与者共享他们所拥有的一部分硬件资源(处理能力、存储能力、网络连接能力、打印机等),这些共享资源通过网络提供服务和内容,能被其它对等节点(Peer)直接访问而无需经过中间实体。在此网络中的参与者既是资源(服务和内容)提供者(Server),又是资源获取者(Client)。
P2P打破了传统的Client/Server (C/S)模式,在网络中的每个结点的地位都是对等的。每个结点既充当服务器,为其他结点提供服务,同时也享用其他结点提供的服务。
优势
- 去中心化:信息直接在节点直接传递,避免了可能存在的瓶颈。
- 可扩展性:扩展方便,并且扩展不会对网络造成拥堵
- 健壮性:天生具有耐攻击、高容错的优点。由于服务是分散在各个结点之间进行的,部分结点或网络遭到破坏对其它部分的影响很小。P2P网络一般在部分结点失效时能够自动调整整体拓扑,保持其它结点的连通性。P2P网络通常都是以自组织的方式建立起来的,并允许结点自由地加入和离开。
- 高性价比:采用P2P架构可以有效地利用互联网中散布的大量普通结点,将计算任务或存储资料分布到所有结点上。利用其中闲置的计算能力或存储空间,达到高性能计算和海量存储的目的。
- 隐私保护:经过的节点少,隐私更有保护
- 负载均衡:由于没有中心节点,资源较为均衡的分布在网络中,所以很好的实现了负载均衡。
应用
P2P通讯
拓扑结构
中心化拓扑(Centralized Topology)
类似C/S结构
全分布式非结构化拓扑(Decentralized Unstructured Topology)
全分布式结构化拓扑(Decentralized Structured Topology,也称作DHT网络)
半分布式拓扑(Partially Decentralized Topology)
吸取了中心化结构和全分布式非结构化拓扑的优点,选择性能较高(处理、存储、带宽等方面性能)的结点作为超级结点(英文表达为SuperNodes或者Hubs),在各个超级结点上存储了系统中其他部分结点的信息,发现算法仅在超级结点之间转发,超级结点再将查询请求转发给适当的叶子结点。
但对超级点依赖性大,易于受到攻击,容错性也受到影响。
主要技术难点
peer是如何区分的?
每个peer都有一个唯一的标识符,是随机生成的。
uuid-59616261646162614E50472050325033816021CBBE15434AAF3B827A0B80417203
如何找到对等点的?
- 在节点启动的时候,可以指定一个正活跃的节点的IP地址;节点本身也有初始节点,这些是长期稳定运行的节点,称为种子节点,可以基于这些种子节点来发现网络中的其他节点。
- 节点可以向已知的其他节点发送获取地址的请求,要求它们返回自己知道的对等节点的IP地址列表,这样就能连接到需要连接的对等节点
- 节点在建立连接后,也会想其他相邻节点发送包含自身IP地址的信息,相邻节点会依次传递下去
如何保证可靠的网络通路?
比特币节点采用TCP协议通信,使用8333端口与节点j建立连接,建立连接时也会有认证“握手”的通信过程,用来确定协议版本,软件版本,节点IP,区块高度等。
连接建立后,就跟节点同步区块链数据,节点会相互发出getblocks的消息,消息里会包含本地区块链顶端的哈希值。
节点在收到消息后,判断该哈希值并不是自己区块链中顶端的区块,则说明其自身的本地区块链比其他节点的区块链更长,并告诉其他节点需要补充区块,其他节点发送getdata消息来请求区块,验证后更新到本地区块链中。