区块链 - 实现如何进行点对点发现?

Blockchain - How do implementations do peer-to-peer discovery?

出于个人好奇,我目前正在学习区块链的工作原理。我正在学习这门课程,现在我已经使用网络套接字设置了点对点连接。区块链应用程序的多个实例现在可以 运行 并使用这些套接字相互通信。

课程实施的一个缺点是实例如何知道如何找到彼此。本质上,它们需要明确配置才能进行通信。在我当前的项目中,我设置了 3 个实例。一个在端口 5001 上打开一个套接字并且不连接任何其他东西。另一个在端口 5002 上打开一个套接字并连接到 5001 上的实例。第三个在端口 5003 上打开一个套接字并连接到 5002 和 5001 上的实例。

关键是,这三个都明确地配置成那样。所有三个都必须完全按照该顺序启动,以便它们可以正确连接到其他。虽然这对于实践实施来说很好,但我知道这不是真正的区块链实施必须在野外工作的方式。必须存在某种发现机制,允许这些实例中的任何一个找到当前正在 运行ning 的任何其他实例。

网络不是我的专业领域,所以我不知道如何做到这一点。

P2P 加密货币客户端通常具有硬编码的点列表。这些节点由社区管理。如果您是第一次启动客户端,那么这些节点就是您所拥有的。

当您连接到另一个节点时,它会将您的 IP 保存在其内部列表中。任何节点都可以从另一个节点请求此列表。通过这种方式,您的客户端可以发现其他节点。客户端应用程序将节点列表保存到磁盘。在下一次启动时,您将硬编码节点和上次连接的节点。可能有些节点不在线,但是这个没关系。

比特币的更详细解释:https://developer.bitcoin.org/devguide/p2p_network.html#peer-discovery