[比特币]比特币中的网络

比特币工作在应用层,它的底层是一个P2P网络。比特币的P2P网络是非常简单的,所有节点都是对等的,不会出现某些P2P网络中所谓的超级节点或者中心节点。

比特币网络的设计原则:simple, robust, but not efficient,即简单,健壮,而不是高效。每个节点都会维护一个邻居节点的集合。交易在网络中以flooding的方式进行传播。

每个节点都会维护一个交易池,存放未确认的交易。当节点第一次接收到某个消息时,它会把这个消息放入交易池中,并将消息发送个邻居节点;之后再收到这个消息的时候就不会再转发给邻居节点。这样可以避免交易在网络上无限制地传播下去。

进行交易转发的前提是该交易必须是合法的。比如A-->B 和 A-->C。这两个交易如果同时在网络上传播的话,根据节点在网络中的位置不同,每个节点收到的交易顺序也会不同。假如一个节点先收到第一个交易,验证合法后会保存交易到交易池中,并转发给邻居节点;再接收到第二个交易时会认为与前一个交易有冲突,属于非法交易,就不会再将它放入交易池中。

假如有节点接收到一个新发布的区块,其中包含了A-->B的交易,那个它会将本地交易池中A-->B的这笔交易删除。

要加入比特币网络,首先得知道至少一个种子节点,然后你要跟种子节点联系,它会告诉你它所知道的网络中其它节点。节点之间通过TCP通信,这样有利于穿透防火墙。当你离开时,不需要通知其它节点,关闭程序即可。其它节点在长时间收不到你的消息后会自动将你删除。

在比特币网络中,邻居节点的选择是随机,没有考虑底层的拓扑结构。这样的好处是增强了健壮性,但牺牲了效率。

新发布的区块,在网络上的传播有很多方式。每个节点除了要检查区块内容的合法性之外,还要检查它是不是在最长合法链上。

比特币系统采用的传播方式是非常耗带宽的,因此越大的区块,在网络上传播的速度越慢。比特币协议对区块的大小限制在1M字节大小。以1M字节大小计算,一个新生成的区块可能需要几十秒才能传播到网络的大部分节点上。这已经是很长时间了。

比特币网络的传播,属于尽力而为型,这意味着一个新的交易发布到比特币网络上,不一定所有的节点都能收到,由于网络延迟的原因,也不是所有的节点收到的顺序都一样,而且也不是所有的节点都会按照比特币协议进行转发。


声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。


posted @   落雷  阅读(440)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示