木蚂蚁手机乐园首页

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 237|回复: 0

[手机资讯] 比特币原理

[复制链接]

该用户从未签到

4万

主题

4万

帖子

29万

积分

精品资源组

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
292907

蚂蚁MM发帖先锋新锐会员勋章骨干会员勋章

发表于 2019-2-13 14:15:53 | 显示全部楼层 |阅读模式
比特币网络 0.比特币网络简述 1)比特币采用了基于国际互联网(Internet)的P2P(peer-to-peer)网络架构(比特币的P2P网络下文会做详细介绍); 2)“比特币网络”是按照比特币P2P协议运行的一系列节点的集合; 除了比特币P2P协议之外,比特币网络中也包含其他协议(比如Stratum协议就被应用于挖矿节点通信&&比特币轻钱包等); 3)网关路由服务器(gateway)提供其他协议,并且基于P2P协议将这些协议接入到比特币网络中,并拓展到运行其他协议的各个节点。 1.P2P协议概述 P2P:对等计算机或对等网络。 P2P是一种分布式网络,网络的参与者共享他们所拥有的一部分硬件资源(处理能力、存储能力、网络连接能力、打印机等),这些共享资源需要由网络提供服务和内容,能被其它对等节点直接访问而无需经过中间实体。 在此网络中的参与者既是资源提供者,又是资源获取者,网络中的每个节点都是以【扁平】的拓扑结构相互连通。 P2P的特点: 1)无中央服务器,打破了C/S模式;2)用户之间互联并分享文件;3)非中心化 P2P网络常见的拓扑结构: 1)中心化拓扑(又叫星行拓扑) 2)半中心化拓扑 3)全分布式拓扑(网状/扁平) 区块链中的P2P拓扑结构采用的是全分布式拓扑结构 2.区块链中的P2P协议有什么不同? P2P的网络协议应用有很多, 规模最大也最成功的领域就是文件分享领域:比如BitTorrent(比特流:是一种内容分发协议,由布拉姆·科恩自主开发);比如Napster; 比特币&以太坊等区块链实现了适合自己网络的定制化的P2P网络协议,与上述P2P协议稍有不同。 1)比特币的P2P网络是基于TCP协议构建的,主网默认通信端口8333; 2)以太坊的P2P网络是一个完全加密的网络,提供UDP和TCP两种连接方式(节点发现使用的UDP,节点间信息交互使用的是TCP),主网默认TCP通信端口30303,UDP端口30301; 区块链中的P2P协议,担负的职责有很多,比如节点发现与路由,比如节点交互等。 3.节点的功能有哪些? 一:由上我们知道,比特币网络的核心基础协议是P2P,比特币网络中的其他协议都是通过桥接服务器接入P2P网络,并且P2P网络中的节点都是对等的。 虽然,比特币网络中的节点是对等的,但是根据节点所承载的功能不同,不同节点在整个比特币网络中的分工也不同。 二:节点总共承载四个功能: (1)挖矿:即部署了Stratum服务器的节点 (2)钱包:即转账交易功能 (3)路由 (4)区块链数据库:即Local存储区块链全部数据 如下图所示:
比特币网络节点 1)“网络路由”:功能是所有节点都具备的功能,也就是说不具备“网络路由功能的”节点不能称之为“比特币网络节点”; 2)”完整区块链“:指的是节点本地保存一份完整的并且最新的区块链全部数据。这样的节点,我们称之为“全节点”Full Node; 反之,有的节点只保存了部分的区块链数据(一般是运行SPV协议,本地保存区块头部SPV认证信息),这样的节点我们称之为“SPV节点”或者“轻量级节点”; 3)“挖矿”:指的是那些运行在特殊设备上,并且运行POW算法的节点,通过POW算法来互相竞争新区块的生成权; 4)“钱包”:用户的钱包也可以作为比特币网络的一个节点,比如BitCoin Core桌面钱包,以及SPV移动端轻量级钱包等。 4.节点的分类与分工 根据节点拥有上述四个功能中的多少来分类,比特币网络节点可以分为如下几种: 1)bitcoin core 比特币核心客户端 在比特币网络中,包含钱包,挖矿,完整的区块链数据,网络路由节点。
core 2)完整区块链节点 在比特币网络中,包含完整的区块链数据和网络路由节点;
full Node 3)独立矿工 本地拥有完整的区块链数据,无需实时与其他节点进行数据验证;拥有网络路由功能(所以可视为网络节点);运行POW挖矿算法;
独立矿工 4)SPV轻钱包 不存储区块链所有数据,只保存SPV认证所需的必要信息;包含网络路由节点。
SPV钱包 以上,即是网络节点的大致分类,而我们也知道,“矿工”这个角色对于维护比特币网络的安全,对全网交易的进行发挥着举足轻重的作用,那么,根据矿工接入P2P网络的方式来区分,又分为几种类型的“矿工”呢? 5.“矿工”的分类 1)独立矿工 上文已经描述。 2)Stratum矿工(运行Stratum服务器) 运行Stratum挖矿协议的矿工(非节点)属于Stratum主服务器的子服务器;
Stratum协议矿工 3)矿池协议矿工(运行Pool服务器) 运行矿池挖矿协议的矿工服务器,通过Pool协议与Pool矿池主服务器进行交互; 矿池组,只有PooL矿池主服务器与P2P网路链接,大致的网络拓扑图如下:
简易化“矿工”网路拓扑图 6.网络节点如何发现? 在一个中心化的拓扑结构中,任何加入的网络的新节点只要连接到中心节点即可; 但是,比特币中的P2P网络节点都属于“对等节点”,那么比特币网络如何在“去中心化”的拓扑结构下,动态维护网络节点的呢? 当一个新的网络节点启动之后,该节点需要快速的与任何一个保持活跃状态的对等节点完成通信,加入到比特币网络中参与协同运作; 由于比特币网络的拓扑结构是不基于物理地址的,所以相邻节点的概念与物理信息无关;在新节点连接时,可以随机选择网络中存在的比特币节点与之相连。 节点之间的通信过程 1)对等节点之间是使用TCP协议进行握手通信的,主网默认通信端口8333; 2)通信交互的信息为,新加入节点A运行的P2P协议版本信息Version,BestHeight等(BestHeight字段标示了一个节点当前的区块链高度),对等节点B接收到之后,会回复一个VersionAck信息。 3)对等节点B主动发起链接,发送本节点运行的P2P协议版本信息Version等,新加入节点A接收到之后,要恢复对等节点一个VersionAck信息。 4)新加入节点A发送一个getAddress()请求,要求对等节点B返回其已知的其他对等节点的IP地址列表。通过这种方式,新加入节点A可以找到需连接到的对等节点集合,并向网络发布它的消息以便其他节点查找。 5)新加入节点A,发送getBlocks()请求,对等节点B会返回B本地保存的顶端区块哈希值。如果节点A识别出它接收到的哈希值并不属于顶端区块,而是属于一个非顶端区块的旧区块,那么它就能推断出:其自身的本地区块链比其他对等节点的区块链更长。 6)拥有更长区块链的对等节点,会向全网广播出去,其他对等节点如果需要补充区块,则会向该拥有最长区块链的节点发起getdata()请求,获取全部数据; Q&A: 1)以上过程为曾经加入过比特币网络中的FullNode节点 再次动态加入的过程,如果是一个新的FullNode节点呢? 那么它就不包含任何区块链信息,它只知道一个区块——静态植入在客户端软件中的创世区块。新节点需要下载从0号区块(创世区块)开始的数十万区块的全部内容,才能跟网络同步、并重建全区块链。 2)如果新加入的节点是一个SPV节点(轻量级节点)呢? SPV节点使用的是一条getheaders消息,而不是getblocks消息来获得区块头。发出响应的对等节点将用一条headers消息发送多达2000个区块头。这一过程和全节点获取所有区块的过程没什么区别。 SPV节点还在与对等节点的连接上设置了布隆过滤器,用以过滤从对等节点发来的未来区块和交易数据流。任何目标交易都是通过一条getdata的请求来读取的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

推荐版块: PC破解软件下载  |   VR视频资源下载  |   三星Galaxy S8/S8+  |   恋舞OL  |   安卓破解软件  |   安卓破解游戏     安卓汉化下载  
安卓android软件大全  |   安卓大型游戏  |   小米手机论坛  |   三星Galaxy Note8论坛  |   影视资源下载  |   安卓破解    
安卓市场   安卓软件   小说电子书大全   在线影音播放   PC破解游戏下载   安卓软件教程   安卓游戏攻略   手机游戏   手机健康软件   手机订餐软件   手机购物软件   热门TAG
快速回复 返回顶部 返回列表