区块链p2p(深入区块链技术(二)|P2P网络)

  区块链p2p(深入区块链技术(二)|P2P网络)

上一篇文章中,我们简单介绍了区块链中的几个核心技术点。今天我们就来看第一个:P2P网络。

  

P2P技术的应用已经十分广泛,比如我们熟知的迅雷当年就是利用这一技术迅速崛起的。在流媒体、点对点通讯、文件共享和协同处理等方面都离不开这一技术。

  

  

P2P的网络协议也很多,常见的包括BitTorrent、ED2K、Gnutella、Tor等。

  

比特币、以太坊等众多区块链也都实现了基于P2P的网络协议,不过它们与上述的网络协议不同。今天我们重点介绍比特币和以太坊的P2P网络,主要从四个方面展开:

  

  • 区块链的网络连接与拓扑结构

      

  • 节点发现

      

  • 局域网穿透

      

  • 节点交互协议

      

1。区块链的网络连接与拓扑结构

  

目前,大部分的区块链项目所使用的底层网络协议是TCP/IP协议,少部分支持UDP协议。从协议层角度看,区块链是基于TCP/IP协议的,也就是在传输层之上,属于最上面的应用层。

  

所以,从这个角度来看,区块链本身只是整个互联网协议层中的最上层,它本身还是要依赖于底层的协议为它工作。就好比一座大楼的顶层,是需要下面的楼层给它提供支撑的。如果没有下面的楼层,顶层也就无法存在。

  

因此,“区块链会颠覆互联网”这种说法是不值一驳的,它本身就属于整个互联网大框架中的一部分。如果说区块链要颠覆什么,也只能是属于同一层的其他网络协议,比如HTTP协议等。

  

  

如果将矿场内部的挖矿交互协议和数量庞大的轻节点考虑在内,比特币的P2P网络会显得非常复杂,因此我们仅讨论全节点之间交互场景下的P2P网络连接与拓扑。

  

P2P网络本身的拓扑结构有很多种,比如树型、星型、网状型等。比特币全节点组成的网络是一种全分布式的拓扑结构,类似于网状型。节点与节点之间的传输过程采用的是广播方式:交易从某个节点产生,然后该节点将交易广播给临近节点。交易被临近节点验证通过后,临近节点再广播给它们自己的临近节点,如此层层传开,直至全网节点都能收到。

  

全节点与简化支付验证客户端(SPV)之间的交互模式则又不一样,SPV节点可以随机选择一个全节点进行连接,这个全节点就成为SPV节点的代理,帮助SPV节点进行交易广播。

  

2。节点发现

  

节点发现是任何区块链节点进入区块链P2P网络的第一步。在刚进入一个区块链网络时,新节点需要发现其余节点,并与他们建立连接。这就好比你刚到一个新地方旅游,你需要不停认识周围的陌生人,才能逐步融入新环境。

  

  

节点发现可分为初始节点发现启动后节点发现两种。

  

初始节点发现是指某个全节点是新建立的,第一次运行,上面没有任何关于其他节点的数据和信息。启动后节点发现是指某个全节点已经处于运行状态,在运行的动态过程中发现其他新节点。

  

初始节点发现的第一种方式是DNS-seed,又称DNS种子节点。DNS即域名查询(Domain Name Search)。在比特币社区里会维护一些域名,比如seed。bitcoin。sipa。be这个域名就是由比特币核心开发者Sipa维护的。通过查询这些域名,我们能够知道目前已经有哪些节点,他们的ip地址是多少,这样就可以通过命令来与这些节点建立连接。

  

初始节点发现的第二种方式是通过代码中的硬编码来查找节点。在比特币代码中已经硬编码了一些地址,这些地址被称为种子节点。种子节点是一些长期稳定运行的节点,连接到种子节点的好处是可以通过种子节点来快速发现网络中的其他节点。

  

启动后节点发现是节点在运行后对对等节点进行动态维护的过程。在比特币网络中,比特币交易一个节点可以将自己维护的对等节点列表发送给临近节点。节点在运行过程中必须持续进行两项操作:在失去已有连接时发现新节点,并在其他节点启动时为其提供帮助。

  

在启动完成后,节点会记住它最近成功连接的对等节点。这样,当重新启动后它可以迅速与先前的对等节点网络重新建立连接。如果先前的网络的对等节点对连接请求无应答,该节点可以使用种子节点重启。如果节点持续某个连接长达90分钟没有任何通信,它会被认为已经从网络中断开,网络将开始查找一个新的对等节点。

  

3。局域网穿透

  

上面我们谈的都是在互联网环境下的节点发现。如果你想在一个局域网里部署区块链节点,就需要用到局域网穿透技术了。

  

因为比特币的P2P网络是全分布式的,建立在互联网上的,所以如果你在局域网里运行一个节点,公网上是发现不了的。这就好比你被困在一个房间里,即便外面的世界丰富多彩,你也出不去,外面的人也看不见你,不能跟你进行连接。

  

如果想要打破这个局面,就必须在局域网与公网之间建立一个通道,通过这个通道来进行信息的交互,这就是ip地址的映射。通过NAT技术和UPnP协议,我们可以自动完成这个通道建立的过程。

  

NAT技术又叫网络地址转换技术(Network Address Translation),是一种在IP数据包通过路由器或防火墙时重写来源IP地址或目的IP地址的技术。当来自局域网内的ip地址想与公网地址通信时,需要借助NAT主机作为中介,由NAT主机将局域网内ip地址转换为公网ip地址,与外部通信。

  

UPnP是通用即插即用(Universal Plug and Play)的缩写。它主要用于设备的智能互联互通。通过UPnP,所有在网络上的设备马上就能知道有新设备加入。在比特币和以太坊中均使用了这种协议作为局域网穿透的工具。只要局域网中的路由设备支持NAT和UPnP功能,就可以将局域网中的区块链节点自动映射到公网上。

  

  

4。节点交互协议

  

节点在建立连接后,会不断进行信息交互。交互的主要内容就是一些特定的命令以及相关的信息。其中,命令写在消息的头部,信息则写在消息体中。

  

命令分为请求命令和数据交互命令。

  

节点连接完成后做的第一件事就是进行握手,互相了解对方信息,比如看双方的版本号是否相同或兼容等。

  

在握手完毕后,无论交互什么信息,都需要保持长连接(长时间的连接)。在比特币网络中,节点之间需要通过PING/PONG两种类型的消息来保持连接。一旦超过90分钟未收到对方的消息,则认为对方已从网络中断开,会开始发现新的节点。

  

请求命令用于发起者向对方发起一个请求,比如请求对方发送节点列表等。数据交互命令则用于数据的传输,比如节点信息同步等。

  

节点信息的同步有两种方式。一种是区块头优先,即先将历史区块的消息头信息先同步完,然后再从其他节点同步消息体。另一种是区块优先,即直接从其他节点同步完整的消息。两种方式对网络的影响不同,前一种能够较好的减轻网络负担。

  

总结

  

今天我们简单介绍了区块链P2P网络的有关内容,概括起来就是两个方面:资源的定位和资源的获取。其中节点发现和局域网穿透属于资源定位问题,节点交互协议属于资源获取问题。

  
","content_hash"!"88064677

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

评论