[0005] 本发明提供了一种基于区块链overlay网络的路由信息交互方法,以解决现有技术中存在的至少一个上述技术问题。
[0006] 为解决上述技术问题,本发明提供的一种基于区块链overlay网络的路由信息交互方法,用于区块链上网络节点之间非广播性信息的交互,其包括:
[0007] S1:区块链上每个所述网络节点均保存并维护一个路由信息表(非广播信息基于路由信息表在区块链overlay网络中传播);
[0008] S2:所述路由信息表包括若干条路由记录;
[0009] 每条所述路由记录包括:可达地址、下一跳地址、时延和超时时间等多个字段;
[0010] 若干条所述路由记录包括:关于网络节点自身的本机路由记录、以及关于该网络节点的信息可到达的可达节点的可达路由记录;
[0011] 21)本机路由记录的可达地址为网络节点自身的本机路由地址,本机路由地址对应的下一跳地址为空(或为零),对应的时延和超时时间为0ms;
[0012] 22)可达路由记录的可达地址为可达节点的可达路由地址;
[0013] 自本机路由地址到可达路由地址的路由线路上,可达节点的下一跳地址不为空;
[0014] 时延为网络节点到可达节点的路由过程的时间延迟;可达路由记录中的时延和超时时间大于0ms;
[0015] S3:区块链上网络节点之间通过发送非广播性信息进行信息交互,发送非广播性信息的网络节点为发送节点,非广播性信息的最终送达的目的节点(目的地)为指定节点;
[0016] S4:当发送节点向指定节点发送非广播性信息时:
[0017] 41)如果指定节点为发送节点所述路由信息表上的一个可达节点;
[0018] 如果所述发送节点的路由信息表仅包括一条关于该指定节点的可达路由记录,则发送节点将非广播性信息发送到该可达路由记录中登记的下一跳地址,由该下一跳地址的下一跳节点将非广播性信息发送给指定节点;
[0019] 如果所述发送节点的路由信息表包括若干条关于该指定节点的可达路由记录,发送节点选择时延最小(即延迟最短)的一个可达路由记录,将非广播性信息发送到该时延最短的可达路由记录中登记的下一跳地址,由该下一跳地址的下一跳节点将非广播性信息发送给指定节点;
[0020] 42)如果指定节点不属于发送节点的可达节点,即发送节点的路由信息表上不包括关于该指定节点的可达路由记录,则发送节点将非广播性信息发送到所有与其直联的网络节点;
[0021] S5:收到所述非广播性信息的节点为接收节点,接收节点读取非广播性信息并从中解析出指定节点的地址信息;
[0022] 51)如果接收节点在自己的路由信息表中查找到与指定节点地址相同的可达地址,且该可达地址对应的下一跳地址为空,则该接收节点为指定节点,非广播性信息不再传递,该接收节点解析并读取非广播性信息中的发送节点地址信息以及消息负载;
[0023] 52)如果接收节点在自己的路由信息表中查找到与指定节点地址相同的可达地址,而该可达地址对应的下一跳地址不为空,则该接收节点将所述非广播性信息传递给可达地址对应的下一跳地址,由该下一跳地址的下一跳节点将非广播性信息发送给指定节点;
[0024] 53)如果接收节点在自己的路由信息表中未查询到与指定节点地址相同的可达地址,则接收节点将非广播性信息发送到所有与其直联的节点;
[0025] S6:重复步骤S5中的52)和/或53),直到步骤51)发生为止。
[0026] 进一步地,所述非广播性信息至少包括:指定(或目的)节点的地址、发送节点的地址、消息类型、消息长度(Msglen,包括消息头)、消息序列(Sequence)以及消息负载(即消息内容)等多个字段。
[0027] 所述非广播性信息具有标准化格式,例如,字段格式参照下表1:
[0028] 表1
[0029]
[0030] 其中,消息类型可将非广播性信息分为:
[0031] 1:路由请求类
[0032] 2:路由相应类
[0033] 3:路由改变通知类
[0034] 4~64:预留分类
[0035] 65:应用层消息类,等等。
[0036] 进一步地,所述接收节点自不同路径收到多条所述非广播性信息,如果多条非广播性信息的所述消息序列相同,则认为多条非广播性信息为相同消息,接收节点只处理第一个被接收的非广播性信息,删除其他后接收相同的非广播性信息。
[0037] 基于区块链overlay网络的路由信息交互方法,其非广播性信息是被封装在区块链的overlay网络(即业务叠加网络)之上。其中优选地,所述非广播性信息被封装在TCP或者SSL之上。当然本申请中基于区块链overlay网络的路由信息交互方法不限于上述的协议,只要能够实现overlay网络技术的其他协议也在本申请权利涵盖之下。
[0038] 具体而言,非广播性信息作为TCP或者SSL的负载发送到相邻网络节点的。TCP/SSL的负载现有技术,且具有标准格式,按照TCP为例包括:
[0039] 以太头(14字节,目的MAC,源MAC,ethernettype:0x0800(ipv4));
[0040] IP头(一般是20字节):目的IP,源IP地址,IP头长度,IP报文长度;
[0041] TCP头(一半20个字节):源端口号,目的端口号,发送序列号,ack序列号,flags,发送窗口大小等;
[0042] TCP头之后就是TCP的负载,该文档中的报文就是放在TCP头之后。
[0043] 进一步地,所述网络节点在其初始化时建立一条到达自己本身的路由信息,根据该路由信息在所述路由信息表上记录所述本机路由地址。
[0044] 进一步地,还包括网络节点之间交换路由信息的步骤:
[0045] S7:新加入区块链网络中的新节点(全功能节点或者钱包)至少与一个区块链中的在先加入的全功能节点建立TCP/SSL双向连接,新节点与在先加入的全功能节点之间彼此向对方请求路由信息,即新节点与先加入的全功能节点之间共享彼此的路由信息表,将两者的路由信息表中的信息融合后并分别保存;
[0046] 和/或,相邻两个网络节点之间定期共享和同步路由信息,最终每个网络节点得到区块链网络上的所有路由信息。
[0047] 新节点向在先加入的全功能节点请求路由信息,在先加入的全功能节点向新节点请求路由信息。
[0048] 其中路由信息包括但不限于路由记录中的相关信息。
[0049] 进一步地,两个网络节点之间互相请求并共享路由信息,两个网络节点分为:发出请求路由信息的请求方,以及向请求方发出回应信息和/或共享自己路由信息表的回复方;
[0050] 其中,请求方计算发出请求路由信息和收到回应信息的时间差,并将该时间差作为请求方和回复方之间的两节点时延。
[0051] 进一步地,所述请求方将接收的路由信息融合并记录在自己的路由信息表中,其中遵循融合规则如下:
[0052] 1)如果收到的一条回复方路由记录为新地址信息,和/或,而请求方路由记录中的下一跳地址不同于回复方的本地地址,则请求方在其路由信息表中增加一条新可达路由记录;
[0053] 新可达路由记录的可达地址为回复方路由记录中的可达地址;
[0054] 新可达路由记录中下一跳地址为回复方的本地地址;
[0055] 新可达路由记录中时延为所述回复方路由记录中的时延与所述两节点时延(请求方和回复方两个节点间的时延)之和;
[0056] 新可达路由记录中超时时间更新为设定时间;
[0057] 本发明方法中,只要收到其他的节点发送过来的路由信息,则认为该条路由信息为有效状态,即依然在被使用中,那么请求方(接收端)则只需更新这个路由信息的超时时间为设定时间,例如为5-10分钟。
[0058] 如果在使用中,长时间收不到这条路由的反馈信息,就说明这条路由已经失效,或已经没人用了,就会删掉该条路由信息的路由记录。
[0059] 按照10分钟这个超时时间为例举个例子:
[0060] 1.1.增加一条路由记录(到达B目的的下一跳是A)的时候把超时时间更新为10分钟之后(当前系统启动时间+10分钟)
[0061] 1.2.如果在10分钟之内没有收到该条路由信息(从A到达B的路由信息),这条路由信息就会被从路由信息表中删掉;
[0062] 1.3.如果在10分钟内收到了该路由的信息,则把超时时间再设置为10分钟之后(当前系统启动时间+10分钟)。
[0063] 2)如果收到的一条回复方路由记录的可达地址与请求方的路由信息表中已有记录的可达地址相同,且请求方的路由记录的下一跳地址为回复方的本地地址,则请求方更新所述已有记录的时延和超时时间;
[0064] 已有记录的新时延为所述回复方路由记录中的时延与所述两节点时延(请求方和回复方两个节点间的时延)之和;
[0065] 已有记录的新超时时间更新为设定时间(例如5~10分钟)。
[0066] 即,对于同一个目的地址来说,请求方的本地有该目的地址(指定节点地址)的下一跳信息,也可能收到相邻节点发送过来的该目的地址的路由信息,但下一跳和本地存的路由信息表中下一跳可能不一样,这种情况下,需要在本地新建一条到这个目的地址(指定节点)的路由信息。这样在该节点上,就会出现到同一目的的两条路由信息。
[0067] 进一步地,所述网络节点之间共享并同步更新彼此存在的路由信息表中的路由记录(路由信息项);
[0068] 网络节点自动删除在设定时段(例如30-60分钟)内无法同步更新的路由记录。
[0069] 例如,对于长时间没有得到更新的表项,通过超时机制来删除,默认的超时时间为30分钟。
[0070] 进一步地,直联的两个所述网络节点之间定期向彼此请求路由信息,其中,所述请求方遵循所述融合规则将接收的路由信息融合并记录在自己的路由信息表中。
[0071] 其中,请求方向回复方发出请求信息时,可以设定超时时间为10-60分钟,如果超时,则认为对应的回复方已经断开连接,请求方在路由信息表中删除与回复方地址相关的路由记录。
[0072] 进一步地,当网络节点保存的路由信息发生改变时,该网络节点主动向与自己直联的网络节点请求以及共享路由信息。
[0073] 进一步地,所述网络节点为全功能节点和轻量级节点;
[0074] 所述全功能节点为保存了整个区块链网络中全部交易数据,且负责校验每一笔新交易信息的节点;所述轻量节点为区块链中不需要存储交易数据的节点。
[0075] 其中,所述全功能节点通过P2P网络连接组成一个mesh网络;每个全功能节点不需要通过其它节点就可以直接加入到区块链的节点。而轻量节点,又称作SPV(simple payment verification)节点,是区块链网络中需要通过连接一个或者多个全功能节点才可加入到区块链网络中的节点。
[0076] 轻量节点处在整个网络的边缘,轻量节点不需要存储区块链网络中的交易数据。例如,所述轻量节点可以是区块链上的钱包模块节点,钱包模块节点为基于区块链的具有钱包功能的程序应用,而区块链网络中的全功能节点通常也包含了钱包的功能。钱包模块节点可以通过把自己的地址分享出去来接收其它钱包的汇款。而钱包地址也是接收转账汇款之外信息的标识。
[0077] 进一步地,路由的所述超时时间为20-60分钟。
[0078] 进一步地,如果所述网络节点在超时时间内无法收到连接某个所述可达节点或者所述下一跳节点的路由的更新信息,则认为该可达节点或者下一跳节点不可达,则从所述路由信息表中删除该可达节点或者下一跳节点的路由信息。
[0079] 超时时间为基于系统启动时间设定,修改系统时间不会引起路由信息表项的提前或者延迟删除。
[0080] 采用上述技术方案,本发明具有如下有益效果:
[0081] 本发明提供的一种基于区块链overlay网络的路由信息交互方法,可用于区块链中的两个或多个节点之间的通信,如基于区块链overlay网络之上的社交,可有效避免现有的广播式信息所带来的效率低下、资源浪费的问题。