比特币客户端如何确定第一个连接的IP地址?

How does the bitcoin client determine the first IP address to connect?

据我所知,比特币是一种 p2p 协议 a p2p protocol must have a dedicated central server。但是据说比特币是去中心化.

回到 2009 年,我们依靠 IRC 来 bootstrap 网络,所以每个节点都会连接到 Freenode(后来的 LFnet)并加入一个频道。他们的昵称是他们编码的 public IP 地址。

如今,比特币核心客户端和许多其他实现都依赖于 DNS 种子。 DNS 种子是特殊的 DNS 服务器,配置为 return 从网络中随机选择的一些节点。 DNS 种子的运营商还 运行 爬虫来枚举 public 将被种子 return 编辑的可到达节点。

Bitcoin Core 客户端中当前包含的种子是:

  • bitcoin.sipa.be
  • dnsseed.bluematt.me
  • dnsseed.bitcoin.dashjr.org
  • seed.bitcoinstats.com
  • bitseed.xf2.org
  • bitcoin.jonasschnelli.ch

如果您向这些服务器中的任何一个发送请求,它们将 return 端口 8333 上 运行 比特币已知的一些随机 IP:

dig seed.bitcoinstats.com +short
71.19.155.244
173.254.232.51
45.79.97.30
198.252.112.64
35.128.8.141
108.17.18.165
98.208.76.134
8.29.28.12
52.62.2.124
96.234.214.85
47.89.24.56
212.164.215.159
52.62.42.229
68.52.96.191
115.66.205.171
24.250.16.39
201.43.160.155
5.3.253.18
100.40.179.172
50.135.169.181
186.149.249.18
101.201.44.207
96.35.97.46
124.188.118.196
82.8.4.79

除了 DNS 种子之外,Core 客户端还有一个 static list of IPs 可以先尝试,它将在本地数据库中缓存任何以前联系过的对等点,以便重新连接而无需查询 DNS 种子。

(免责声明:我是其中一个 DNS 种子的运营商)