跳至主要內容
高級

P2P 協議概覽

了解比特幣節點之間的點對點通訊協議,包括握手流程和連線類型。

18 分鐘

P2P 網路架構

比特幣使用去中心化的點對點(P2P)網路架構。每個節點都是平等的, 沒有「伺服器」和「客戶端」之分。節點之間直接通訊,交換區塊和交易。

~17,000

可達節點

8333

預設端口 (mainnet)

125

預設最大連線數

連線握手

當兩個節點建立連線時,需要進行握手交換版本信息:

節點 A                          節點 B
   │                               │
   │──────── version ─────────────>│  A 發送版本訊息
   │                               │
   │<──────── version ─────────────│  B 發送版本訊息
   │                               │
   │──────── verack ──────────────>│  A 確認 B 的版本
   │                               │
   │<──────── verack ──────────────│  B 確認 A 的版本
   │                               │
   │       [握手完成,開始通訊]      │

Version 訊息內容

欄位 說明
version 協議版本號(如 70016)
services 支援的服務標誌
timestamp Unix 時間戳
addr_recv 接收方地址
addr_from 發送方地址
nonce 隨機數(防止自連)
user_agent 軟體標識(如 /Satoshi:26.0.0/)
start_height 節點的區塊高度
relay 是否中繼交易

連線類型

Bitcoin Core 區分不同類型的連線,以優化網路效能和安全性:

Outbound Full-Relay (8 個)

節點主動發起的連線,接收區塊和交易。這些連線最受信任。

Outbound Block-Relay-Only (2 個)

只同步區塊,不中繼交易。提供額外的區塊來源,增加抗審查能力。

Inbound (最多 115 個)

其他節點發起的連線。需要更謹慎處理,因為可能是攻擊者。

Feeler (短暫)

短暫連線,測試潛在節點是否可達,用於維護地址庫。

服務標誌 (Services)

標誌 說明
NODE_NETWORK 1 完整區塊鏈節點
NODE_WITNESS 8 支援 SegWit
NODE_COMPACT_FILTERS 64 支援 BIP-157 區塊過濾器
NODE_NETWORK_LIMITED 1024 修剪節點(最近 288 區塊)
NODE_P2P_V2 2048 支援 BIP-324 加密傳輸

BIP-324:加密傳輸 (v2)

BIP-324 引入了加密的 P2P 傳輸協議,解決了傳統明文傳輸的隱私問題:

v1 (傳統) 問題

  • • 所有流量明文傳輸
  • • ISP 可識別比特幣流量
  • • 中間人攻擊風險
  • • 交易可被監控

v2 (BIP-324) 優點

  • • ChaCha20-Poly1305 加密
  • • 流量不可識別
  • • 防止被動監聽
  • • 可選的認證握手

v2 握手流程

1. 發起方發送 64 bytes 橢圓曲線公鑰
2. 響應方發送 64 bytes 橢圓曲線公鑰
3. 雙方使用 ECDH 計算共享金鑰
4. 之後所有通訊都加密

訊息格式

v1 訊息結構

┌──────────────────────────────────────────┐
│ Header (24 bytes)                        │
├──────────────────────────────────────────┤
│ magic      │ 4 bytes  │ 網路識別符       │
│ command    │ 12 bytes │ 訊息類型         │
│ length     │ 4 bytes  │ payload 長度     │
│ checksum   │ 4 bytes  │ payload 校驗和   │
├──────────────────────────────────────────┤
│ Payload (variable)                       │
│ 訊息內容                                  │
└──────────────────────────────────────────┘

Magic 值

網路 Magic 值
Mainnet 0xD9B4BEF9
Testnet3 0x0709110B
Signet 0x40CF030A
Regtest 0xDAB5BFFA

延伸閱讀: 查看 訊息類型 了解各種 P2P 訊息的詳細格式。

已複製連結
已複製到剪貼簿