Bitcoin网络不存在服务器或者中心节点,所以所有block都是从其他人所运行的Bitcoin程序处(下面称为节点)下载的,同时你已经下载的block也会共享给其他还没下载的节点。那么 Bitcoin是如何发现网络上其他节点的呢?

运行 Bitcoin 时它会首先连接一个指定的IRC(一种古老的网络聊天服务)服务器(irc.lfnet.org),然后加入 “#bitcoin”聊天频道并声明自己的IP地址,当 Bitcoin 程序查询当前聊天频道的用户时,就能获取网络上其他节点的IP地址了,然后bitcoin会自动连接一定数量的节点,可见IRC在Bitcoin网络中充当着媒介角色。假如IRC服务器当掉,那么第一次运行Bitcoin 程序时程序会调出内置的一批IP地址(称为“种子节点”)然后试图连接这些节点。Bitcoin 连接到某个节点之后还能通过那个节点获取更多其他节点,即所有节点同时也充当媒介角色,这样一个P2P网络就形成了。

Bitcoin 程序所有的功能都依赖于 Bitcoin P2P网络,有时运行 Bitcoin 程序会发现连接数(见图1窗口中底部的 connections)是“0”(正常情况下应该有50~200个连接),这有可能是因为你的网络受到限制而导致的,这种情况下 Bitcoin 是没法正常工作的。下面讲解如何解决网络问题:

1、检查网络防火墙或者路由器的端口打开状态:连接 IRC 服务器需要打开 tcp 6667传出端口,连接其他 节点需要打开 tcp 8333 传出端口,其他节点连接你需要打开 tcp 8333 传入端口。

2、检查 IRC 服务器的ip地址解析状态,有时国外的域名会受到DNS污染,把irc.lfnet.org 服务器的ip地址添加到 /etc/hosts 文件即可。

3、增加一些个 Bitcoin 固定节点,主要是各大矿池和交易网站

从这里可以看到 Bitcoin 网络并不是宣称中的“不可屏蔽”,相对其他P2P技术来说Bitcoin的并没有多大创新,某些地区或国家只需把IRC和种子节点干扰或者屏蔽一下就让普通人无法使用Bitcoin了。

原文地址:http://ivarptr.blogspot.com/2011/05/bitcoin_31.html