【BTC】比特币网络

目录

一、比特币网络架构

1.1 节点加入与离开

二、消息传播方式

三、交易处理机制

四、网络传播问题

五、实际应用问题及解决


本章节讲比特币网络的工作原理,讲解新创建的区块是如何在比特币网络中传播的。

一、比特币网络架构

比特币工作在应用层,底层是 p2p 网络,运行比特币协议。其 p2p 网络中所有节点对等,无超级节点或主节点。

  1. 工作层次:比特币工作在应用层,其底层是一个 P2P(点对点)网络。在应用层上运行比特币协议,而在底层的网络层运行的是 P2P 类型的网络。

  1. 节点特性:比特币的 P2P 网络非常简单,所有节点都是对等的,不存在像其他某些 P2P 网络中所谓的超级节点(super node)或者主节点(master node)。这种设计使得网络更加去中心化,每个节点在网络中的地位平等,没有特殊的控制节点。
  2. 节点的加入:若要加入比特币网络,首先必须知道至少一个种子节点,然后与这个种子节点建立联系。种子节点会告知新节点它所知道的网络中的其他节点信息。节点之间通过 TCP(传输控制协议)来进行通信,这样做的好处是有利于穿透防火墙,便于节点之间建立稳定的连接,顺利加入网络。
  3. 节点的离开:当节点要离开比特币网络时,不需要进行任何特殊操作,也不用通知其他节点,只需直接退出自身的应用程序即可。其他节点在一段时间内没有收到该节点的消息后,就会将其从自身的节点列表中删除。这种机制使得节点的离开过程非常简便,不会对网络的运行产生复杂的影响。

通过这些架构特点,比特币网络构建了一个相对简单、去中心化且节点进出自由的 P2P 网络环境,为比特币系统的运行提供了基础的网络支撑。

1.1 节点加入与离开

新节点加入网络需知道至少一个种子节点,通过 tcp 通信建立连接;离开时无需通知其他节点,直接退出应用程序,一段时间后其他节点长时间无法与其建立通讯后就会将其删除。

  • 节点的加入:
    • 前提条件:想要加入比特币网络的节点,首先要获取至少一个种子节点的相关信息,即必须知道至少有一个种子节点的存在。
    • 建立连接:与已知的种子节点取得联系。种子节点在收到新节点的连接请求后,会将自己所知晓的网络中其他节点的信息告知新节点。
    • 通信方式:节点之间采用 TCP(传输控制协议)进行通信。TCP 协议的优势在于其能够更好地穿透防火墙,保证节点之间通信的稳定性和可靠性,使得新节点能够顺利地与其他节点建立连接,融入比特币网络。
  • 节点的离开:
    • 操作简便:当某个节点想要离开比特币网络时,无需进行专门的操作来通知其他节点。节点只需直接退出自身运行的比特币应用程序即可。
    • 自动删除:对于网络中的其他节点而言,在一段时间内如果没有接收到该节点发送的消息,它们就会判定该节点已经离开网络,并自动将该节点从自己维护的邻居节点集合中删除。这种机制使得节点的离开过程对网络的影响较小,并且实现起来相对简单,不需要复杂的通知和确认流程。

这种节点加入与离开的机制,既保证了新节点能够方便快捷地接入比特币网络,又使得节点离开时不会对网络造成过多的干扰,维持了比特币网络的动态稳定性和运行效率。

二、消息传播方式

每个节点维护邻居节点集合,消息传播采用 flooding 方式,首次收到消息时转发给所有邻居节点并记录,再次收到则不再转发。节点选取随机,不考虑底层拓扑结构,虽增强了鲁棒性,但牺牲了效率。

  1. 邻居节点集合维护:比特币网络中的每个节点都需要维护一个邻居节点的集合。这个集合记录了该节点所连接和知晓的其他节点信息,是消息传播的基础网络结构。
  2. 消息传播机制(flooding 方式):采用 flooding(泛洪)方式进行消息传播。当一个节点第一次接收到某个消息时,它会将这个消息转发给除了消息来源节点之外的所有其他邻居节点。通过这种方式,消息能够迅速在网络中扩散开来。
  3. 消息记录与重复处理:节点在转发消息的同时,会对已接收的消息进行记录。当再次收到相同的消息时,节点会识别出该消息已经接收过,此时就不会再将其转发给邻居节点。这样可以避免消息在网络中无限循环传输,减少网络资源的浪费。
  4. 节点选取特点:邻居节点的选取是随机的,不考虑底层的拓扑结构。例如,一个位于加利福尼亚的节点,它所选择的邻居节点可能远在阿根廷。这种随机选取的方式虽然牺牲了一定的效率,但增强了网络的鲁棒性。因为不依赖于特定的拓扑结构,即使部分节点出现问题或者网络局部发生变化,消息仍然有较大概率能够通过其他路径传播,保证了网络的可靠性和稳定性。
  5. 对效率的影响:由于不考虑底层拓扑结构,在这种消息传播方式下,节点向身边的人转账和向美国转账的速度在网络传播层面上其实差不多。也就是说,这种设计虽然增强了鲁棒性,但在一定程度上牺牲了消息传播的效率,无法根据节点之间的实际距离或网络拓扑优化传播路径,可能导致一些不必要的长距离消息传输。

通过以上消息传播方式,比特币网络在保证消息能够尽可能广泛传播的同时,也在一定程度上控制了消息的重复传输和资源消耗,以简单的设计实现了相对可靠的网络通信,适应了比特币网络去中心化的特点。

三、交易处理机制

每个节点维护等待确认(等待写入区块链)的交易集合,收到合法交易(有合法签名且未被花费过)加入集合并转发,若收到冲突交易则根据情况判断处理。新发布的区块传播方式与交易类似,节点需检查区块内容合法性及是否在最长合法链上,比特币协议限制区块大小为一兆字节,因网络传播方式受带宽限制,大区块传播速度慢。

  1. 等待确认交易集合的维护:比特币系统中,每个节点都要维护一个等待确认的交易集合。这个集合用于暂存那些已经接收到但尚未被包含在区块中进行确认的交易。
  1. 新交易的处理:当节点第一次听到某个交易时,会对该交易进行合法性检查。如果该交易具有合法的签名,并且所使用的币以前没有被花费过(即不存在双花问题),那么这个交易就被认为是合法的。合法的交易将被加入到等待确认的交易集合中,并且节点会把这个交易转发给它的邻居节点。此后,当再次收到相同的交易时,就无需再进行转发,避免了交易在网络上的无限传输。
  2. 冲突交易的处理(race condition):存在一种情况,即可能有两个有冲突的交易差不多同时被广播到网络上。例如,一个交易是 A 转钱给 B,另一个交易是 A 转钱给 C,且假设他们花的是同一个币。由于网络传播的延迟和节点位置的不同,不同节点接收这两个交易的顺序会有所差异。
    • 对于先收到 A 转给 B 交易的节点,会将其加入等待确认的交易集合。当后续收到 A 转给 C 的交易时,由于与已存在的交易冲突,这个交易就会被判定为非法,节点会忽略它。
    • 而对于先收到 A 转给 C 交易的节点,会将其加入集合,此时若再收到 A 转给 B 的交易,这个交易就不能被加入集合,并且之前已加入的与当前冲突的交易(比如 A 转给 C 的交易)可能需要从集合中删掉。

  1. 交易从集合中删除的情况:当节点听到一个新发布的区块时,如果等待确认交易集合中的某个交易被包含在这个新区块中,那么该交易就可以从集合中删掉,因为它已经得到了确认。另外,如果新发布的区块中包含了与集合中某个交易冲突的交易,那么集合中对应的冲突交易也需要被删除,因为此时该交易已被证明为非法(已被写入区块的交易具有更高的优先级和合法性)。

通过以上交易处理机制,比特币网络能够有效地管理和处理交易,在存在网络延迟和交易冲突的情况下,尽可能保证交易的合法性和一致性,为比特币系统的正常运行提供了重要的基础保障。

四、网络传播问题

比特币网络传播属于 best effort,交易发布后不一定所有节点都能收到,且不同节点收到交易的顺序可能不同,网络传播存在延迟,部分节点可能不按协议转发,导致合法交易收不到或转发不合法交易。

  1. 传播特性(best effort):比特币网络的传播属于 “best effort”(尽力而为)类型。这意味着一个交易发布到比特币网络上后,并不能保证所有的节点都能收到该交易。而且,不同的节点接收到这个交易的顺序也不一定是相同的。这种不确定性是由比特币网络的去中心化特性以及其采用的传播方式所决定的。
  1. 网络传播延迟:网络传播存在延迟,并且有时这种延迟可能会很长。由于比特币网络中的节点数量众多,分布广泛,且消息传播采用泛洪(flooding)等方式,交易或区块消息从一个节点传播到其他所有节点需要一定的时间。在这个过程中,不同节点接收到消息的时间会有较大差异,导致整个网络在信息同步上存在一定的滞后。
  2. 节点不按协议转发问题:并非所有节点都会严格按照比特币协议的要求进行转发操作。有些节点可能不转发应该转发的合法交易,这可能导致某些节点无法接收到这些合法交易信息,影响交易的正常处理和确认。同时,也有一些节点可能会转发一些不合法的交易,例如存在双花问题或者签名不合法的交易。这种情况破坏了网络中交易信息的一致性和合法性,给比特币系统的运行带来了潜在风险。
  3. 对系统的影响及本质:这些网络传播问题是去中心化系统中面临的实际问题。在去中心化的比特币网络中,没有一个中心机构来统一管理和协调节点的行为,每个节点都有一定的自主性,这就不可避免地会出现上述问题。这些问题的存在对交易的可靠性和整个比特币系统的稳定性构成了挑战,需要通过一定的机制(如共识机制等)来尽量减少其影响,确保系统的正常运行。

比特币网络传播方面存在的这些问题,反映了去中心化系统在信息传播和节点行为管理上的复杂性和挑战,也凸显了比特币系统中其他机制(如共识机制、交易验证机制等)对于保障系统安全和稳定运行的重要性。

五、实际应用问题及解决

比特币交易存在双花攻击风险,恶意节点可能通过算力优势使分叉链成为最长合法链。交易完成后,若商家不发货,比特币系统内部无法解决,可选择找信誉良好的商家交易,或向销售平台投诉。此外,出现纠纷时可通过产生新的交易(如退款交易)解决,无需回滚原交易。

  1. 双花攻击问题及节点行为分析:恶意节点可能实施双花攻击,比如将已经花过的钱再重新花一遍。为达成目的,恶意节点可能会采用各种手段将重复花费的交易转发到各个节点上。正常节点从理论上不应该转发非法交易,但实际上并非所有节点都按规则行事。若恶意节点算力足够强,存在将分叉链变成最长合法链的可能性,从而使双花攻击成功。这体现了在比特币网络中,部分节点的不规范行为以及算力在共识达成中的影响,对交易的安全性构成威胁。
  1. 支付后商家不发货问题:当用户作为付钱方完成比特币转账交易,且交易被确认写入区块后,存在商家不发货的情况。在比特币系统中,一旦交易被记录在区块里,就无法像传统系统那样直接回滚交易来解决问题。因为回滚交易的成本对于普通用户来说可能远远超过支付金额,例如用户支付几百块购买商品,想要回滚交易消耗的资源可能远超该数额。
  2. 问题性质及与其他支付系统对比:这类商家不发货的问题属于线下问题,即使是传统的支付系统,如银行转账或支付宝支付,也存在类似情况。当用户支付后商家不提供商品或服务,支付系统内部无法自动解决,用户无法直接让交易回滚。这表明无论是去中心化的比特币系统,还是中心化的传统支付系统,在处理线下交易纠纷方面都存在局限性,无法单纯依靠支付系统自身来保证交易双方都履行义务。
  3. 解决方法:
    • 选择信誉良好的商家:用户在交易时可以尽量选择比较靠谱、有信誉的大商家进行交易。因为对于有信誉的商家而言,若经常出现不发货等欺诈行为,会损害其商业声誉,导致客户流失,影响其长期利益,所以它们更有可能遵守交易规则。
    • 向平台投诉:如果商家是在某个销售平台上进行销售,例如类似淘宝这样的平台,用户可以向该平台进行投诉。销售平台为了维护自身的信誉和正常运营,通常会对商家的行为进行监管和处理,帮助用户解决纠纷。
    • 产生新交易解决纠纷:比特币系统中,当出现交易纠纷时,并非通过回滚交易来解决。例如用户把比特币转给商家后商家不发货,若商家承认错误并愿意退款,他可以把比特币再转回给用户。从底层比特币系统来看,后一个交易可被理解为对前一个交易的退款,这种方式不需要回滚交易,而是通过产生新的交易来实现资金的退还和纠纷的解决 。

 相关文章:【BTC】密码学原理-CSDN博客
                  【BTC】数据结构-CSDN博客
                  【BTC】协议(共识机制)-CSDN博客
                  【BTC】比特币系统的具体实现-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88102.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88102.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Clickhouse 的历史发展过程

20.5.3 开始支持多线程20.6.3 支持explainmysql 20.8 实时同步mysql📌 ‌一、早期版本阶段(1.1.x系列)‌‌版本范围‌:1.1.54245(2017-07)→ 1.1.54394(2018-07)‌核心特性‌&#x…

玩转n8n工作流教程(一):Windows系统本地部署n8n自动化工作流(n8n中文汉化)

在Windows系统下使用 Docker 本地部署N8N中文版的具体操作,进行了详尽阐述,玩转n8n工作流教程系列内容旨在手把手助力从0开始一步一步深入学习n8n工作流。想研究n8n工作流自动化的小伙伴们可以加个关注一起学起来。后续也会持续分享n8n自动化工作流各种玩…

mini-program01の系统认识微信小程序开发

一、官方下载并安装 1、下载(I选了稳定版) https://developers.weixin.qq.com/miniprogram/dev/devtools/download.htmlhttps://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 2、安装(A FEW MOMENT LATER)…

如何将 Java 项目打包为可执行 JAR 文件

如何将 Java 项目打包为可执行 JAR 文件我将详细介绍将 Java 项目打包为可执行 JAR 文件的完整流程,包括使用 IDE 和命令行两种方法。方法一:使用 IntelliJ IDEA 打包步骤 1:配置项目结构打开项目点击 File > Project Structure在 Project…

【Starrocks 异常解决】-- mysql flink sync to starrocks row error

1、异常信息 flink 1.20 starrocks 3.3.0 mysql 8.0 errorLog: Error: Target column count: 35 doesnt match source value column count: 28. Column separator: \t, Row delimiter: \n. Row: 2025-05-22 6 23400055 214 dssd 1 1 1928 mm2er 360 20000.00000000 1…

Jenkins 使用宿主机的Docker

背景:不想在Jenkins 内部安装Docker,想直接使用Jenkins服务所在的系统安装的docker当你在 Jenkins 中执行 docker 命令时,实际上是通过 Docker 客户端与 Docker 守护进程进行通信。Docker 客户端和守护进程之间的通信是通过一个名为 /var/run/docker.soc…

工具+服务双驱动:创客匠人打造中医IP差异化竞争力

一、技术工具场景化定制:中医专业的可视化破圈在中医IP同质化严重的行业现状下,创客匠人以场景化技术工具破解专业传播难题。系统内置的“体质测试”模块可生成个性化调理报告,“案例库”支持前后对比图上传,“直播问诊”自动添加…

JVM对象分配内存如何保证线程安全?

大家好,我是锋哥。今天分享关于【JVM对象分配内存如何保证线程安全?】面试题。希望对大家有帮助; JVM对象分配内存如何保证线程安全? 超硬核AI学习资料,现在永久免费了! 在Java中,JVM&#xf…

机器学习中的数据对齐

文章目录前言数据集怎么理解数据数据对齐为什么偏偏是这样对齐?前言 在神经网络中,我们往往会根据数据集构建训练集、测试集,有时会有验证集。但是,在构建完成后,如果直接将这些数据直接扔进模型训练,输入…

机器学习:更多分类回归算法之决策树、SVM、KNN

下面介绍的这几种算法,既能用于回归问题又能用于分类问题,接下来了解下吧。 决策树 可参考: 决策树(Decision Tree) | 菜鸟教程 决策树(Decision Tree)是一种常用的监督学习算法,可用…

Vue 整合 Vue Flow:从零构建交互式流程图

目录引言目的适用场景环境准备基础组件 (index.vue)自定义组件 (矩形、菱形等)RectangleNode.vue (矩形节点):DiamondNode.vue (菱形节点):ImageNode(自定义图片节点):操作实现 (#操作实现) 拖拽节点 (#拖拽节点) 连线 (多连接点) 删除节点 …

C# WPF - Prism 学习篇:搭建项目(一)

一、前期准备开发工具:Visual Studio 2022二、创建项目1、创建WPF 应用“WpfApp.StudyDemo”:2、项目结构如下: 三、安装 Prism1、选中项目“WpfApp.PrismDemo”,在右键菜单中选择“管理 NuGet 程序包(N)...”。2、在搜索框中输入…

单片机 基于rt-thread 系统 使用 CCM内存

一、开发环境 开发板:野火stm32f407 系统:rt-thread V4.1.1 二、链接脚本配置 ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ****************************…

【UnityAssetBundle】AB包卸载资源

AB包的卸载高效稳定游戏开发的强制要求,它解决了资源管理中的内存泄漏问题,为动态的内容加载、热更新、大型世界的构建提供了内存保障,最终提升了游戏性能、稳定性和用户体验。卸载资源方式一(推荐使用):卸…

【万字长文】深度学习2 yolov5修改为自己的数据集

数据预处理 使用labelme可以直接导出适用于yolo模型的txt文本数据,也可以直接导出默认的json数据结构,后面我会提供代码进行转换。自行进行标注,图片与标注一一对应,更多要求不赘述。因为我做最简单的检索模型,不做切…

ubuntu18编译RealSense SDK 2.0

参考文章:https://dev.intelrealsense.com/docs/compiling-librealsense-for-linux-ubuntu-guide1、安装依赖 sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade sudo apt-get install libssl-dev libusb-1.0-0-dev libud…

算法学习笔记:9.Kruskal 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题

在图论的众多算法中,Kruskal 算法以其简洁高效的特性,成为求解最小生成树(Minimum Spanning Tree,MST)的经典方法。无论是在通信网络的优化设计、电路布线的成本控制,还是在计算机考研 408 的备考过程中&am…

Vue+Openlayers加载OSM、加载天地图

文章目录1. 介绍2. 加载底图2.1 加载默认OSM地图2.2 加载天地图1. 介绍 Openlayers官网:https://openlayers.org/ 安裝依赖:npm i ol 2. 加载底图 参考博客: vueopenlayers环境配置:https://blog.csdn.net/cuclife/article/det…

Python处理电子表格文件库之pyexcel使用详解

概要 pyexcel是一个功能强大的Python第三方库,专门用于处理各种格式的电子表格文件。核心价值在于提供了统一的接口来读取、写入和操作Excel、CSV、ODS等多种电子表格格式,极大简化了数据处理工作流程。与传统的单一格式处理库不同,pyexcel采用了插件化架构,使开发者能够通…

【网络安全】恶意 Python 包“psslib”仿冒 passlib,可导致 Windows 系统关闭

文章目录恶意 Python 包“psslib”仿冒 passlib如何避免psslib的威胁恶意 Python 包“psslib”仿冒 passlib Socket 的威胁研究团队发现了一个名为 psslib 的恶意 Python 包,旨在以提供密码安全功能为幌子突然关闭 Windows 系统。 该软件包由威胁行为者使用别名 u…