比特币源码分析之六:网络

比特币源码分析之六:网络

交互模型

盗用官网的一张图

这幅图描绘了最基本的比特币p2p网络的数据协议,本文就针对这张图进行讲解

消息类型

消息都有一个公共的头结构如下(代码在Protocol.h CMessageHeader类中)

其中pchCommand代表了消息的类型,是一个字符串,下文用消息ID代表

图中有几个类别的消息

1、Getheaders消息

消息ID:NetMsgType::GETHEADERS

重要字段:

Locator 代表了本节点有的区块头的hash列表(可以看做一个需要区块的起始)

hashStop 代表了需要区块的hash停止位置

作用:

从别的节点中同步区块,locator和hashstop分别代表了需要区块的起始和结束位置,但是locator之所以是一个hash列表,是因为有可能出现分叉的情况(而且大概率出现这种情况),发个列表过去,对方好找到两条链的分叉点,从这里开始发送。

2、Headers消息

消息ID:NetMsgType::HEADERS

重要字段:

Count 代表了包含区块头的多少

Headers 一个区块头的列表

作用:

主要是用于回复Getheaders消息,把本地的区块头发送给对方

3、Getblocks消息

消息ID:NetMsgType::GETBLOCKS

重要字段:

Locator

hashStop

这两个字段和Getheaders相同

作用:

从别的节点获取区块,和Getheaders唯一区别就是一个是获取整个区块内容一个是只获取头,最初比特币只有Getblocks,考虑到比较笨重又有可能引发带宽并发等问题,修改成了Getheaders消息主导。

4、Mempool消息

一个交易池消息,暂时先不介绍,等讲解到交易池时这个就不言自明了

5、Inv消息

消息ID:NetMsgType::INV

重要字段:

本消息是一个inv列表而inv有这两个字段

Type 代表是tx还是block

Hash 代表tx或者block的hash

作用:

主要是回复GetBlock或者tx消息,告诉对方我有这些tx或者block,你来取吧(通过Getheaders 或者Getdata)

6、Getdata消息

消息ID:NetMsgType::GETDATA

重要字段:

还是一个inv消息里列表

作用:

Inv消息对方告诉我:我有这些数据,你来取吧

收到Inv消息后后发送GetData消息回答对方:我要你有的数据中的这些,你给我吧

对方收到GetData消息开始给我发送数据如Tx消息,block消息

7、Tx消息

消息ID: NetMsgType::TX

重要字段:

Tx代表交易数据

作用:

发送/接受 传输的tx数据,主要是响应GetData消息

8、Block消息

消息ID:NetMsgType::TX

重要字段:

Block 代表区块数据

作用:

发送/接受 传输的block数据,主要是响应GetData消息

9、Merkleblock消息

一种节省block传输带宽的机制,由于原理相对比较复杂,不是本篇重点后续介绍,在这里可以理解为和Block消息功能一样,只是数据量更小。

10、Notfound消息

没有找到消息,表示你要的数据我没有,不过多介绍,回复GetData

交互过程

最初版本的比特别数据传输过程如下图

之后由于block比较占用带宽等原因修改成了先要区块头,确定没有了这个区块头再要区块。过程基本类似,这里不再赘述。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码神联盟

短信 | 教你使用 JAVA实现 【短信发送】 功能

1534
来自专栏SDNLAB

ONOS:从DeviceSubsystem看ONOS子系统设计(1):Core层基本功能架构

言 ONOS的内核是由诸多遵循同一架构设计的子系统组成的,Device Subsystem设备子系统就是其中重要的一员。笔者将借助其源码讲解ONOSCore层的...

3528
来自专栏Horizon757

造了四个轮子之后,我们上路跑一跑

秋明山车神之所以开得快,不单是因为技术好,车神老爸对车子的调优也很重要,比如给车配了好轮子……编不下去了 -_-

540
来自专栏iOS Developer

Bison教你3分钟集成支付宝好友分享

1242
来自专栏Android开发实战

Atlas-组件化框架 入门

ps:如果您看过atlas的官方介绍,本片文章可以略过,期待我们追溯源码的过程中有你的参与

914
来自专栏前端进阶之路

带你五步学会Vue SSR

SSR大家肯定都不陌生,通过服务端渲染,可以优化SEO抓取,提升首页加载速度等,我在学习SSR的时候,看过很多文章,有些对我有很大的启发作用,有些就只是照搬官网...

874
来自专栏phodal

前端写一个月的原生 Android 是怎样一种体验?

一个前端程序员的一个月原生 Android 开发体验。自从我写了 Android 应用后,上知乎的时间变得更长了。 自从我写了 Android 应用后,上知乎的...

20410
来自专栏CSDN技术头条

竟然用了30多个开源软件,支付宝也是厉害了

在支付宝中的“设置”选项中,有一项为“关于”,在版权信息中显示了所有使用的开源软件信息。不看不知道,一看吓一跳,原来支付宝居然使用了30多个开源软件,

1143
来自专栏挖坑填坑

Asp.net+Vue2构建简单记账WebApp之四(vue.js构建记账主页面)

683
来自专栏前端萌媛的成长之路

spa

1615

扫码关注云+社区