菜单

节点发现与管理

相关源文件

本文档涵盖了 fuel-core 用于发现、连接和管理 P2P 网络连接的机制。它侧重于对等发现协议、连接管理策略和维护网络健康的声誉系统。

有关消息协议和 gossip 通信的信息,请参阅 Message Protocols。有关更广泛的 P2P 网络架构,请参阅 Networking

概述

fuel-core 中的对等发现和管理系统通过几个相互关联的组件运行,这些组件处理对等生命周期管理的各个方面。

来源: crates/services/p2p/src/behavior.rs47-75 crates/services/p2p/src/peer_manager.rs61-86 crates/services/p2p/src/p2p_service.rs104-145

对等发现机制

Kademlia DHT 发现

主要的对等发现机制使用 Kademlia 分布式哈希表来查找网络中的对等节点。

发现行为会定期执行随机游走,在有连接槽可用时查找新的对等节点。

组件目的配置
kad::Behaviour<MemoryStore>核心 Kademlia 实现协议:/fuel/kad/{network_name}/kad/1.0.0
随机游走定时器触发对等发现指数退避,最多 60 秒
引导节点初始 DHT 播种可通过 bootstrap_nodes 配置

来源: crates/services/p2p/src/discovery.rs52-72 crates/services/p2p/src/discovery/discovery_config.rs103-180

mDNS 本地发现

对于本地网络发现,fuel-core 可选使用 mDNS(多播 DNS)。

mDNS 会自动发现同一本地网络中的对等节点,并将它们添加到 Kademlia 路由表中以便进行连接尝试。

来源: crates/services/p2p/src/discovery.rs210-229 crates/services/p2p/src/discovery/mdns_wrapper.rs

保留节点管理

保留节点将获得特殊对待,并绕过正常的连接限制。

保留节点在断开连接时会自动重新连接,并且免于受对等评分处罚。

来源: crates/services/p2p/src/peer_report.rs70-78 crates/services/p2p/src/peer_manager.rs93-95

对等管理系统

PeerManager 架构

PeerManager 会分别跟踪保留和非保留的对等节点。

来源: crates/services/p2p/src/peer_manager.rs60-86 crates/services/p2p/src/peer_manager.rs40-57

连接生命周期

对等连接遵循由 PeerManager 管理的结构化生命周期。

来源: crates/services/p2p/src/peer_manager.rs127-129 crates/services/p2p/src/peer_manager.rs199-226

连接状态管理

系统使用 ConnectionState 和 SeqLock 来进行线程安全的插槽管理。

状态管理描述触发器
peers_allowed: true正在接受新的非保留连接对等节点断开连接,可用插槽
peers_allowed: false已达到非保留对等节点的最大数量最后一个插槽已满

来源: crates/services/p2p/src/peer_manager.rs312-340

声誉和评分系统

应用程序评分管理

对等节点会获得特定于应用程序的评分,这些评分会影响连接决策。

来源: crates/services/p2p/src/peer_manager.rs142-171 fuel-core-types/src/services/p2p/peer_reputation.rs

Gossipsub 集成

声誉系统与 libp2p 的 gossipsub 评分集成。

Gossipsub 评分低于 GRAYLIST_THRESHOLD (-16000.0) 时会触发对等节点封禁,保留节点除外,它们会受到保护。

来源: crates/services/p2p/src/peer_manager.rs97-108 crates/services/p2p/src/gossipsub/config.rs61

心跳监控

对等节点的健康状况通过心跳数据持续监控。

系统会因心跳过时或不频繁的对等节点而施加声誉处罚。

处罚类型阈值评分影响
旧心跳heartbeat_max_time_since_last-5.0
低频率heartbeat_max_avg_interval-5.0

来源: crates/services/p2p/src/service.rs537-576 crates/services/p2p/src/peer_manager/heartbeat_data.rs

配置

连接限制

对等管理系统支持可配置的连接限制。

来源: crates/services/p2p/src/config.rs98-107 bin/fuel-core/src/cli/run/p2p.rs91-103

发现配置

可以根据不同的网络条件调整关键的发现参数。

参数默认目的
random_walk500毫秒Kademlia 发现频率
enable_mdnsfalse本地网络发现
bootstrap_nodes[]初始 DHT 种子
reserved_nodes_only_modefalse仅白名单连接

来源: crates/services/p2p/src/config.rs217-258 bin/fuel-core/src/cli/run/p2p.rs73-89