主页 > imtoken钱包app官方下载 > 深入区块链技术(二)|P2P网络

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

imtoken钱包app官方下载 2023-06-23 06:16:47

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

P2P技术的应用已经非常广泛。 比如我们熟悉的迅雷,就是利用这个技术迅速崛起的。 这种技术离不开流媒体、点对点通信、文件共享和协同处理等方面。

808比特币创始人颜万卫 炮制比特币风险大_比特币网络_比特币闪电网络如何使用

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

比特币、以太坊等很多区块链也实现了基于P2P的网络协议,但与上述网络协议不同。 今天我们重点关注比特币和以太坊的P2P网络,主要从四个方面:

1. 区块链的网络连接和拓扑结构

比特币闪电网络如何使用_808比特币创始人颜万卫 炮制比特币风险大_比特币网络

目前大部分区块链项目使用的底层网络协议是TCP/IP协议,少数支持UDP协议。 从协议层来看,区块链基于TCP/IP协议,处于传输层之上,属于最顶层的应用层。

因此,从这个角度来看,区块链本身只是整个互联网协议层的顶层,它仍然依赖于底层协议为其工作。 就像建筑物的顶层一样,它需要下面的楼层为其提供支撑。 没有下面的楼层,顶层就不可能存在。

因此,“区块链将颠覆互联网”的说法并不值得反驳,它本身就是互联网整体框架的一部分。 区块链要颠覆什么,只能是同层的其他网络协议,比如HTTP协议。

如果考虑到矿场内部的挖矿交互协议和大量的轻节点,比特币P2P网络会显得非常复杂,所以我们只讨论全节点交互场景下的P2P网络连接和拓扑结构。

P2P网络本身有多种拓扑结构,如树形、星形、网状等。 由所有比特币节点组成的网络是一个完全分布式的拓扑结构,类似于网状结构。 节点间的传输过程采用广播的方式:交易从一个节点产生,然后该节点将交易广播给相邻的节点。 交易通过相邻节点验证后,相邻节点广播给自己的相邻节点,逐层传播,直到全网节点都能接收到。

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

比特币网络_比特币闪电网络如何使用_808比特币创始人颜万卫 炮制比特币风险大

2.节点发现

节点发现是任何区块链节点进入区块链P2P网络的第一步。 刚进入区块链网络时,新节点需要发现其他节点并与它们建立连接。 这就好比刚到一个新的地方旅行,需要不断地去了解身边的陌生人,才能逐渐融入新的环境。

808比特币创始人颜万卫 炮制比特币风险大_比特币闪电网络如何使用_比特币网络

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

初始节点发现是指新建立并首次运行的全节点,没有任何其他节点的数据和信息。 启动后节点发现是指一个全节点已经在运行,其他新节点在运行的动态过程中被发现。

初始节点发现的第一种方式是 DNS-seed,也称为 DNS 种子节点。 DNS 是域名搜索。 一些域名在比特币社区维护,例如seed.bitcoin.sipa.be,由比特币核心开发者Sipa维护。 通过查询这些域名,我们可以知道当前有哪些节点,它们的ip地址是多少,这样我们就可以通过命令与这些节点建立连接。

比特币闪电网络如何使用_比特币网络_808比特币创始人颜万卫 炮制比特币风险大

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

启动后节点发现是节点运行后动态维护对等节点的过程。 在比特币网络中,一个节点可以将它维护的对等节点列表发送给相邻节点。 节点在运行时必须不断做两件事:失去现有连接时发现新节点,并在其他节点启动时帮助它们。

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

3、局域网穿透

上面我们讲了互联网环境下的节点发现。 如果要在局域网中部署区块链节点,需要使用局域网穿透技术。

因为比特币的P2P网络是完全分布式的,建立在互联网上,如果你在局域网中运行一个节点,在公网上是找不到的。 这就像你被困在一个房间里。 即使外面的世界丰富多彩,你也出不去,外面的人也看不到你,也联系不上你。

比特币闪电网络如何使用_808比特币创始人颜万卫 炮制比特币风险大_比特币网络

要想打破这种局面比特币网络,就必须在局域网和公网之间建立一个通道,通过这个通道交换信息,这就是ip地址的映射。 通过NAT技术和UPnP协议,我们可以自动完成建立这个通道的过程。

NAT技术,也称为网络地址转换,是一种在IP数据包通过路由器或防火墙时改写源IP地址或目的IP地址的技术。 当来自局域网的ip地址要与公网地址进行通信时,需要使用NAT主机作为中介,NAT主机将局域网内的ip地址转换为公网ip地址才能与外界进行通信。

UPnP 是通用即插即用的缩写。 主要用于设备的智能互联。 使用 UPnP,网络上的所有设备都会立即知道有新设备加入。 该协议在比特币和以太坊中都被用作局域网渗透的工具。 只要局域网内的路由设备支持NAT和UPnP功能,局域网内的区块链节点就可以自动映射到公网。

比特币闪电网络如何使用_808比特币创始人颜万卫 炮制比特币风险大_比特币网络

4. 节点交互协议

节点建立连接后,会继续交换信息。 交互的主要内容是一些具体的命令和相关信息。 其中,命令写在消息的头部,信息写在消息体中。

比特币闪电网络如何使用_808比特币创始人颜万卫 炮制比特币风险大_比特币网络

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

节点连接后的第一件事就是握手,了解对方的信息,比如检查双方的版本号是否相同或兼容。

握手完成后,无论交换什么信息,都需要保持一个长连接(long connection)。 在比特币网络中,需要 PING/PONG 两种消息来维持节点之间的连接。 一旦超过 90 分钟没有收到对方的消息,则认为对方已经断网比特币网络,将发现新的节点。

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

同步节点信息有两种方式。 一种是区块头优先级,即先同步历史区块的消息头信息,再从其他节点同步消息体。 另一种是block-first,就是直接从其他节点同步完整的消息。 两种方式对网络的影响不同,前一种方式可以更好的降低网络负载。

总结

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