主页 > imtoken冷钱包官方版 > 一种基于多线程流水线技术的比特币节点检测方法及过程

一种基于多线程流水线技术的比特币节点检测方法及过程

imtoken冷钱包官方版 2023-08-25 05:09:33

一种基于多线程管道技术的比特币节点探测方法与流程

1.本发明属于区块链技术领域,具体涉及一种基于多线程流水线技术的比特币节点检测方法。

背景技术:

2、比特币在全球蓬勃发展,成为交易支付、投资理财、资金流动的重要手段。 比特币网络层采用p2p架构。 没有中央组织和信任中心。 所有网络节点相互平等,共同提供网络服务。 比特币节点的检测对于加强比特币网络的研究和监管具有重要价值。

3. 近年来,许多研究人员对比特币节点进行了检测研究。 2013 年,琼等人。 在 3 个月内收集了 872,000 个比特币节点地址。 2016 年,Fadhil 等人在一周内收集了近 32 万个节点地址。 2018 年,sehyun park 等人在 37 天内收集了超过 100 万个节点地址。 以上研究均采用了伪造比特币客户端,与其他节点建立通信,不断获取新的节点地址的方法。

4、多线程技术是通过计算机软件和硬件实现多个相同程序(或函数)并发执行的技术,可以显着提高单机程序的运行效率。 管道是一个双向通信模块,具有独立、灵活、可插拔的特点。 可以在程序中随时添加或删除,可以提高网络通信中的并行数据处理能力。 本发明将多线程流水线技术应用于比特币节点检测,大大提高了单机检测程序的运行效率,实现了比特币节点的高效收集和存储。

5.现有方法的主要缺点是检测效率低。 现有方法的工作原理是:伪造比特币客户端,进入网络后与其他网络节点建立连接,不断接收其他节点发送的ping、version、addr、inv等交互消息,提取节点地址从中得到的信息。 同时,不断尝试与新的节点建立连接,获取更多的节点地址,如此循环往复,完成地址信息的积累。 现有方法主要依靠长时间运行的程序来完成节点地址的积累。 比如3个月只收集了87.2万个节点地址,37天只收集了100万个节点地址。 整体效率比较低。

技术实现要素:

6、有鉴于此,本发明提供了一种基于多线程流水线技术的比特币节点检测方法,可以大大提高单机检测程序的运行效率,实现比特币节点的高效采集和存储。

7.实现本发明的技术方案如下:

8、一种基于多线程流水线技术的比特币节点检测方法,包括以下步骤:

9. 第一步,检测程序从dnsseed获取当前稳定运行的比特币网络的活跃节点地址;

10. 步骤 2. 设计一个队列来存储所有比特币节点地址。 检测程序获得新地址后,将不重复的地址依次存放在队列尾部。 这被视为一个“储蓄”过程; 而读队列头地址的检测则视为“消费”的过程,将消费地址的布尔值标记为“1”;

比特币怎么比特币钱包_比特币全节点_比特币价值比特币最新

11、第三步:检测程序模拟比特币客户端,从队列中“消费”节点地址,同时尝试与目标节点建立并行多线程tcp连接;

12、每个tcp连接对应一个独立的“管道”,报文的编解码工作在“管道”中完成,目标

节点之间进行握手交互; 发送消息时,管道调用编码模块,使用socket技术将消息发送到设定的ip和端口; 管道接收到消息后,调用解码模块根据格式对不同的消息进行分类解码;

13、第四步:检测程序与目标节点建立连接后,向目标节点发送getaddr消息,请求对方返回新节点的地址; 检测程序收到返回的addr报文后,在各个独立的pipeline中完成解码,然后提取步骤2中尝试入队的地址,不重复的地址成功入队,得到重复的地址被丢弃;

14、第5步,重复第2步到第4步,直到队列中没有新的地址存入(全网所有比特币地址都存入完毕); 此时,判断队列中所有已存在的地址是否都被“消耗”(Boolean值为1),如果地址已被完全消耗,则检测结束; 如果地址没有被完全消费,重复步骤2中的“消费”操作。

15、进一步,使用dns lookup的方法从dnsseed获取当前稳定运行的比特币网络的活跃节点地址。

16.进一步,队列具有以下特点: 1)先进先出; 2)所有队列元素不重复,重复输入ip地址将丢弃该队列; 3)元素标记功能,对于已经输出的地址,队列将其布尔值设置为“1”来标记。

17、有益效果:

18、本发明将“储蓄-消费”型地址管理技术和高效的多线程流水线技术应用于比特币节点检测,大大提高了检测效率。 在某实验中,完成一轮检测仅用时1.5小时,共收集到414万个节点地址,检测效率远高于以往方法。 本发明取得了良好的效果,具体表现为:

19.1. “储蓄-消费”型地址管理技术:通过合理设置队列数据结构,丢弃每次返回的重复数据,巧妙设计使用布尔值标记元素的“消费”机制,避免程序资源浪费对同一个节点进行重复检测,大大提高了检测效率。

20.2. 高效的多线程管道技术:采用高效的并行通信框架,可同时建立多达数千个线程的tcp连接,与数千个目标节点建立通信交互。 比特币协议编码和解码在独立的流水线中完成,简化了比特币消息的分析和处理,避免了多达数千个并行通信中的请求冲突和数据拥塞,保证了程序的高效执行,提高了程序探测效率。

图纸说明

21.图1是本发明的检测方法的流程图。

比特币价值比特币最新_比特币怎么比特币钱包_比特币全节点

22、图2为本发明多线程流水线架构模型示意图。

23、图3为本发明检测系统的结构示意图。

详细说明

24.下面结合附图和实施例详细描述本发明。

25、本发明提出了一种基于多线程流水线技术的比特币节点检测方法,设计了高效的多线程程序运行框架,开发了具有比特币协议编解码功能的可插拔流水线,并提出了“存储-消费”式的节点地址管理技术,大大提高程序检测效率。 本发明解决的主要技术问题是:

26.1. “储蓄-消费”式地址管理技术

27.2. 高效的多线程流水线技术

28、实现本发明的基本思路是从种子节点dnsseed获取初始地址,依次与这些地址建立连接,通过getaddr-addr机制获取大量地址比特币全节点,然后使用multi -线程框架尝试同时与多达数千个地址进行通信

节点建立连接,使用getaddr-addr机制获取更多的新地址。 如此循环往复,可以在短时间内获取到网络空间中几乎所有的节点地址。

29、如图1所示,本发明主要分为以下5个步骤:

30. Step 1. 获取初始地址

31、探测器从dnsseed获取初始节点地址。 dnsseed 是由比特币社区维护并硬编码到客户端软件中的比特币网络种子节点。 它们可以自动扫描网络中活跃和稳定的节点,将IP地址返回给请求者,并动态更新。 当前的比特币dnsseed列表如表1所示。

32. 表1 dnsseed列表

比特币怎么比特币钱包_比特币价值比特币最新_比特币全节点

域名ip1seed.bitcoin.sipa.be52.195.14.1552dnsseed.bluematt.me81.177.196.1223dnsseed.bitcoin.dashjr.org34.64.101.44seed.bitcoinstats.com83.76.247.255seed.bitcoin.jonasschnelli23.9.9.997.185seed.bitcoin.jonasschnelli23.9.9.997.18 org54.92.14.235

[0034]

使用dns lookup的方式,可以从dnsseed获取当前稳定运行的比特币网络活跃节点的ip地址,开始网络检测。

[0035]

步骤 2. 地址管理

[0036]

高效的比特币节点地址管理机制是提高检测效率的基础。 本发明设计了一个队列来存储所有的比特币节点地址。 队列具有以下特点: 1)先进先出。 2)所有队列元素不重复。 对于重复输入的ip地址,队列将被丢弃。 3) 元素标记功能。 对于已经导出的地址,队列将其布尔值设置为“1”以进行标记。

[0037]

检测程序获取到新地址后,将不重复的地址存入队列尾部,可视为一个“存”的过程; 而读取队列头部的地址进行检测,可以看成是一个“消费”的过程。 消费后地址的布尔值标记为“1”。 当队列中的所有地址都被“消耗”后,探测结束。

[0038]

我们将上述地址管理方式称为“储蓄-消费”地址管理机制。 该机制实现了对节点地址的有效管理,避免了对同一节点的重复检测,大大提高了检测效率。

[0039]

第三步,建立多线程连接

比特币怎么比特币钱包_比特币价值比特币最新_比特币全节点

[0040]

检测程序模拟比特币客户端,从队列中“消费”节点地址,同时尝试与目标节点建立并行多线程tcp连接。

[0041]

每个tcp连接对应一个独立的“管道”,在管道中完成报文编解码工作,并进行与目标节点的握手交互。 发送消息时,管道调用编码模块,使用socket技术将消息发送到设定的ip和端口。 当接收到消息时,管道调用解码模块将不同的消息按格式分类解码。 流水线机制的引用减少了计算机解析协议时的资源消耗,避免了检测程序的阻塞。 多线程流水线模型如下图2所示:

[0042]

本发明的多线程通信框架可以达到几千并发比特币全节点,大大提高了单机客户端程序与比特币网络节点的交互速度。

[0043]

Step 4. 接收返回信息

[0044]

检测程序与目标节点建立连接后,向目标节点发送getaddr消息,请求对方返回一个新的

节点地址。 检测程序收到返回的addr报文后,在各个独立的pipeline中完成解码,然后尝试将提取到的地址存入步骤2的队列中。不重复的地址可以成功存入队列,重复的地址是丢弃。

[0045]

Step 5. 判断地址是否被完全消费

比特币价值比特币最新_比特币怎么比特币钱包_比特币全节点

[0046]

重复步骤2到4大约几个小时后,队列中已经没有新的地址存入了(全网的比特币地址都存入了)。 此时判断队列中所有存在的地址是否已经“消耗”完毕(布尔值为1)。 如果所有地址都被消费完,检测结束; 如果地址没有被完全消费,重复步骤2中的“消费”操作。

[0047]

本发明的系统设计图如下图3所示。 主程序是整个检测程序的核心部分,负责地址管理、多线程驱动、管道调用等重要功能。 主程序批量调用ip数据库中的节点地址,通过多线程框架建立多个并行的tcp连接,每建立一个连接就建立一个“管道”。 这样,程序将创建 n 个管道。 所有消息都由路由器发送到外部 Internet。

[0048]

综上所述,以上所述仅为本发明的优选实施例而已,并非用于限定本发明的保护范围。 凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

技术特点:

1、一种基于多线程流水线技术的比特币节点检测方法,其特征在于包括以下步骤: 步骤1、检测程序从dnsseed中获取当前稳定运行的比特币网络的活跃节点地址; step 2,专为存储所有比特币节点地址的队列而设计。 检测程序获取到新地址后,将不重复的地址存放在队列尾部。 这被视为一个“储蓄”过程; 消费”过程,将消费地址的布尔值标记为“1”; Step 3,检测程序模拟比特币客户端,从队列中“消费”节点地址,尝试建立并行多线程tcp连接同时与目标节点;每一个tcp连接对应一个独立的“管道”,在管道中完成消息的编解码,与目标节点进行握手交互;发送消息时,管道调用encoding模块,使用socket技术将报文发送到设定的ip和端口;pipeline接收到报文时调用解码模块,根据格式对不同的报文进行分类解码; step 4,检测程序建立连接后与目标节点,向目标节点发送getaddr消息,请求对方返回新的节点地址;检测程序收到返回的addr消息后, 在每个独立的流水线中完成译码,然后尝试将提取出的地址存入步骤2的队列中,不重复的地址成功存入队列,重复的地址丢弃; 步骤5,重复步骤2~步骤4,直到队列中没有新的地址存入; 这个时候判断队列中所有存在的地址是否都被“消耗”了。 如果所有地址都被消耗掉,则检测结束; 2.如权利要求1所述的一种基于多线程流水线技术的比特币节点检测方法,其特征在于,采用dns查找方法,从dnsseed获取当前稳定运行的比特币网络活跃节点地址3.如权利要求1所述的一种基于多线程流水线技术的比特币节点检测方法,其特征在于,所述队列具有以下特征:1)先进先出;2)所有队列元素做不重复,对于重复输入的ip地址会被队列丢弃; 3)元素标记功能,对于已经输出的地址,队列会将其布尔值设置为“1”进行标记。

技术概要

本发明公开了一种基于多线程流水线技术的比特币节点检测方法,设计了高效的多线程程序运行框架,开发了具有比特币协议编解码功能的可插拔流水线,提出了“存储-消费”传统节点地址管理技术提高了程序检测的效率。 大大提高了程序检测效率。 大大提高了程序检测效率。

技术研发人员:李瑞光 徐大伟 吴福东 朱家伟 高家奇 马路 严寒兵 朱烈煌

技术保护用户:国家计算机网络与信息安全管理中心

技术研发日:2022.04.12

技术公告日期:2022/10/10