BTC-5-比特币网络
Bitcoin network.
比特币系统的工作过程:用户将交易发布到比特币网络上,节点收到交易后打包到区块中,然后将区块发布到比特币网络上。
比特币网络工作原理
- 比特币工作在应用层(application layer: Bitcoin block chain),其底层是一个网络层(network layer: P2P overlay network)
- 比特币的P2P网络是非常简单的,所有节点都是对等的。不像其他网络存在超级节点(super node)
- 要加入P2P网络,至少需要知道一个种子节点,然后你和种子节点联系,它会告诉你它所知道的网络中的其他节点,节点之间的通信采用TCP协议,便于穿透防火墙。当节点要离开时不用做任何操作,不用通知其他节点,只需自行退出即可,其他节点在一定时间后没有收到该节点的消息,便会将其删掉。
比特币网络设计原则:简单,鲁棒(最坏情况下能达到最优状况,即健壮性),而不是高效。
- 每个节点维护一个邻居节点的集合,消息传播在网络中采取flooding的方式。节点第一次收到某个消息时,它会把此消息传播给所有邻居节点并标记已经收到过此消息,下次再收到此消息便不会发送出去。
- 邻居节点的选取随机,未考虑网络底层的的拓扑结构。一个在加州的节点,它选取的邻居节点可能是在阿根廷的,这样的设计的好处是增强鲁棒性,但牺牲了网络效率。
比特币系统中,每个节点要维护一个等待上链的交易的集合。第一次听到某个交易,若是合法交易,则将其加入交易集合并转发给邻居节点,以后再收到此交易就不再转发(避免无限传播),假设网络中存在两个有冲突的合法交易,比如说A→B, A→C(花费的是同一笔钱),那么一个节点先收到哪一笔交易,就将哪一笔交易写入交易集合,当收到与其交易集合中冲突的交易时,它就不会接收。
-
此外,当一个区块发布后,每个节点会更新交易集合,删去已经写入区块链的交易,倘若交易集合中包含A→B的交易,而A→C的交易被写入区块链中,那节点也要把A→B的交易删除,因为此交易就变成了非法交易(double spending)
-
新发布区块在网络上的传播方式与新发布交易的传播方式类似,每个节点除了要检查区块的内容合法性之外,还要检查它是否位于最长合法链上。
-
比特币协议对区块的大小由1M的限制,比特币网络采用的传播方式是非常耗费带宽的,带宽是瓶颈。1M大小的区块,可能需要几十秒才能传输到网络绝大部分节点,所以这个限制其实不算小。
- 区块越大,网络上传播时延越长;区块越小,可包含的交易数目越少
- 注意,比特币网络传播属于 尽力而为(Best effort),一个交易发布到比特币网络,不一定所有节点都能收到,也未必收到交易的顺序都一致。有的节点也不一定按比特币协议的要求进行转发 ̄へ ̄(比如不合法交易)
本系列文章为个人学习笔记,文章的所有内容均不构成任何投资比特币或其他数字货币的意见和建议,也不赞成个人炒作任何数字货币!