xiaochong_top 2024-10-15 17:47 采纳率: 0%
浏览 7

区块链 怎么发现新节点?

区块链热度已过,对其原理还是不太理解。上网一查全是笼统的讲述怎么去中心化,去中心化为什么安全,区块与区块之间的联系。
但是节点与节点之间是怎么链接的?
传统的 服务器架构中,客户端是知道服务器地址的。
但是在去中心化中,一个新节点。没有一个服务器地址是怎么加入区块链网络的?
比如 某个公链上有五个节点 A,B,C,D,E 现在有远隔千里之外的 F 节点要加入这个网络,但是因为去中心化网络也没有一个服务器地址或者域名,即便是 P2P 那也需要知道之前五个节点的具体地址,那么这个 F 是怎么知道之前五个节点的地址的?
而且在 传统的服务架构中,客户端可能没有公网 IP 所有的沟通都是要客户端主动发起,通过层层网关转发到服务器。而服务器回复信息也是回复给网关,网关再通过之前客户端对发消息时留下的对外接口与对内设备的映射关系转发给内部设备。
那区块链节点中又是怎么处理这种问题的呢?

  • 写回答

2条回答 默认 最新

  • 越重天 新星创作者: Java技术领域 2024-10-17 12:25
    关注

    本答案参考 多次询问 ChatGPT-3.5 后选择的最佳回答,若是满意,还请采纳,谢谢

    在区块链网络中,新节点发现已有节点的地址主要有以下几种常见方式:

    一、种子节点(Seed Nodes)

    1. 定义与作用
      • 种子节点是区块链网络中一些特殊的、预先配置好的节点。它们的主要作用是为新节点提供初始的连接点。例如,在比特币网络中,就存在一些种子节点。当新节点(如节点F)想要加入网络时,它可以预先配置这些种子节点的地址。这些种子节点就像引导者,新节点可以从它们那里获取到网络中其他节点(如A、B、C、D、E)的信息。
    2. 工作原理
      • 新节点首先与种子节点建立连接。种子节点会维护一个节点列表,这个列表包含了网络中部分其他节点的地址信息。新节点向种子节点发送请求,种子节点就会把这个列表中的一部分节点地址(例如节点A、B的地址)发送给新节点F。新节点F就可以根据这些地址去尝试与A、B等节点建立连接。

    二、节点广播(Node Broadcasting)

    1. 基于网络内的传播
      • 在区块链网络中,已有的节点(A、B、C、D、E)会定期向网络中广播自己的存在以及自己所知道的其他节点的信息。例如,节点A可能会每隔一段时间向网络中发送一个消息,这个消息包含了节点A自己的地址以及它所连接的节点(如节点B和C)的地址。
      • 当新节点F在附近的网络范围内监听时,就有可能接收到这种广播消息,从而得知部分已有节点的地址,进而尝试建立连接。
    2. 社交网络或社区渠道
      • 在区块链的社区中,存在很多社交网络平台、论坛或者专门的社区网站。节点的运营者或者开发者会在这些地方分享节点的相关信息。例如,某个区块链项目的官方论坛上,会公布一些稳定运行的节点地址。新节点的创建者可以从这些渠道获取到一些节点地址,然后尝试连接到区块链网络。

    三、分布式哈希表(DHT - Distributed Hash Table)

    1. 结构与功能
      • 一些区块链网络采用分布式哈希表技术。在这种技术下,网络中的节点信息被存储在一个分布式的结构中。每个节点都负责存储一部分节点地址信息的映射关系。
      • 例如,在一个基于DHT的区块链网络中,节点A可能存储了与某个哈希值范围对应的节点(如节点C和D)的地址信息。当新节点F想要加入网络时,它可以根据特定的算法计算出自己应该查询哪个节点(假设是节点A)来获取其他节点的地址信息。然后节点F向节点A发送查询请求,节点A就会返回相关节点(C和D)的地址给节点F。

    四、自举(Bootstrapping)机制

    1. 初始连接与信息获取
      • 新节点可能会有一些初始的、非常有限的连接信息。例如,它可能知道网络中某个特定类型节点(如超级节点或者验证节点)的部分地址。新节点首先与这些有限的已知节点建立连接,然后通过这些节点逐步获取更多节点的信息。
      • 假设在一个区块链网络中,存在超级节点。新节点F可能通过一些配置文件或者默认设置知道一个超级节点的地址。F与这个超级节点建立连接后,超级节点可以向F提供其他普通节点(如A、B等)的地址,从而帮助F融入整个网络。

    关于区块链节点处理类似传统网络中客户端没有公网IP的问题:

    1. 网络地址转换(NAT Traversal)技术
      • 许多区块链节点采用类似的技术来解决这个问题。例如,节点可以使用UPnP(Universal Plug and Play)协议。如果节点所在的网络设备(如路由器)支持UPnP,节点可以自动请求路由器为其创建端口映射,从而使得外部节点能够与它进行通信。
      • 还有一些基于中继(Relay)的方法。如果节点无法直接建立连接,网络中的其他节点可以作为中继节点来转发消息。例如,节点A和节点F无法直接通信,但是节点B可以作为中继,将A发送给F的消息进行转发,反之亦然。
    2. 使用代理节点(Proxy Nodes)
      • 在区块链网络中,也可以设置代理节点。新节点可以通过代理节点与网络中的其他节点进行通信。代理节点具有公网IP,它可以接收来自其他节点的消息并转发给没有公网IP的节点,同时也可以将没有公网IP的节点发出的消息转发给其他节点。
    评论

报告相同问题?

问题事件

  • 创建了问题 10月15日