mt logoMyToken
总市值:
0%
恐慌指数:
0%
币种:--
平台 --
ETH Gas:--
EN
USD
APP
Ap Store QR Code

Scan Download

比特币开发指南 - P2P点对点网络

收藏
分享

P2P 网络

比特币网络使用简单的方法来执行对等节点的发现和节点间的通信。以下章节适用于全节点和 SPV 客户端,不同的是 SPV 通过布鲁姆过滤器 ( Bloom filters ) 执行块的发现。

对等节点发现

比特币的核心部分维护一个在启动时可以连接的对等节点列表。当一个完整的节点第一次启动时,它必须被自举 ( bootstrapped ) 到网络。这个过程如今在比特币的核心部分通过一个短名单上的 DNS 种子自动执行。选项 -dnsseed 可以被用来定义这种行为,默认的设置是 1 DNS 请求返回一个可连接的 IP 地址列表。比特币客户端从那里可以连接到整个比特币网络。

自举的另外一种方法是 使用 参数 -seednode=<ip> 。通过这个参数,用户可以预先定义连接到哪个服务器,并在建立对等节点列表之后断开连接。另外一个方法是 启动比特币核心 配置 -connect=<ip> 参数来选择连接到哪些对等节点 (未被配置的 IP 将不会被连接) 添加对等节点的最后一种方法是通过 参数 -addnode=<ip> 添加一个单独的节点到对等节点列表

自举过程完成后,节点向其对等节点发送一个包含其自身 IP 地址的 addr 消息 。其对等的每个节点向 它们 自己的对等节点转发这个信息,以便 进一步 扩大连接池。

通过 getpeerinfo 命令 可以查看 某个 节点所连接的对等节点 及相关的数据

连接到对等节点

节点通过发送 version 消息 连接到一个对等节点。 消息 version 包含了节点的版本信息、块信息和距离远程节点的时间。一旦这个 消息被 对等节点收到,它必须回复一个 verack 。如果它愿意建立对等关系,它 发送自己的 version 消息

一旦建立 对等 关系,节点可以向远程节点发送 getaddr addr 消息 来获得 其它 的对等节点信息。为了维持与对等节点的连接,节点默认情况下每 30 分钟内会给对等节点至少发送一次信息。如果超过 90 分钟没有收到回复,节点会认为连接已经断开。

块广播

在与对等节点建立连接 ,双方 互发 包含最新块哈希值的 getblocks 消息 。如果某个节点坚信其拥有最新的块信息或者有更长的链,它将发送一个 inv 消息 ,其中包含 至多 500 个最新块的哈希值,以此来表明它的链更长。收到的节点使用 getdata 来请求块的详细信息,而远程的节点通过命令 block 来发送这些信息。在 500 个块的信息被处理完之后,节点可以通过 getblocks 请求更多的块信息。这些块在被接收节点认证之后得到确认。

新块的确认也可通过矿工 并发布 的块来发现。其扩散过程和上述类似。通过之前的连接,新块以 inv 息发布出去, 接收节点 可以 通过 getdata 请求这些块 的详细信息

交易 广播

和对等节点的交易通过 inv 息来实现。如果收到了 getdata 信息,那么交易通过发送 tx 实现。对等节点收到有效的交易的信息后会通过类似的方式将其扩散。如果交易的信息在一段时间内没有被放进块中,那么交易将被从内存池中清除,而原节点将重新发送交易信息。

行为不 的节点

对于所有的广播,那些行为 不端 的节点(占用带宽和通过发布错误信息来浪费计算资源)将收到惩罚。如果一个节点惩罚分数超过门限值 -banscore=<n> ,它将被禁止 加入网络 若干秒。这个时间由 参数 -bantime=<n> 定义,默认值是 86400 秒,即 24 小时。

警告

为了应对 可能出现的 bug 和攻击,比特币开发者提供了 比特币警告服务 RSS 。比特币用户通过命令 getinfo 可以查看针对其特定客户端版本的错误信息。

这些信息通过 a llert 消息尽可能多 扩散出去给每一个连接的对等节点。

错误信息 采用 特定的 ECDSA 私有密钥签名,只被极少数的开发者控制。

补充 资源: 如果你想了解 各种 消息的 详细 结构和所有的消息类别, 可以 参考比特币 Wiki 上的 协议说明

免责声明:本文版权归原作者所有,不代表MyToken(www.mytokencap.com)观点和立场;如有关于内容、版权等问题,请与我们联系。
相关阅读