博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分析比特币网络:一种去中心化、点对点的网络架构
阅读量:6452 次
发布时间:2019-06-23

本文共 1159 字,大约阅读时间需要 3 分钟。

本文发表于链客区块链技术问答社区,分享一些经验给大家,本本文分析比特币网络,了解和传统中心化网络的区别,以及如何发现相邻节点。

比特币采用基于网络的点对点分布式网络框架,可以认为时按照比特币P2P协议运行的节点集合。

中心化网络

这是典型的中心化结构,常见B/S和C/S网络架构就是这种模型,C1、C2、C3等之间无法直接连接,C节点如要连接必须通过中心化S节点作为桥梁,中心化节点起到中介作用。

P2P网络

P2P网络是指位于同一网络中的计算机彼此对等,各个结点共同提供网络服务,不存在任何特殊节点,以扁平的拓扑结构互相连通。

对比中心化网络,在P2P网络中不存在任何服务端(server)、中央化的服务。

P2P网络的节点之间交互连接、协同,每个节点在对外提供服务的同时也使用网络中其他节点所提供的服务,每个节点即是服务端又是客户端。

P2P网络模型除应用于比特币网络,使用广泛的BT下载就是基于P2P网络。

P2P网络不仅仅去除了中心化带来的风险(中心化可能作恶),还可以提高传输的效率。(中心化网络当能也有优点)

在中心化网络中,新加入的节点只要连接“特殊”的中心节点就可以加入网络。

为了能够加入到比特币网络,比特币客户端会做一下几件事情:

1.当建立一个或多个连接后,节点将一条包含自身IP地址消息发送给其相邻节点。相邻节点再将此消息依次转发给它们各自的相邻节点,从而保证节点信息被多个节点所接收、保证连接更稳定。

2.新接入的节点可以向它的相邻节点发送获取地址getaddr消息,要求它们返回其已知对等节点的IP地址列表。节点可以找到需连接到的对等节点。

3.在节点启动时,可以给节点指定一个正活跃节点IP, 如果没有,客户端也维持一个列表,列出了那些长期稳定运行的节点。这样的节点也被称为种子节点(其实和BT下载的种子文件道理是一样的),就可以通过种子节点来快速发现网络中的其他节点。

4.节点会在失去已有连接时尝试发现新节点。

5.节点会记住它最近成功连接的网络节点,当重新启动后它可以迅速与先前的对等节点网络重新建立连接。

节点通信简述

比特币节点通常采用TCP协议、使用8333端口与相邻节点建立连接, 建立连接时也会有认证“握手”的通信过程,用来确定协议版本,软件版本,节点IP,区块高度等。

当节点连接到相邻节点后,接着就开始跟相邻节点同步区块链数据(轻量级钱包应用其实不会同步所有区块数据),节点们会交换一个getblocks消息,它包含本地区块链最顶端的哈希值。如果某个节点识别出它接收到的哈希值并不属于顶端区块,而是属于一个非顶端区块的旧区块,就说其自身的本地区块链比其他节点的区块链更长,并告诉其他节点需要补充区块,其他节点发送getdata消息来请求区块,验证后更新到本地区块链中。

转载地址:http://plgwo.baihongyu.com/

你可能感兴趣的文章
简单理解函数回调——同步回调与异步回调
查看>>
POJ 1007
查看>>
Android 多个Activity 跳转及传参
查看>>
中文文本预处理流程(带你分析每一步)
查看>>
anroid 广播
查看>>
AJAX POST&跨域 解决方案 - CORS
查看>>
如何设计企业内部的数据平台?
查看>>
关于最小生成树中的kruskal算法中判断两个点是否在同一个连通分量的方法总结...
查看>>
【译】Linux系统和性能监控(4)
查看>>
开篇,博客的申请理由
查看>>
点滴积累【C#】---C#实现上传word以流形式保存到数据库和读取数据库中的word文件。...
查看>>
Ubuntu常用笔记
查看>>
Token和session 详解
查看>>
JMeter IP欺骗压测
查看>>
Serializers 序列化组件
查看>>
最简单的RPC框架实现
查看>>
Servlet 技术全总结 (已完成,不定期增加内容)
查看>>
[JSOI2008]星球大战starwar BZOJ1015
查看>>
CountDownLatch与thread-join()的区别
查看>>
linux下MySQL安装登录及操作
查看>>