0%

BTC五---网络

网络

新发布的区块,新发布的交易,再区块链中是怎么传播的?

比特币网络的工作原理

The BitCoin Network,比特币工作在应用层,它的底层是一个P2P Overlay Network,所有结点都是对等的,他不想有些所谓的P2P网络有所谓的超结点(Super node | master node),你要加入比特币网络,你要至少知道一个种子结点(seed node),你和这个种子节点联系,他会告诉你他所知道的网络中的其他节点,节点之间是通过tcp通信的,这样有利于穿破防火墙,你离开的时候也不需要执行其他操作(比如通知其他结点,退出应用程序即可),别的节点没有听到你的消息,过了一段时间就会把你删掉。

比特币网络的设计原则是简单(simple,robust,but not efficient),每个结点维护一个邻居节点的集合,消息传播在网络中采取flooding(泛洪)的方式,结点第一次听到某个消息的时候,把他传播给所有的邻居结点,同时记录一下,这个消息我已经记录过了,下次再收到这个消息的时候,就不用转发给邻居节点了

邻居结点的选取是随机的,没有考虑底层的拓扑结构,和地区没有关系,这样的好处是增强鲁棒性,没有考虑实际的拓扑结构,但是牺牲的是效率,向身边的人转账和向美国的人转账速度其实是差不多的。

比特币系统中每个节点要维护一个等待上链的交易的集合。第二次听到同样的交易就不会传播给邻居结点,避免交易在网络中无限制的传播下去,转发的前提是这个交易得是合法的,这里有一个risk condition:有可能你有两个有冲突的交易,差不多同时被广播到网络上

新发布的区块在网络中的传播方式和新发布的交易在网络中传播是相似的,每个结点除了要检查区块的内容之外,还要检查一下是否在最长合法链上,越是大的区块,在网络中传播的速度就越慢,比特币协议对区块大小有一个限制,1M字节的限制,1M大小的区块在区块链中的传播时间就已经达到了50秒(传播完)

我们讲的比特币网络,它的传播是属于best effort,一个交易发布到网络上,不一定所有的节点都能收到,而且不同的节点收到这个交易的顺序也不一定是一样的,网络传播存在延迟,有的节点也不一定按照比特币协议的要求转发,比如有的该转发的它不转发,导致某些合法的交易收不到,有些节点也有可能转发一些不该转发的消息,比如有些不合法的交易,他也会转发,这是去中心化系统中所面临的问题