比特币工作在应用层,底层为P2P Overlay Network
比特币P2P网络中:所有节点都是对等的,没有超级节点。
加入网络需要知道至少一个种子节点,通过与种子节点交互能够知道种子节点知道的其他节点,节点之间通过TCP通信,有利于穿透防火墙,离开时不需要其他操作直接退出。别的节点没有接收到本节点消息之后,等待一阵会将节点信息删除。
比特币系统设计原则:简单、鲁棒、(没有高效)
每个节点维护一个相邻节点的集合,消息传播采取flooding模式(节点第一次听到某个消息的时候,会把其传播给所有相邻节点,同时记录已收到该消息,下次收到该消息时就不用转发给相邻节点)
相邻节点的选取是随机的,不考虑底层的拓扑结构(增强鲁棒性)
比特币系统中需要维护一个等待上链的交易的集合。(我称之为交易池)集合中的交易都是等待被写入区块链的,集合中的交易如果被写入到区块链中,节点接收到新区快之后就要将这个交易从集合中删除(如果新区块包含的交易使得交易集合中某个交易变得不合法,那么需要将变得不合法的交易删除)。
比特币网络中,一个交易记录不一定能传给每一个节点并且每个节点收到交易的顺序也不一定相同