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域名搜索。比特币社区里会维护一些域名,比如seed.bitcoin.sipa.be,由比特币的核心开发者sipa维护。通过查询这些域名,可以知道目前存在哪些节点,它们的ip地址是什么,这样就可以通过命令与这些节点建立连接。   

  

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

  

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

  

  启动完成后,节点将记住最近成功连接的对等节点。这样,当它重新启动时,它可以快速地重新建立与之前对等网络的连接。如果先前网络的对等节点没有响应连接请求,则该节点可以使用种子节点重新启动。如果一个节点保持连接90分钟而没有任何通信,它将被认为与网络断开,网络将开始寻找新的对等节点。   

  

  3.局域网穿透   

  

  上面说的是互联网环境下的节点发现。如果您想在局域网中部署区块链节点,您需要使用局域网渗透技术。   

  

  因为比特币的P2P网络是完全分布式的,建立在互联网上,如果你在局域网内运行一个节点,在公网上是找不到的。   

rong>这就好比你被困在一个房间里,即便外面的世界丰富多彩,你也出不去,外面的人也看不见你,不能跟你进行连接。

  

如果想要打破这个局面,就必须在局域网与公网之间建立一个通道,通过这个通道来进行信息的交互,这就是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网络的有关内容,概括起来就是两个方面:资源的定位和资源的获取。其中节点发现和局域网穿透属于资源定位问题,节点交互协议属于资源获取问题。

相关文章