一种联盟链非全连接P2P网络的收敛方法及P2P节点与流程

文档序号:24399758发布日期:2021-03-26 13:47阅读:170来源:国知局
一种联盟链非全连接P2P网络的收敛方法及P2P节点与流程
一种联盟链非全连接p2p网络的收敛方法及p2p节点
技术领域
1.本发明属于计算机系统领域,尤其涉及一种联盟链非全连接p2p网络的收敛方法及p2p节点。


背景技术:

2.区块链通过点对点p2p(peer

to

peer)网络进行通信,p2p网络是一种分布式网络,网络中各节点之间不需要通过服务器进行中转,可以直接互相传输数据。一般情况下,区块链联盟链中各节点都是两两相互连通,构建全连接的p2p网络,但全连接的网络中一旦节点数量上升,网络复杂度大,难以部署。为简化网络复杂度,需要构建非全连接的p2p网络,非直接连接的节点之间通过其他节点进行数据中转,被选择作为数据中转的节点称为中继节点。
3.非全连接p2p网络中,消息的收敛方法是非常重要的,收敛方法的性能直接影响源节点到目标节点之间的数据传输,进而影响整个p2p网络的负载。因此一般来说,应该尽可能减少消息从源节点到目标节点传输过程中的转发次数,即计算最短路由。但是采用这种最短路径算法,为保证中继节点的可用性,将会导致大量探测报文,会极大加重网络负载。


技术实现要素:

4.本发明的目的在于针对现有区块链技术的不足,提供一种联盟链非全连接p2p网络的收敛方法及p2p节点,可以让消息从源节点到目标节点快速收敛,且保证消息的可靠性。
5.为达到上述目的,本发明的技术方案具体是这样实现的:
6.根据本说明书的第一方面,提供一种联盟链非全连接p2p网络的收敛方法,该方法包括:
7.源节点根据自身邻居表计算消息从自身至目标节点是否需要中继转发;
8.源节点从零开始生成一个累加的序列号;
9.源节点选择邻居表中所有节点作为中继节点,并将其邻居表、序列号以及目标节点放入消息体中,向中继节点广播消息;
10.收到消息的节点根据消息体中内容判断该消息是否需要转发:
11.如果收到消息的节点非目标节点,则从自身邻居表中选择未发送过该消息的节点,将节点添加至该消息的邻居表中,并向这些节点广播消息;
12.如果收到消息的节点是目标节点,则对源节点维护一个lru,根据消息序列号进行过滤,不接收重复消息。
13.进一步地,所述邻居表的建立方法为:
14.源节点与直接连接节点建立网络连接后,相互交换信息,根据散列函数生成唯一的身份标识符,将所有身份标识符加入邻居表中;
15.若一个消息的目标节点标识符不在邻居表中,则该消息需要发送至中继节点进行
转发。
16.进一步地,所述邻居表建立后,通过定期发送心跳消息探测邻居表中的邻居节点是否失效,将失效的邻居节点从所述邻居表中删除。
17.进一步地,所述源节点生成的序列号是自增长的,具有唯一性,且序列号每增长s,会对序列号进行持久化,防止源节点宕机后序列号重复。
18.进一步地,所述消息体中包含源节点的邻居表、唯一序列号以及目标节点,源节点选择邻居表中所有节点作为中继节点,向其广播消息。
19.进一步地,所述中继节点在收到消息后,根据消息体中的目标节点判断该消息是否需要转发,若需要转发则从自身邻居表中选出未包含于消息体邻居表的节点,将消息向这些节点转发。
20.进一步地,如果收到消息的节点非目标节点,也可以先判断目标节点是否在自身邻居表中,若在则直接发送至目标节点,不再继续中转。
21.进一步地,所述lru为一定长的键值对缓存,以消息序列号为键,按照接收顺序存储,存满后按照先进先出原则删除数据,节点需为所有非邻居节点各维护一个lru。
22.根据本说明书的第二方面,提供一种p2p节点,该节点包括:
23.邻居表维护模块,用于维护自身邻居表;
24.消息序列号维护模块,用于生成唯一的自增长序列号,并定期进行持久化;
25.消息中继模块,与所述邻居表维护模块和消息序列号维护模块相连,用于生成,发送,接收中继消息;
26.其中,发送中继消息至目标节点时,消息中继模块先从邻居表维护模块获取邻居表,判断目标节点是否需要中继发送,若是,则从消息序列号维护模块获取中继消息序列号,选择邻居表中所有节点作为中继节点,并将邻居表、序列号以及目标节点放入消息体中,向中继节点广播消息;
27.接收中继消息时,消息中继模块从邻居表维护模块获取邻居表,从邻居表中选择该中继消息未到达过的节点,将这些节点添加至该消息的邻居表中,并向这些节点广播消息;
28.lru维护模块,与所述邻居表维护模块和消息中继模块相连,用于对所有非邻居节点各维护一个lru,保存来自各非邻居节点的最新的若干条中继消息序列号。
29.进一步地,所述消息中继模块接收到中继消息,判断消息的目标节点是自身时,则将该中继消息的序列号和源节点交给lru维护模块,若lru维护模块判断该中继消息是新消息则保存序列号至lru,若非新消息则丢弃。
30.由上述的技术方案可见,本发明的这种联盟链非全连接p2p网络的收敛方法及p2p节点,通过源节点将所有邻居表中节点作为中继节点,中继节点尽可能减少发送冗余消息,采用逐步逼近的收敛方法,通过多次转发,让消息通过多条路由达到目标节点,保证消息可靠性,且目标节点只接受最先达到的消息,避免冗余消息的影响。
31.因此本发明设计的这种收敛性较好的逐步逼近的收敛方法,可以自动生成合适的消息路由路径,且有部分节点宕机时也能保证可用性,冗余消息少,易扩展,可用性好。
附图说明
32.图1是本发明的联盟链非全连接p2p网络的收敛方法流程图;
33.图2是本发明的p2p节点结构示意图。
具体实施方式
34.下面结合附图和具体实施例对本发明作进一步详细说明,应当理解,此处描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。
35.本发明提供一种联盟链非全连接p2p网络的收敛方法。
36.参照图1,图1是本发明联盟链非全连接p2p网络的收敛方法流程图。
37.在本实施例中,源节点a将消息发送至目标节点c,节点a与c不是相邻节点,源节点a生成一个唯一序列号,将序列号、自身邻居表以及目标节点放入消息体中,将消息发送至邻居节点进行中转,节点b收到消息后,根据消息体中内容判断自身是否是目标节点,若非目标节点,则从自身邻居表中选择未发送过该消息的节点,将节点添加至该消息的邻居表中,并向这些节点广播消息,直到目标节点c收到消息。
38.步骤101,源节点根据自身邻居表计算消息从自身至目标节点是否需要中继转发;
39.步骤102,源节点从零开始生成一个累加的序列号;
40.步骤103,源节点选择邻居表中所有节点作为中继节点,并将其邻居表、序列号以及目标节点放入消息体中,向中继节点广播消息;
41.步骤104,收到消息的节点根据消息体中内容判断该消息是否需要转发:
42.如果收到消息的节点非目标节点,则从自身邻居表中选择未发送过该消息的节点,将节点添加至该消息的邻居表中,并向这些节点广播消息;
43.如果收到消息的节点是目标节点,则对源节点维护一个lru,根据消息序列号进行过滤,不接收重复消息。
44.其中,步骤104中中继节点的转发规则,也可以先判断目标节点是否在自身邻居表中,若在则直接发送至目标节点,不再继续中转。
45.本发明提供一种p2p节点。
46.参照图2,图2是本发明p2p节点结构示意图。
47.在本实施例中,p2p节点结构包括:
48.邻居表维护模块201,用于维护自身邻居表;
49.消息序列号维护模块202,用于生成唯一的自增长的序列号,并定期进行持久化;
50.消息中继模块203,与所述邻居表维护模块和消息序列号维护模块相连,用于生成,发送,接收中继消息;
51.其中,发送中继消息至目标节点时,消息中继模块203先从邻居表维护模块201获取邻居表,判断目标节点是否需要中继发送,若是,则从消息序列号维护模块202获取中继消息序列号,选择邻居表中所有节点作为中继节点,并将邻居表、序列号以及目标节点放入消息体中,向中继节点广播消息;
52.接收中继消息时,消息中继模块203从邻居表维护模块201获取邻居表,从邻居表中选择该中继消息未到达过的节点,将这些节点添加至该消息的邻居表中,并向这些节点广播消息;
53.lru维护模块204,与所述邻居表维护模块和消息中继模块相连,用于对所有非邻居节点各维护一个lru,保存来自各非邻居节点的最新的若干条中继消息序列号。
54.其中,消息中继模块203接收到中继消息,判断消息的目标节点是自身时,则将该中继消息的序列号和源节点交给lru维护模块204,若lru维护模块204判断该中继消息是新消息则保存序列号至lru,若非新消息则丢弃。
55.由上述实施例可见,本发明的这种联盟链非全连接p2p网络的收敛方法及p2p节点,通过源节点将所有邻居表中节点作为中继节点,中继节点尽可能减少发送冗余消息,采用逐步逼近的收敛方法,通过多次转发,让消息通过多条路由达到目标节点,保证消息可靠性,且目标节点只接受最先达到的消息,避免冗余消息的影响。
56.本发明设计的这种收敛性较好的逐步逼近的收敛方法,可以自动生成合适的消息路由路径,且有部分节点宕机时也能保证可用性,冗余消息少,易扩展,可用性好。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1