专栏首页深入浅出区块链技术分析比特币网络:一种去中心化、点对点的网络架构

分析比特币网络:一种去中心化、点对点的网络架构

比特币采用了基于互联网的点对点(P2P:peer-to-peer)分布式网络架构。

比特币网络可以认为是按照比特币P2P协议运行的一系列节点的集合。

本文来分析下比特币网络,了解它跟传统中心化网络的区别,以及比特币网络是如何发现相邻节点的。

## 中心化网络

为了更好的理解P2P网络,我们先来看看传统的中心化模型:

这是一种典型的星型(“中心化”)结构,我们常见B/S及C/S网络架构就是这种模型,C1 、C2 、C3等之间没法直接的连接,C节点如果要连接必须要通过中心化S节点做为桥梁。

中心化节点充当服务者、中介作用,比如我们没有办法把资金直接从一个人转移给另一个人,必须通过银行这个中介。

## P2P网络

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

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

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

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

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

## 如何发现节点

既然每个网络节点都是平等的(是指在网络层面上节点是平等的,但各节点在功能上可以有不同的分工, 如钱包节点、挖矿节点等),不存在任何“特殊”中心节点,那么当新的网络节点启动后,它是如何跟其他的节点建立连接,从而加入到比特币网络呢?

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

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

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

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

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

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

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

## 节点通信简述

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

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

本文分享自微信公众号 - 深入浅出区块链技术(blockchaincore),作者:Tiny熊

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-11-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 比特币如何达成共识 - 最长链的选择

    比特币没有中心机构,几乎所有的完整节点都有一份公共总帐本,那么大家如何达成共识:确认哪一份才是公认权威的总账本呢?

    Tiny熊
  • Istanbul BFT解读(中)

    前端时间写了Istanbul BFT的一些原理,以及逻辑详情[1]。今天想写一篇实战的技术文章,所以底层原理就不赘述。下一篇我们将介绍Istanbul BFT的...

    Tiny熊
  • [译]如何利用OpenZeppelin编写可升级的智能合约

    智能合约部署后就不能变更(设计上的不变性)。另一方面,软件质量在很大程度上取决于迭代升级和修补源代码的能力。尽管基于区块链的软件从不变性中获得了可观的收益,但仍...

    Tiny熊
  • zookeeper ZAB协议的实现

    在 zookeeper源码分析系列 中按照服务端客户端启动或交互等主线讲解了源码,但并没有将Zab协议的完整实现串起来。本文主要翻译自ZooKeeper’s a...

    Monica2333
  • CAP 一致性协议及应用解析

    假设系统中有 5 个节点,n1~n5。n1,n2,n3 在A物理机房。n4,n5 在 B 物理机房。现在发生了网络分区,A 机房和 B 机房网络不通。

    [3306 Pai ] 社区
  • CAP 一致性协议及应用解析

    假设系统中有 5 个节点,n1~n5。n1,n2,n3 在A物理机房。n4,n5 在 B 物理机房。现在发生了网络分区,A 机房和 B 机房网络不通。

    用户1278550
  • 死磕 java集合之TreeMap源码分析(二)- 内含红黑树分析全过程

    插入元素,如果元素在树中存在,则替换value;如果元素不存在,则插入到对应的位置,再平衡树。

    彤哥
  • 树的实现

    一.树的定义和细节: /* 1.树是由一些节点组成的集合,这个集合可以是空集。 2.如果这个集合非空集,那么一棵树就是由根节点,以及...

    Enterprise_
  • 面试还在被红-黑树虐?看完这篇动图文章轻松反虐面试官

    如果这样,面试官一定也是一脸懵逼啊~ 不过也没错,TreeMap 内部的确就是用红-黑树实现的。学红-黑树不仅仅是用来应付面试官,武侠小说里说:招式只是形式,要...

    java进阶架构师
  • 简述 zookeeper 基于 Zab 协议实现选主及事务提交

    Zab 协议:zookeeper 基于 Paxos 协议的改进协议 zookeeper atomic broadcast 原子广播协议。

    WindWant

扫码关注云+社区

领取腾讯云代金券