传统的中心化网络
这是一种典型的中心化结构,C1 、C2、C3等之间没法直接的连接,C节点如果要连接必须要通过中心化S节点做为桥梁。中心化节点充当服务者、中介作用,比如我们没有办法把资金直接从一个人转移给另一个人,必须通过银行这个中介。
比特币网络-P2P网络
P2P网络是指位于同一网络中的每台计算机都彼此对等,各个节点共同提供网络服务,不存在任何“特殊”节点,每个网络节点以扁平(flat)的拓扑结构相互连通。
对比中心化网络,在P2P网络中不存在任何服务端(server)、中央化的服务。
P2P网络的节点之间交互连接、协同,每个节点在对外提供服务的同时也使用网络中其他节点所提供的服务,每个节点既是服务端又是客户端。
P2P网络模型除应用于比特币网络,使用广泛的BT下载就是基于P2P网络。
P2P网络不仅仅去除了中心化带来的风险,还可以提高传输的效率。
如何发现节点
既然每个网络节点都是平等的(是指在网络层面上节点是平等的,但各节点在功能上可以有不同的分工, 如钱包节点、挖矿节点等),不存在任何“特殊”中心节点,那么当新的网络节点启动后,它是如何跟其他的节点建立连接,从而加入到比特币网络呢?
在中心化网络中,新加入的节点只要连接“特殊”的中心节点就可以加入网络。
为了能够加入到比特币网络,比特币客户端会做以下几件事情:
1.节点会记住它最近成功连接的网络节点,当重新启动后它可以迅速与先前的对等节点网络重新建立连接。
2.节点会在失去已有连接时尝试发现新节点。
3.]当建立一个或多个连接后,节点将一条包含自身IP地址消息发送给其相邻节点。相邻节点再将此消息依次转发给它们各自的相邻节点,从而保证节点信息被多个节点所接收、保证连接更稳定。
4.新接入的节点可以向它的相邻节点发送获取地址getaddr消息,要求它们返回其已知对等节点的IP地址列表。节点可以找到需连接到的对等节点。
5.在节点启动时,可以给节点指定一个正活跃节点IP, 如果没有,客户端也维持一个列表,列出了那些长期稳定运行的节点。这样的节点也被称为种子节点(其实和BT下载的种子文件道理是一样的),就可以通过种子节点来快速发现网络中的其他节点。
何谓分叉
如果一个节点同时广播了两个不同的新区块A和B,有些节点会接收到A,而另一些接收到B。这种情况下,他们会各自以他们最先接收到的块为基础工作,但会保留另一个块的信息以防它胜出成为更长的链。这就是分叉了。当下一个工作量证明被找到其中一个成为更长的链,这个僵局才会被打破;在另一个链上工作的节点就会转换到更长的链上。孤块将被网络忽略,发现这个区块的矿工就会失去区块奖励。因此通常矿工只想挖到有效区块,并加入最长的链
以下为译文:
英文原文:
The steps to run the network are as follows:
1) New transactions are broadcast to all nodes.
2) Each node collects new transactions into a block.
3) Each node works on finding a difficult proof-of-work for its block.
4) When a node finds a proof-of-work, it broadcasts the block to all nodes.
5) Nodes accept the block only if all transactions in it are valid and not already spent.
6) Nodes express their acceptance of the block by working on creating the next block in the chain, using the hash of the accepted block as the previous hash.
Nodes always consider the longest chain to be the correct one and will keep working on extending it. If two nodes broadcast different versions of the next block simultaneously, some nodes may receive one or the other first. In that case, they work on the first one they received, but save the other branch in case it becomes longer. The tie will be broken when the next proof-of-work is found and one branch becomes longer; the nodes that were working on the other branch will then switch to the longer one.
New transaction broadcasts do not necessarily need to reach all nodes. As long as they reach many nodes, they will get into a block before long. Block broadcasts are also tolerant of dropped messages. If a node does not receive a block, it will request it when it receives the next block and realizes it missed one.
中文对照:
该网络是按如下步骤运行的:
1.新的交易广播到各个节点。
2.每个节点将新的交易收录进一个区块。
3.每个节点为它的区块找到有难度的工作量证明方式。
4.当一个节点找到了工作量证明后,它就把这个区块广播给所有的节点。
5.只有当该区块中所有的交易都是合法的且没有被双重支付才会被所有的节点接受。
6.各节点接受该区块为顶链并用该区块的哈希值在其所在的链上创建新的区块。
所有节点都将最长的链确定为正确的链,并持续的工作将其扩展(这保证最长的链是正确的链,正确的链是最长的链)。如果一个节点同时广播了两个不同的新区块A和B,有些节点会接收到A,而另一些接收到B。这种情况下,他们会各自以他们最先接收到的块为基础工作,但会保留另一个块的信息以防它胜出成为更长的链。当下一个工作量证明被找到其中一个成为更长的链,这个僵局才会被打破;在另一个链上工作的节点就会转换到更长的链上。
新的交易没必要触及到所有的节点。只要这些新的交易被多个节点接收到,不久就会被打包进区块。区块广播对遗漏的信息还会接受。如果一个节点没有接受某个块,当它接收下一个区块时会接收它并意识到它漏了一个块。
参考https://learnblockchain.cn/2017/11/07/bitcoin-p2p/分析比特币网络:一种去中心化、点对点的网络架构