目录
一、比特币网络架构
1.1 节点加入与离开
二、消息传播方式
三、交易处理机制
四、网络传播问题
五、实际应用问题及解决
本章节讲比特币网络的工作原理,讲解新创建的区块是如何在比特币网络中传播的。
一、比特币网络架构
比特币工作在应用层,底层是 p2p 网络,运行比特币协议。其 p2p 网络中所有节点对等,无超级节点或主节点。
- 工作层次:比特币工作在应用层,其底层是一个 P2P(点对点)网络。在应用层上运行比特币协议,而在底层的网络层运行的是 P2P 类型的网络。
- 节点特性:比特币的 P2P 网络非常简单,所有节点都是对等的,不存在像其他某些 P2P 网络中所谓的超级节点(super node)或者主节点(master node)。这种设计使得网络更加去中心化,每个节点在网络中的地位平等,没有特殊的控制节点。
- 节点的加入:若要加入比特币网络,首先必须知道至少一个种子节点,然后与这个种子节点建立联系。种子节点会告知新节点它所知道的网络中的其他节点信息。节点之间通过 TCP(传输控制协议)来进行通信,这样做的好处是有利于穿透防火墙,便于节点之间建立稳定的连接,顺利加入网络。
- 节点的离开:当节点要离开比特币网络时,不需要进行任何特殊操作,也不用通知其他节点,只需直接退出自身的应用程序即可。其他节点在一段时间内没有收到该节点的消息后,就会将其从自身的节点列表中删除。这种机制使得节点的离开过程非常简便,不会对网络的运行产生复杂的影响。
通过这些架构特点,比特币网络构建了一个相对简单、去中心化且节点进出自由的 P2P 网络环境,为比特币系统的运行提供了基础的网络支撑。
1.1 节点加入与离开
新节点加入网络需知道至少一个种子节点,通过 tcp 通信建立连接;离开时无需通知其他节点,直接退出应用程序,一段时间后其他节点长时间无法与其建立通讯后就会将其删除。
- 节点的加入:
- 前提条件:想要加入比特币网络的节点,首先要获取至少一个种子节点的相关信息,即必须知道至少有一个种子节点的存在。
- 建立连接:与已知的种子节点取得联系。种子节点在收到新节点的连接请求后,会将自己所知晓的网络中其他节点的信息告知新节点。
- 通信方式:节点之间采用 TCP(传输控制协议)进行通信。TCP 协议的优势在于其能够更好地穿透防火墙,保证节点之间通信的稳定性和可靠性,使得新节点能够顺利地与其他节点建立连接,融入比特币网络。
- 节点的离开:
- 操作简便:当某个节点想要离开比特币网络时,无需进行专门的操作来通知其他节点。节点只需直接退出自身运行的比特币应用程序即可。
- 自动删除:对于网络中的其他节点而言,在一段时间内如果没有接收到该节点发送的消息,它们就会判定该节点已经离开网络,并自动将该节点从自己维护的邻居节点集合中删除。这种机制使得节点的离开过程对网络的影响较小,并且实现起来相对简单,不需要复杂的通知和确认流程。
这种节点加入与离开的机制,既保证了新节点能够方便快捷地接入比特币网络,又使得节点离开时不会对网络造成过多的干扰,维持了比特币网络的动态稳定性和运行效率。
二、消息传播方式
每个节点维护邻居节点集合,消息传播采用 flooding 方式,首次收到消息时转发给所有邻居节点并记录,再次收到则不再转发。节点选取随机,不考虑底层拓扑结构,虽增强了鲁棒性,但牺牲了效率。
- 邻居节点集合维护:比特币网络中的每个节点都需要维护一个邻居节点的集合。这个集合记录了该节点所连接和知晓的其他节点信息,是消息传播的基础网络结构。
- 消息传播机制(flooding 方式):采用 flooding(泛洪)方式进行消息传播。当一个节点第一次接收到某个消息时,它会将这个消息转发给除了消息来源节点之外的所有其他邻居节点。通过这种方式,消息能够迅速在网络中扩散开来。
- 消息记录与重复处理:节点在转发消息的同时,会对已接收的消息进行记录。当再次收到相同的消息时,节点会识别出该消息已经接收过,此时就不会再将其转发给邻居节点。这样可以避免消息在网络中无限循环传输,减少网络资源的浪费。
- 节点选取特点:邻居节点的选取是随机的,不考虑底层的拓扑结构。例如,一个位于加利福尼亚的节点,它所选择的邻居节点可能远在阿根廷。这种随机选取的方式虽然牺牲了一定的效率,但增强了网络的鲁棒性。因为不依赖于特定的拓扑结构,即使部分节点出现问题或者网络局部发生变化,消息仍然有较大概率能够通过其他路径传播,保证了网络的可靠性和稳定性。
- 对效率的影响:由于不考虑底层拓扑结构,在这种消息传播方式下,节点向身边的人转账和向美国转账的速度在网络传播层面上其实差不多。也就是说,这种设计虽然增强了鲁棒性,但在一定程度上牺牲了消息传播的效率,无法根据节点之间的实际距离或网络拓扑优化传播路径,可能导致一些不必要的长距离消息传输。
通过以上消息传播方式,比特币网络在保证消息能够尽可能广泛传播的同时,也在一定程度上控制了消息的重复传输和资源消耗,以简单的设计实现了相对可靠的网络通信,适应了比特币网络去中心化的特点。
三、交易处理机制
每个节点维护等待确认(等待写入区块链)的交易集合,收到合法交易(有合法签名且未被花费过)加入集合并转发,若收到冲突交易则根据情况判断处理。新发布的区块传播方式与交易类似,节点需检查区块内容合法性及是否在最长合法链上,比特币协议限制区块大小为一兆字节,因网络传播方式受带宽限制,大区块传播速度慢。
- 等待确认交易集合的维护:比特币系统中,每个节点都要维护一个等待确认的交易集合。这个集合用于暂存那些已经接收到但尚未被包含在区块中进行确认的交易。
- 新交易的处理:当节点第一次听到某个交易时,会对该交易进行合法性检查。如果该交易具有合法的签名,并且所使用的币以前没有被花费过(即不存在双花问题),那么这个交易就被认为是合法的。合法的交易将被加入到等待确认的交易集合中,并且节点会把这个交易转发给它的邻居节点。此后,当再次收到相同的交易时,就无需再进行转发,避免了交易在网络上的无限传输。
- 冲突交易的处理(race condition):存在一种情况,即可能有两个有冲突的交易差不多同时被广播到网络上。例如,一个交易是 A 转钱给 B,另一个交易是 A 转钱给 C,且假设他们花的是同一个币。由于网络传播的延迟和节点位置的不同,不同节点接收这两个交易的顺序会有所差异。
- 对于先收到 A 转给 B 交易的节点,会将其加入等待确认的交易集合。当后续收到 A 转给 C 的交易时,由于与已存在的交易冲突,这个交易就会被判定为非法,节点会忽略它。
- 而对于先收到 A 转给 C 交易的节点,会将其加入集合,此时若再收到 A 转给 B 的交易,这个交易就不能被加入集合,并且之前已加入的与当前冲突的交易(比如 A 转给 C 的交易)可能需要从集合中删掉。
- 交易从集合中删除的情况:当节点听到一个新发布的区块时,如果等待确认交易集合中的某个交易被包含在这个新区块中,那么该交易就可以从集合中删掉,因为它已经得到了确认。另外,如果新发布的区块中包含了与集合中某个交易冲突的交易,那么集合中对应的冲突交易也需要被删除,因为此时该交易已被证明为非法(已被写入区块的交易具有更高的优先级和合法性)。
通过以上交易处理机制,比特币网络能够有效地管理和处理交易,在存在网络延迟和交易冲突的情况下,尽可能保证交易的合法性和一致性,为比特币系统的正常运行提供了重要的基础保障。
四、网络传播问题
比特币网络传播属于 best effort,交易发布后不一定所有节点都能收到,且不同节点收到交易的顺序可能不同,网络传播存在延迟,部分节点可能不按协议转发,导致合法交易收不到或转发不合法交易。
- 传播特性(best effort):比特币网络的传播属于 “best effort”(尽力而为)类型。这意味着一个交易发布到比特币网络上后,并不能保证所有的节点都能收到该交易。而且,不同的节点接收到这个交易的顺序也不一定是相同的。这种不确定性是由比特币网络的去中心化特性以及其采用的传播方式所决定的。
- 网络传播延迟:网络传播存在延迟,并且有时这种延迟可能会很长。由于比特币网络中的节点数量众多,分布广泛,且消息传播采用泛洪(flooding)等方式,交易或区块消息从一个节点传播到其他所有节点需要一定的时间。在这个过程中,不同节点接收到消息的时间会有较大差异,导致整个网络在信息同步上存在一定的滞后。
- 节点不按协议转发问题:并非所有节点都会严格按照比特币协议的要求进行转发操作。有些节点可能不转发应该转发的合法交易,这可能导致某些节点无法接收到这些合法交易信息,影响交易的正常处理和确认。同时,也有一些节点可能会转发一些不合法的交易,例如存在双花问题或者签名不合法的交易。这种情况破坏了网络中交易信息的一致性和合法性,给比特币系统的运行带来了潜在风险。
- 对系统的影响及本质:这些网络传播问题是去中心化系统中面临的实际问题。在去中心化的比特币网络中,没有一个中心机构来统一管理和协调节点的行为,每个节点都有一定的自主性,这就不可避免地会出现上述问题。这些问题的存在对交易的可靠性和整个比特币系统的稳定性构成了挑战,需要通过一定的机制(如共识机制等)来尽量减少其影响,确保系统的正常运行。
比特币网络传播方面存在的这些问题,反映了去中心化系统在信息传播和节点行为管理上的复杂性和挑战,也凸显了比特币系统中其他机制(如共识机制、交易验证机制等)对于保障系统安全和稳定运行的重要性。
五、实际应用问题及解决
比特币交易存在双花攻击风险,恶意节点可能通过算力优势使分叉链成为最长合法链。交易完成后,若商家不发货,比特币系统内部无法解决,可选择找信誉良好的商家交易,或向销售平台投诉。此外,出现纠纷时可通过产生新的交易(如退款交易)解决,无需回滚原交易。
- 双花攻击问题及节点行为分析:恶意节点可能实施双花攻击,比如将已经花过的钱再重新花一遍。为达成目的,恶意节点可能会采用各种手段将重复花费的交易转发到各个节点上。正常节点从理论上不应该转发非法交易,但实际上并非所有节点都按规则行事。若恶意节点算力足够强,存在将分叉链变成最长合法链的可能性,从而使双花攻击成功。这体现了在比特币网络中,部分节点的不规范行为以及算力在共识达成中的影响,对交易的安全性构成威胁。
- 支付后商家不发货问题:当用户作为付钱方完成比特币转账交易,且交易被确认写入区块后,存在商家不发货的情况。在比特币系统中,一旦交易被记录在区块里,就无法像传统系统那样直接回滚交易来解决问题。因为回滚交易的成本对于普通用户来说可能远远超过支付金额,例如用户支付几百块购买商品,想要回滚交易消耗的资源可能远超该数额。
- 问题性质及与其他支付系统对比:这类商家不发货的问题属于线下问题,即使是传统的支付系统,如银行转账或支付宝支付,也存在类似情况。当用户支付后商家不提供商品或服务,支付系统内部无法自动解决,用户无法直接让交易回滚。这表明无论是去中心化的比特币系统,还是中心化的传统支付系统,在处理线下交易纠纷方面都存在局限性,无法单纯依靠支付系统自身来保证交易双方都履行义务。
- 解决方法:
- 选择信誉良好的商家:用户在交易时可以尽量选择比较靠谱、有信誉的大商家进行交易。因为对于有信誉的商家而言,若经常出现不发货等欺诈行为,会损害其商业声誉,导致客户流失,影响其长期利益,所以它们更有可能遵守交易规则。
- 向平台投诉:如果商家是在某个销售平台上进行销售,例如类似淘宝这样的平台,用户可以向该平台进行投诉。销售平台为了维护自身的信誉和正常运营,通常会对商家的行为进行监管和处理,帮助用户解决纠纷。
- 产生新交易解决纠纷:比特币系统中,当出现交易纠纷时,并非通过回滚交易来解决。例如用户把比特币转给商家后商家不发货,若商家承认错误并愿意退款,他可以把比特币再转回给用户。从底层比特币系统来看,后一个交易可被理解为对前一个交易的退款,这种方式不需要回滚交易,而是通过产生新的交易来实现资金的退还和纠纷的解决 。
相关文章:【BTC】密码学原理-CSDN博客
【BTC】数据结构-CSDN博客
【BTC】协议(共识机制)-CSDN博客
【BTC】比特币系统的具体实现-CSDN博客