SuperAPI AI 工具集

midnight-p2p-networking

部署与运维

查看项目

更新于 10-15 13:51

技能介绍

用途

P2P 网络层负责连接 Midnight 节点,并在去中心化网络中实现数据交换。Midnight 使用 Polkadot SDK 默认的 Rust libp2p 实现。该网络层为上层同步与 gossip 协议提供基础支撑。

网络栈结构

整个栈按四个层次组织:

  1. 对等节点发现(Peer discovery):Bootstrap 节点、mDNS(局域网)、Kademlia DHT 随机游走。
  2. 连接(Connection):TCP/IP、WebSockets、DNS 解析。
  3. 升级(Upgrade):Noise 协议加密、Yamux 多路复用、Multistream-Select 协商。
  4. 子流协议(Substream protocols):Ping 存活检测、Request-Response 区块/交易查询、Notifications 广播(gossip、最终性、同步)。

数据流为:发现 → 连接 → 安全升级 → 子流协议。

发现机制

节点要加入网络,必须先发现并连接到对等节点:

Bootstrap 节点

  • 网络配置中预定义的受信任对等节点(硬编码身份标识与地址)。
  • 节点启动时连接 Bootstrap 对等节点以加入网络,并获知更多对等节点。

mDNS(多播 DNS)

  • 通过 UDP 广播发现同一局域网内的对等节点。
  • 适用于开发、测试网或同地部署场景。
  • 可通过网络设置启用或禁用。

Kademlia DHT(随机游走)

  • 当节点至少连接到一个对等节点后,会在每个已配置链的 DHT 上执行基于 Kademlia 的随机游走。
  • 发送 FIND_NODE 查询以发现更多对等节点。
  • 随着时间推移,构建出具有韧性且不断扩展的网络视图。

发现流程:节点启动 → 连接 Bootstrap → 获知对等节点地址 → Kademlia 随机游走 → 发现更多对等节点 → 持续游走。局域网 mDNS 可辅助获知地址。

连接建立

发现之后,对等节点会:

  • 建立直接连接。
  • 协商共享的协议能力(传输、安全、多路复用)。

传输层

当节点 A(Alice)连接节点 B(Bob)时,可用的传输方式:

传输 说明
TCP/IP 传统 IPv4/IPv6 套接字
WebSockets TCP + WebSocket 帧封装(对浏览器/代理友好)
DNS 连接过程中将域名解析为 IP

加密与多路复用

基础传输连接建立后,对等节点通过协商协议进行升级:

协议 用途
Noise 端到端机密性与完整性
Yamux 在单个物理连接上承载多个逻辑流
Multistream-Select 选择兼容的加密与多路复用选项

连接升级时序:Alice 向 Bob 发起 TCP / WebSocket 连接 → Multistream-Select(Noise)→ 建立加密通道 → Multistream-Select(Yamux)→ 建立多路复用子流 → 打开 Ping / Request-Response / Notifications 子流。

子流协议

每个子流运行一个专用的应用级协议:

协议 用途
Ping 存活检查与延迟测量
Request-Response 结构化交换(区块查询、交易查询)
Notifications 广播:新交易、区块公告、最终性更新、轻客户端状态同步

对等节点身份

  • 每个节点拥有唯一的 Ed25519 公钥作为 P2P 身份。
  • 该密钥对与共识消息签名密钥相互独立。
  • 在握手期间交换,用于对会话中的对等节点进行身份认证。

关于 Ed25519 在 libp2p 与 GRANDPA 中的使用差异,另见 midnight-cryptography/ 相关技能。

相关技能

  • midnight-consensus/ —— 验证者 gossip 的内容(区块、最终性)
  • midnight-cryptography/ —— Noise、Ed25519 对等节点身份
  • midnight-rpc/ —— 外部客户端访问(与 P2P 同步互补)

限制

资料未提供具体的配置参数、性能指标、支持平台版本或部署要求等细节。