专利摘要
本发明提供了一种快速的网络数据通信方法,所述网络包括两个以上的节点和两个以上的数据路由器,一种类型的数据包括两个以上的数据块且由一个数据名称唯一定义,每个数据块由一个数据块ID唯一标识;数据消费者为有权限获取一种类型的数据的节点,数据提供者为有权提供一种类型的数据的节点。数据消费者通过本发明所提供的数据通信方法能够从距离最近的数据提供者以单播方式获取服务数据,缩短了获取服务数据的延迟和代价,提高了服务质量,本发明可应用于道路路况监测、环境监测等领域,具有广泛的应用前景。
权利要求
1.一种快速的网络数据通信方法,其特征在于,所述网络包括两个以上的节点和两个以上的数据路由器,一种类型的数据包括两个以上的数据块且由一个数据名称唯一定义,每个数据块由一个数据块ID唯一标识;数据消费者为有权限获取一种类型的数据的节点,数据提供者为有权提供一种类型的数据的节点;节点不具有路由转发功能,数据路由器具有路由转发功能;
每种消息结构包括五个部分:数据名称域、数据块ID集合、消息类型域,、序列号以及负载;
消息类型如下表所示:
数据路由器维护一个转发表,一个转发表项由接口域、数据名称域以及数据块ID集合构成,其中,接口域值指向到达数据提供者的下一跳,数据名称域值为目标数据的数据名称;数据块ID集合域值为构成目标数据的部分或者全部数据块ID的集合;
在数据C1由数据名称N1定义,数据提供者P1产生了数据C1的数据块,所述数据块的数据块ID集合为S1的情况下,如果网络链路稳定,数据提供者P1则执行下述过程建立转发表:
步骤101:开始;
步骤102:数据提供者P1构建数据发布消息,该数据发布消息的数据名称域值为N1,消息类型为1,数据块ID集合为S1,序列号为0,负载为空,数据提供者P1通过与本地数据路由器相连的接口发送该数据发布消息;
步骤103:数据路由器从自己的接口j接收到数据发布消息,查看转发表判断是否存在数据名称域值为N1,接口域为j,数据块ID集合域值为S1的转发表项,如果存在,执行步骤105,否则执行步骤104;
步骤104:接收到数据发布消息的数据路由器创建一个转发表项,该转发表项的数据名称域值为N1,接口域值为j,数据块ID集合域值为S1,数据路由器从每个符合条件1和条件2的接口转发该数据发布消息,执行步骤106;
条件1:该接口与数据路由器相连;
条件2:从该接口没有接收到数据发布消息;
步骤105:接收到数据发布消息的数据路由器放弃接收到的数据发布消息,执行步骤106;
步骤106:重复步骤103~105直到网络内所有的数据路由器都接收到数据提供者P1发送的数据发布消息且建立了数据名称域值为N1、数据块ID集合域值为S1的转发表项为止;
步骤107:结束;
数据提供者定期执行步骤101~107建立或者更新数据路由器的转发表;
如果网络链路不稳定,数据路由器、数据消费者和数据提供者通过保存四元组<发送的消息,发送消息的接口,消息中的序列号,确认定时器>来确保消息的传输成功率;确认定时器的初始值预先设定,然后根据时钟衰减,如果时钟衰减到0,则定时器过期。
2.根据权利要求1所述的一种快速的网络数据通信方法,其特征在于,在数据C1由数据名称N1定义,数据提供者P1提供数据C1的数据块,所述数据块的数据块ID集合为S1的条件下,如果网络链路不稳定,数据提供者P1则执行下述过程建立转发表:
步骤201:开始;
步骤202:数据提供者P1产生一个随机数同时构建数据发布消息,该数据发布消息的数据名称域值为N1,消息类型为1,数据块ID集合为S1,序列号为产生的随机数,负载为空;数据提供者P1通过与本地数据路由器相连的接口发送该数据发布消息,同时保存四元组<发送的数据发布消息,与本地数据路由器相连的接口,产生的随机数,确认定时器>,然后启动确认定时器;
步骤203:数据路由器从自己的接口j接收到数据发布消息后,通过接口j发送一个数据确认消息,该数据确认消息中的数据名称域值为N1,数据块ID集合为S1,消息类型为4,序列号为数据发布消息中的序列号;接收到数据发布消息的数据路由器查看转发表判断是否存在数据名称域值为N1,接口域为j,数据块ID集合域值为S1的表项,如果存在,执行步骤205,否则执行步骤204;
步骤204:接收到数据发布消息的数据路由器创建一个转发表项,该转发表项的数据名称域值为N1,接口域值为j,数据块ID集合域值为S1;对于每个符合条件1和条件2的接口数据路由器执行下述操作:产生一个随机数同时构建数据发布消息,该数据发布消息的数据名称域值为N1,消息类型为1,数据块ID集合为S1,序列号为产生的随机数,负载为空;通过从该接口发送数据发布消息,同时保存四元组<发送的数据发布消息,发送数据发布消息的接口,产生的随机数,确认定时器>,然后启动确认定时器,执行步骤206;
步骤205:接收到数据发布消息的数据路由器放弃接收到的数据发布消息;
步骤206:数据提供者P1查看保存的四元组,如果在四元组中的确认时钟过期之前收到了与四元组中的序列号相同的数据确认消息,则执行步骤208,否则执行步骤207;
步骤207:数据提供者P1通过步骤202中保存的四元组中的接口域值重新发送四元组中的数据发布消息,重新启动四元组中的确认时钟,执行步骤203;
步骤208:数据提供者P1删除保存的四元组;
步骤209:接收到数据发布消息的数据路由器查看保存的所有四元组,对于每个四元组判断是否在该四元组中的确认时钟过期之前收到了与四元组中的序列号相同的数据确认消息,如果是,则执行步骤211,否则执行步骤210;
步骤210:对于每个没有收到确认消息的四元组,接收到数据发布消息的数据路由器通过该四元组中对应接口的接口域值重新发送该四元组中的数据发布消息,重新启动该四元组中的确认时钟,执行步骤203;
步骤211:接收到数据发布消息的数据路由器收到了与四元组中的序列号相同的数据确认消息后,删除该四元组;
步骤212:重复步骤203~211直到所述网络内所有的数据路由器都接收到数据提供者P1发送的数据发布消息且建立了数据名称域值为N1、数据块ID集合域值为S1的转发表项为止;
步骤213:结束;
数据提供者定期执行步骤201~213建立或者更新数据路由器的转发表。
3.根据权利要求2所述的一种快速的网络数据通信方法,其特征在于,在数据路由器维护一个聚合表,一个聚合表项由接口域、数据名称域和数据块ID集合构成,接口域指向到达数据消费者的下一跳,数据名称域值为目标数据的数据名称,数据块ID集合域值记录未收到的目标数据块的条件下,如果聚合表项的数据块ID集合域值为空,那么删除该聚合表项;
在数据消费者U1通过自己的接口f与本地数据路由器R1相连,数据消息者U1需要获取由数据名称N1定义的数据C1的数据块,所述数据块的数据块ID集合为S1的情况下,如果网络性能稳定,那么数据消息者U1通过下述过程获取目标数据块:
步骤301:开始;
步骤302:数据消费者U1构建一个数据请求消息,数据名称域值为N1,消息类型域值为2,数据块ID集合为S1,序列号为0,负载为空;数据消费者U1从接口f发送该数据请求消息;
步骤303:数据路由器R1从自己的接口f1接收到数据请求消息后,判断自己的聚合表中是否存在数据名称域值为N1,接口域值为f1且数据块ID集合为数据请求消息中的数据块ID集合的超集的表项,如果是,执行步骤311,否则执行步骤304;
步骤304:数据路由器R1创建一个聚合表项,该聚合表项的数据名称域值为N1,数据块ID集合域值为接收到的数据请求消息中的数据块ID集合,接口域值为f1;
步骤305:数据路由器R1查看转发表,如果存在数据名称域值为N1且数据块ID集合为数据请求消息中的数据块ID集合的超集的转发表项,则数据路由器R1从该转发表项的接口转发接收到的数据请求消息;否则,数据路由器R1选择符合条件3的所有转发表项,对于每个选择的转发表项,数据路由器R1进行如下操作:构建一个数据请求消息,数据名称域值为N1,消息类型为2,数据块ID集合为该转发表项中的数据块ID集合域值,序列号为0,负载为空,数据路由器R1从该转发表项的接口域值发送构建数据请求消息;
条件3:所述数据转发表项的数据块ID集合的并集是接收到的数据请求消息中的数据块ID集合的超集;
步骤306:判断是数据路由器还是数据提供者从接口f2接收到数据请求消息,如果是数据提供者接收到数据请求消息,则执行步骤307,否则执行步骤308;
步骤307:接收到数据请求消息的数据提供者创建一个数据响应消息,该数据响应消息的数据名称域值为N1,消息类型为3,数据块ID集合为接收到的数据请求消息中的数据块ID集合,序列号为0,负载为提供的数据块,然后从接口f2发送该数据响应消息,执行步骤311;
步骤308:接收到数据请求消息的数据路由器判断聚合表中是否存在数据名称域值为N1,接口域值为f2且数据块ID集合为接收到的数据请求消息中的数据块ID集合的超集的表项,如果是,执行步骤311,否则执行步骤309;
步骤309:接收到数据请求消息的数据路由器创建一个聚合表项,该聚合表项的数据名称域值为N1,数据块ID集合域值为接收到的数据请求消息中的数据块ID集合,接口域值为f2;
步骤310:接收到数据请求消息的数据路由器查看转发表,如果存在数据名称域值为N1且数据块ID集合为数据请求消息中的数据块ID集合的超集的转发表项,则数据路由器从该转发表项的接口转发接收到的数据请求消息;否则,接收到数据请求消息的数据路由器选择符合条件3的所有转发表项,对于每个选择的转发表项,接收到数据请求消息的数据路由器进行如下操作:构建一个数据请求消息,数据名称域值为N1,消息类型为2,数据块ID集合为该转发表项中的数据块ID集合域值,序列号为0,负载为空,接收到数据请求消息的数据路由器从该转发表项的接口域值发送构建的数据请求消息,执行步骤306;
步骤311:判断是数据路由器还是数据消费者从接口f3接收到数据响应消息,如果是数据路由器接收到数据响应消息,则执行步骤312,否则执行步骤313;
步骤312:接收到数据响应消息的数据路由器从聚合表中选择所有数据名称域值为N1且数据块ID集合与数据响应消息中的数据块ID集合的交集不为空的表项,对于每个选择的聚合表项,接收到数据响应消息的数据路由器构建一个数据响应消息,数据响应消息的名称域值为N1,数据块ID集合为该聚合表项中的数据块ID集合与数据响应消息中的数据ID集合的交集,消息类型为3,序列号为0,负载为数据响应消息中的负载,数据路由器从该聚合表项中的接口域发送构建的数据响应消息,从该聚合表项的数据块ID集合中减去构建的数据响应消息的数据块ID集合,如果该聚合表项的数据块ID集合为空,则删除该聚合表项,执行步骤311;
步骤313:数据消费者U1获取并保存数据响应消息中的数据块;
步骤314:数据消费者U1整理所有收到的数据响应消息中从而获取数据块ID集合为S1的数据块;
步骤315:结束。
4.根据权利要求3所述的一种快速的网络数据通信方法,其特征在于,在数据消费者U1通过接口f与本地数据路由器R1相连,数据消息者U1需要获取由数据名称N1定义的数据C1的数据块,所述数据块的数据块ID集合为S1的条件下,如果网络性能不稳定,那么数据消费者U1通过下述过程获取目标数据块:
步骤401:开始;
步骤402:数据消费者U1产生一个随机数并构建一个数据请求消息,该数据请求消息的数据名称域值为N1,消息类型为2,数据块ID集合为S1,序列号为产生的随机数,负载为空,数据消费者U1从接口f发送该数据请求消息,同时保存四元组<构建的数据请求消息,接口f,产生的随机数,确认定时器>,启动确认定时器;
步骤403:数据路由器R1从自己的接口f1接收到数据请求消息后,从接口f1返回一个数据确认消息,该数据确认消息中的数据名称域值为N1,数据块ID集合为S1,消息类型为4,序列号为数据请求消息中的序列号,数据路由器R1判断聚合表中是否存在数据名称域值为N1,接口域值为f1且数据块ID集合为数据请求消息中的数据块ID集合的超集的表项,如果是,执行步骤417,否则执行步骤404;
步骤404:数据路由器R1创建一个聚合表项,该聚合表项的数据名称域值为N1,数据块ID集合域值为接收到的数据请求消息中的数据块ID集合,接口域值为f1;
步骤405:数据路由器R1查看转发表,如果存在数据名称域值为N1且数据块ID集合为数据请求消息中的数据块ID集合的超集的转发表项,则数据路由器R1产生一个随机数并创建一个数据请求消息,该数据请求消息的数据名称域值为N1,消息类型为2,数据块ID集合为该转发表项中的数据块ID集合域值,序列号为产生的随机数,负载为空,数据路由器R1从该转发表项的接口转发接收到的数据请求消息,同时保存四元组<构建的数据请求消息,发送构建的数据请求消息的接口,构建的数据请求消息中的序列号,确认定时器>,启动确认定时器;否则,数据路由器R1选择符合条件3的所有转发表项,对于每个选择的转发表项,数据路由器R1进行如下操作:产生一个随机数并构建一个数据请求消息,该数据请求消息的数据名称域值为N1,消息类型为2,数据块ID集合为该转发表项中的数据块ID集合域值,序列号为产生的随机数,负载为空,数据路由器R1从该转发表项的接口域值发送构建数据请求消息,同时保存四元组<构建的数据请求消息,发送构建的数据请求消息的接口,构建的数据请求消息中的序列号,确认定时器>,启动确认定时器;
步骤406:判断是数据路由器还是数据提供者从接口f2接收到数据请求消息,如果是数据提供者接收到数据请求消息,则执行步骤407,否则执行步骤408;
步骤407:接收到数据请求消息的数据提供者从接口f2返回一个数据确认消息,该数据确认消息的数据名称域值为N1,数据块ID集合为数据请求消息中的数据块ID集合,序列号为数据请求消息中的序列号,消息类型为4;接收到数据请求消息的数据提供者产生一个随机数并创建一个数据响应消息,该数据响应消息的数据名称域值为N1,消息类型为3,数据块ID集合为接收到的数据请求消息中的数据块ID集合,序列号为产生的随机数,负载为提供的数据块,数据提供者从接口f2发送该数据响应消息,同时保存四元组<构建的数据响应消息,发送构建的数据响应消息的接口,构建的数据响应消息中的序列号,确认定时器>,启动确认定时器,执行步骤417;
步骤408:接收到数据请求消息的数据路由器从接口f2返回一个数据确认消息,该数据确认消息的数据名称域值为N1,数据块ID集合为数据请求消息中的数据块ID集合,序列号为数据请求消息中的序列号,消息类型为4;接收到数据请求消息的数据路由器判断聚合表中是否存在数据名称域值为N1,接口域值为f2且数据块ID集合为接收到的数据请求消息中的数据块ID集合的超集的表项,如果是,执行步骤417,否则执行步骤409;
步骤409:接收到数据请求消息的数据路由器创建一个聚合表项,该聚合表项的数据名称域值为N1,数据块ID集合域值为接收到的数据请求消息中的数据块ID集合,接口域值为f2;
步骤410:接收到数据请求消息的数据路由器查看转发表,如果存在数据名称域值为N1且数据块ID集合为数据请求消息中的数据块ID集合的超集的转发表项,那么数据路由器产生一个随机数并构建一个数据请求消息,该数据请求消息中的数据名称域值为N1,消息类型为2,数据块ID集合为接收到的数据请求消息中的数据块ID集合域值,序列号为产生的随机数,负载为空,从该转发表项的接口发送构建的数据请求消息,同时保存四元组<构建的数据请求消息,发送构建的数据请求消息的接口,构建的数据请求消息中的序列号,确认定时器>,启动确认定时器;否则,数据路由器选择符合条件3的所有转发表项,对于每个选择的转发表项,数据路由器进行如下操作:产生一个随机数和构建一个数据请求消息,数据名称域值为N1,消息类型为2,数据块ID集合为该转发表项中的数据块ID集合域值,序列号为产生的随机数,负载为空,从该转发表项的接口域值发送构建的数据请求消息,同时保存四元组<构建的数据请求消息,发送构建的数据请求消息的接口,构建的数据请求消息中的序列号,确认定时器>,启动确认定时器;
步骤411:数据消费者U1查看保存的四元组,如果在四元组中的确认时钟过期之前收到了与四元组中的序列号相同的数据确认消息,则执行步骤413,否则执行步骤412;
步骤412:数据消费者U1通过该四元组中的接口域值重新发送该四元组中的数据请求消息,重新启动该四元组中的确认时钟,执行步骤403;
步骤413:数据消费者U1收到了与四元组中的序列号相同的数据确认消息后,删除该四元组;
步骤414:接收到数据请求消息的数据路由器查看保存的所有四元组,对于每个四元组判断是否在该四元组中的确认时钟过期之前收到了与四元组中的序列号相同的数据确认消息,如果是,则执行步骤416,否则执行步骤415;
步骤415:对于每个没有收到数据确认消息的四元组,接收到数据请求消息的数据路由器通过该四元组中的接口域值重新发送该四元组中的数据请求消息,重新启动该四元组中的确认时钟,执行步骤406;
步骤416:接收到数据请求消息的数据路由器收到与四元组中的序列号相同的数据确认消息后,删除该四元组,执行步骤406;
步骤417:判断是数据路由器还是数据消费者从接口f3接收到数据响应消息,如果是数据路由器接收到数据响应消息,则执行步骤419,否则执行步骤418;
步骤418:接收到数据响应消息的数据消费者U1从接口f3返回一个数据确认消息,该数据确认消息的数据名称域值为N1,数据块ID集合为数据响应消息中的数据块ID集合,序列号为数据响应消息中的序列号,消息类型为4,数据消费者U1获取并保存数据响应消息中的数据块,执行步骤426;
步骤419:接收到数据响应消息的数据路由器从接口f3返回一个数据确认消息,该数据确认消息的数据名称域值为N1,数据块ID集合为数据响应消息中的数据块ID集合,序列号为数据响应消息中的序列号,消息类型为4,接收到数据响应消息的数据路由器从聚合表中选择所有数据名称域值为N1且数据块ID集合与数据响应消息中的数据块ID集合的交集不为空的聚合表项,对于每个选择的聚合表项,接收到数据响应消息的数据路由器产生一个随机数并构建一个数据响应消息,该数据响应消息的名称域值为N1,数据块ID集合为该聚合表项中的数据块ID集合与数据响应消息中的数据ID集合的交集,消息类型为3,序列号为产生的随机数,负载为数据响应消息中的负载,数据路由器从该聚合表项中的接口域发送构建的数据响应消息,从该聚合表项的数据块ID集合中减去构建的数据响应消息的数据块ID集合,如果该聚合表项的数据块ID集合为空,则删除该聚合表项,同时保存四元组<构建的数据响应消息,发送构建的数据响应消息的接口,构建的数据请求响应中的序列号,确认定时器>,启动确认定时器;
步骤420:返回数据响应消息的数据提供者查看保存的四元组,如果在四元组中的确认时钟过期之前收到了与四元组中的序列号相同的数据确认消息,则执行步骤422,否则执行步骤421;
步骤421:返回数据响应消息的数据提供者通过该四元组中的接口域值重新发送该四元组中的数据响应消息,重新启动该四元组中的确认时钟,执行步骤417;
步骤422:返回数据响应消息的数据提供者收到与四元组中的序列号相同的数据确认消息后,删除该四元组;
步骤423:接收到数据响应消息的数据路由器查看保存的所有四元组,对于每个四元组判断是否在该四元组中的确认时钟过期之前收到与四元组中的序列号相同的数据确认消息,如果是,则执行步骤425,否则执行步骤424;
步骤424:对于每个没有收到确认消息的四元组,接收到数据响应消息的数据路由器通过该四元组中的接口域值重新发送该四元组中的数据响应消息,重新启动该四元组中的确认时钟,执行步骤417;
步骤425:接收到数据响应消息的数据路由器收到与四元组中的序列号相同的数据确认消息后,删除该四元组,执行步骤417;
步骤426:数据消费者U1整理所有收到的数据响应消息中从而获取数据块ID集合为S1的数据块;
步骤427:结束。
5.根据权利要求4所述的一种快速的网络数据通信方法,其特征在于,在数据路由器R2通过接口f3与邻居数据路由器或者邻居数据提供者相连且该邻居路由器或者理论数据提供者失效的条件下,如果网络性能稳定,那么数据路由器R2执行下述过程更新转发表:
步骤501:开始;
步骤502:数据路由器R2从转发表中选择接口域值为f3的所有转发表项,然后构建一个不可达消息,该不可达消息的数据名称域值和数据块ID集合均为空,消息类型为5,序列号为0,负载为接口域值为f3的所有转发表项,数据路由器R2从除了接口f3的所有与数据路由器相连的接口发送该不可达消息,数据路由器R2删除所有接口域值为f3的转发表项;
步骤503:邻居数据路由器从自己的接口f4接收到不可达消息,从除了接口f4的所有与数据路由器相连的接口发送不可达消息;
步骤504:接收到不可达消息的邻居数据路由器选择接口域值为f4,且数据名称域值等于不可达消息负载中任一个转发表项的数据名称域值,且数据块ID集合等于不可达消息负载中任一个转发表项的数据块ID集合的转发表项,删除这些选择的转发表项;
步骤505:执行步骤503~504直到所有的数据路由器都接收到不可达消息;
步骤506:结束。
6.根据权利要求5所述的一种快速的网络数据通信方法,其特征在于,在数据路由器R2通过接口f3与邻居数据路由器或者邻居数据提供者相连且该邻居路由器或者理论数据提供者失效的条件下,如果网络性能不稳定,那么数据路由器R2执行下述过程更新转发表:
步骤601:开始;
步骤602:数据路由器R2从转发表中选择接口域值为f3的所有转发表项,对于除了接口f3之外的每个与数据路由器相连的接口,数据路由器R2进行如下操作:产生一个随机数并构建一个不可达消息,该不可达消息的数据名称域值和数据块ID集合均为空,消息类型为5,序列号为产生的随机数,负载为接口域值为f3的所有转发表项,数据路由器R2从该接口发送该不可达消息,同时保存四元组<构建的不可达消息,发送构建的不可达消息的接口,构建的不可达消息的序列号,确认定时器>,启动确认定时器,数据路由器R2删除所有接口域值为f3的转发表项;
步骤603:邻居数据路由器从自己的接口f4收到不可达消息,数据路由器从接口f4返回一个数据确认消息,该数据确认消息的数据名称域值和数据块ID集合为空,序列号为不可达消息中的序列号,消息类型为4;对于除了接口f4之外的每个与数据路由器相连的接口,邻居数据路由器进行如下操作:产生一个随机数并构建一个不可达消息,该不可达消息的数据名称域值和数据块ID集合均为空,消息类型为5,序列号为产生的随机数,负载为接收到的不可达消息中的负载,邻居数据路由器从该接口发送该不可达消息,同时保存四元组<构建的不可达消息,发送构建的不可达消息的接口,构建的不可达消息的序列号,确认定时器>,启动确认定时器;
步骤604:接收到不可达消息的邻居数据路由器选择接口域值为f4,且数据名称域值等于不可达消息负载中任一个转发表项的数据名称域值,并且数据块ID集合等于不可达消息负载中任一个转发表项的数据块ID集合的转发表项,删除这些选择的转发表项;
步骤605:接收到不可达消息的数据路由器查看保存的所有四元组,对于每个四元组判断是否在该四元组中的确认时钟过期之前收到与四元组中的序列号相同的数据确认消息,如果是,则执行步骤607,否则执行步骤606;
步骤606:对于每个没有收到确认消息的四元组,接收到不可达消息的数据路由器通过该四元组中的接口域值重新发送该四元组中的不可达消息,重新启动该四元组中的确认时钟;
步骤607:接收到不可达消息的数据路由器收到与四元组中的序列号相同的数据确认消息后,删除该四元组;
步骤608:执行步骤603~607直到所有的数据路由器都接收到不可达消息;
步骤609:结束;
数据路由器删除无效的转发表项之后,通过数据提供者定期执行步骤101~107或者步骤201~213建立转发表。
说明书
技术领域
本发明涉及一种数据通信方法,尤其涉及的是一种快速的网络数据通信方法。
背景技术
近年来,很多研究工作致力于无线网络数据通信方法,以便使移动节点能够快速获取网络服务。随着无线网络技术的发展,无线网络数据通信方法会成为未来提供服务的一种模式。
目前,无线网络数据通信的实现模式是通过广播来实现,因此延迟和代价都比较大,降低了网络服务性能。因此,如何降低无线网络提供服务的延迟和代价成为近年来研究的热点问题。
发明内容
发明目的:本发明所要解决的技术问题是针对现有技术的不足,提供一种快速的网络数据通信方法。
技术方案:本发明公开了一种快速的网络数据通信方法,所述网络包括两个以上的节点和两个以上的数据路由器,一种类型的数据包括两个以上的数据块且由一个数据名称唯一定义,每个数据块由一个数据块ID唯一标识;数据消费者为有权限获取一种类型的数据的节点,数据提供者为有权提供一种类型的数据的节点;节点不具有路由转发功能,数据路由器具有路由转发功能;
每种消息结构包括五个部分:数据名称域、数据块ID集合、消息类型域,、序列号以及负载;
消息类型如下表所示:
数据路由器维护一个转发表,一个转发表项由接口域、数据名称域以及数据块ID集合构成,其中,接口域值指向到达数据提供者的下一跳,数据名称域值为目标数据的数据名称,目标数据为数据消费者请求的数据;数据块ID集合域值为构成目标数据的部分或者全部数据块ID的集合;
在数据C1由数据名称N1定义,数据提供者P1产生了数据C1的数据块,所述数据块的数据块ID集合为S1的情况下,如果网络链路稳定,例如有线网络,数据提供者P1则执行下述过程建立转发表:
步骤101:开始;
步骤102:数据提供者P1构建数据发布消息,该数据发布消息的数据名称域值为N1,消息类型为1,数据块ID集合为S1,序列号为0,负载为空,数据提供者P1通过与本地数据路由器相连的接口发送该数据发布消息;
步骤103:数据路由器从自己的接口j接收到数据发布消息,查看转发表判断是否存在数据名称域值为N1,接口域为j,数据块ID集合域值为S1的转发表项,如果存在,执行步骤105,否则执行步骤104;
步骤104:数据路由器创建一个转发表项,该转发表项的数据名称域值为N1,接口域值为j,数据块ID集合域值为S1,数据路由器从每个符合条件1和条件2的接口转发该数据发布消息,执行步骤106;
条件1:该接口与数据路由器相连;
条件2:从该接口没有接收到数据发布消息;
步骤105:数据路由器放弃接收到的数据发布消息,执行步骤106;
步骤106:重复步骤103~105直到网络内所有的数据路由器都接收到数据提供者P1发送的数据发布消息且建立了数据名称域值为N1、数据块ID集合域值为S1的转发表项为止;
步骤107:结束;
数据提供者定期执行步骤101~107建立或者更新数据路由器的转发表;
如果网络链路不稳定,不稳定的评价指标为丢包率,例如丢包率达到一定比例,比如20%,数据路由器、数据消费者和数据提供者通过保存四元组<发送的消息,发送消息的接口,消息中的序列号,确认定时器>来确保消息的传输成功率;确认定时器的初始值预先设定,例如100ms,然后根据时钟衰减,如果时钟衰减到0,则定时器过期。
通过上述过程,数据路由器能够建立转发表从而确保用户能够快速获取数据。
本发明所述方法中,在数据C1由数据名称N1定义,数据提供者P1提供数据C1的数据块,所述数据块的数据块ID集合为S1的条件下,如果网络链路不稳定,数据提供者P1则执行下述过程建立转发表:
步骤201:开始;
步骤202:数据提供者P1产生一个随机数同时构建数据发布消息,该数据发布消息的数据名称域值为N1,消息类型为1,数据块ID集合为S1,序列号为产生的随机数,负载为空;数据提供者P1通过与本地数据路由器相连的接口发送该数据发布消息,同时保存四元组<发送的数据发布消息,与本地数据路由器相连的接口,产生的随机数,确认定时器>,然后启动确认定时器;
步骤203:数据路由器从自己的接口j接收到数据发布消息后,通过接口j发送一个数据确认消息,该数据确认消息中的数据名称域值为N1,数据块ID集合为S1,消息类型为4,序列号为数据发布消息中的序列号;数据路由器查看转发表判断是否存在数据名称域值为N1,接口域为j,数据块ID集合域值为S1的表项,如果存在,执行步骤205,否则执行步骤204;
步骤204:数据路由器创建一个转发表项,该转发表项的数据名称域值为N1,接口域值为j,数据块ID集合域值为S1;对于每个符合条件1和条件2的接口数据路由器执行下述操作:产生一个随机数同时构建数据发布消息,该数据发布消息的数据名称域值为N1,消息类型为1,数据块ID集合为S1,序列号为产生的随机数,负载为空;通过从该接口发送数据发布消息,同时保存四元组<发送的数据发布消息,发送数据发布消息的接口,产生的随机数,确认定时器>,然后启动确认定时器,执行步骤206;
步骤205:数据路由器放弃接收到的数据发布消息;
步骤206:数据提供者P1查看保存的四元组,如果在四元组中的确认时钟过期之前收到了与四元组中的序列号相同的数据确认消息,则执行步骤208,否则执行步骤207;
步骤207:数据提供者P1通过步骤202中保存的四元组中的接口域值重新发送四元组中的数据发布消息,重新启动四元组中的确认时钟,执行步骤203;
步骤208:数据提供者P1删除保存的四元组;
步骤209:数据路由器查看保存的所有四元组,对于每个四元组判断是否在该四元组中的确认时钟过期之前收到了与四元组中的序列号相同的数据确认消息,如果是,则执行步骤211,否则执行步骤210;
步骤210:对于每个没有收到确认消息的四元组,数据路由器通过该四元组中对应接口的接口域值重新发送该四元组中的数据发布消息,重新启动该四元组中的确认时钟,执行步骤203;
步骤211:数据路由器收到了与四元组中的序列号相同的数据确认消息后,删除该四元组;
步骤212:重复步骤203~211直到所述网络内所有的数据路由器都接收到数据提供者P1发送的数据发布消息且建立了数据名称域值为N1、数据块ID集合域值为S1的转发表项为止;
步骤213:结束;
数据提供者定期执行步骤201~213建立或者更新数据路由器的转发表。
通过上述过程,数据路由器能够建立转发表从而确保用户能够快速获取数据。
本发明所述方法中,在数据路由器维护一个聚合表,一个聚合表项由接口域、数据名称域和数据块ID集合构成,接口域指向到达数据消费者的下一跳,数据名称域值为目标数据的数据名称,数据块ID集合域值记录未收到的目标数据块的条件下,如果聚合表项的数据块ID集合域值为空,那么删除该聚合表项;
在数据消费者U1通过自己的接口f与本地数据路由器R1相连,数据消息者U1需要获取由数据名称N1定义的数据C1的数据块,所述数据块的数据块ID集合为S1的情况下,如果网络性能稳定,那么数据消息者U1通过下述过程获取目标数据块:
步骤301:开始;
步骤302:数据消费者U1构建一个数据请求消息,数据名称域值为N1,消息类型域值为2,数据块ID集合为S1,序列号为0,负载为空;数据消费者U1从接口f发送该数据请求消息;
步骤303:数据路由器R1从自己的接口f1接收到数据请求消息后,判断自己的聚合表中是否存在数据名称域值为N1,接口域值为f1且数据块ID集合为数据请求消息中的数据块ID集合的超集的表项,如果是,执行步骤311,否则执行步骤304;
步骤304:数据路由器R1创建一个聚合表项,该聚合表项的数据名称域值为N1,数据块ID集合域值为接收到的数据请求消息中的数据块ID集合,接口域值为f1;
步骤305:数据路由器R1查看转发表,如果存在数据名称域值为N1且数据块ID集合为数据请求消息中的数据块ID集合的超集的转发表项,则数据路由器R1从该转发表项的接口转发接收到的数据请求消息,如果一个集合S2中的每一个元素都在集合S1中,且集合S1中可能包含S2中没有的元素,则集合S1就是S2的一个超集,反过来,S2是S1的子集;否则,数据路由器R1选择符合条件3的所有转发表项,对于每个选择的转发表项,数据路由器R1进行如下操作:构建一个数据请求消息,数据名称域值为N1,消息类型为2,数据块ID集合为该转发表项中的数据块ID集合域值,序列号为0,负载为空,数据路由器R1从该转发表项的接口域值发送构建数据请求消息;
条件3:所述数据转发表项的数据块ID集合的并集是接收到的数据请求消息中的数据块ID集合的超集;
步骤306:判断是数据路由器还是数据提供者从接口f2接收到数据请求消息,如果是数据提供者接收到数据请求消息,则执行步骤307,否则执行步骤308;
步骤307:数据提供者创建一个数据响应消息,该数据响应消息的数据名称域值为N1,消息类型为3,数据块ID集合为接收到的数据请求消息中的数据块ID集合,序列号为0,负载为提供的数据块,然后从接口f2发送该数据响应消息,执行步骤311;
步骤308:数据路由器判断聚合表中是否存在数据名称域值为N1,接口域值为f2且数据块ID集合为接收到的数据请求消息中的数据块ID集合的超集的表项,如果是,执行步骤311,否则执行步骤309;
步骤309:数据路由器创建一个聚合表项,该聚合表项的数据名称域值为N1,数据块ID集合域值为接收到的数据请求消息中的数据块ID集合,接口域值为f2;
步骤310:数据路由器查看转发表,如果存在数据名称域值为N1且数据块ID集合为数据请求消息中的数据块ID集合的超集的转发表项,则数据路由器从该转发表项的接口转发接收到的数据请求消息;否则,数据路由器选择符合条件3的所有转发表项,对于每个选择的转发表项,数据路由器进行如下操作:构建一个数据请求消息,数据名称域值为N1,消息类型为2,数据块ID集合为该转发表项中的数据块ID集合域值,序列号为0,负载为空,数据路由器从该转发表项的接口域值发送构建的数据请求消息,执行步骤306;
步骤311:判断是数据路由器还是数据消费者从接口f3接收到数据响应消息,如果是数据路由器接收到数据响应消息,则执行步骤312,否则执行步骤313;
步骤312:数据路由器从聚合表中选择所有数据名称域值为N1且数据块ID集合与数据响应消息中的数据块ID集合的交集不为空的表项,对于每个选择的聚合表项,数据路由器构建一个数据响应消息,数据响应消息的名称域值为N1,数据块ID集合为该聚合表项中的数据块ID集合与数据响应消息中的数据ID集合的交集,消息类型为3,序列号为0,负载为数据响应消息中的负载,数据路由器从该聚合表项中的接口域发送构建的数据响应消息,从该聚合表项的数据块ID集合中减去构建的数据响应消息的数据块ID集合,如果该聚合表项的数据块ID集合为空,则删除该聚合表项,执行步骤311;
步骤313:数据消费者U1获取并保存数据响应消息中的数据块;
步骤314:数据消费者U1整理所有收到的数据响应消息中从而获取数据块ID集合为S1的数据块;
步骤315:结束。
通过上述过程,数据消息者U1能够快速获取目标数据块。
本发明所述方法中,在数据消费者U1通过接口f与本地数据路由器R1相连,数据消息者U1需要获取由数据名称N1定义的数据C1的数据块,所述数据块的数据块ID集合为S1的条件下,如果网络性能不稳定,那么数据消费者U1通过下述过程获取目标数据块:
步骤401:开始;
步骤402:数据消费者U1产生一个随机数并构建一个数据请求消息,该数据请求消息的数据名称域值为N1,消息类型为2,数据块ID集合为S1,序列号为产生的随机数,负载为空,数据消费者U1从接口f发送该数据请求消息,同时保存四元组<构建的数据请求消息,接口f,产生的随机数,确认定时器>,启动确认定时器;
步骤403:数据路由器R1从自己的接口f1接收到数据请求消息后,从接口f1返回一个数据确认消息,该数据确认消息中的数据名称域值为N1,数据块ID集合为S1,消息类型为4,序列号为数据请求消息中的序列号,数据路由器R1判断聚合表中是否存在数据名称域值为N1,接口域值为f1且数据块ID集合为数据请求消息中的数据块ID集合的超集的表项,如果是,执行步骤417,否则执行步骤404;
步骤404:数据路由器R1创建一个聚合表项,该聚合表项的数据名称域值为N1,数据块ID集合域值为接收到的数据请求消息中的数据块ID集合,接口域值为f1;
步骤405:数据路由器R1查看转发表,如果存在数据名称域值为N1且数据块ID集合为数据请求消息中的数据块ID集合的超集的转发表项,则数据路由器R1产生一个随机数并创建一个数据请求消息,该数据请求消息的数据名称域值为N1,消息类型为2,数据块ID集合为该转发表项中的数据块ID集合域值,序列号为产生的随机数,负载为空,数据路由器R1从该转发表项的接口转发接收到的数据请求消息,同时保存四元组<构建的数据请求消息,发送构建的数据请求消息的接口,构建的数据请求消息中的序列号,确认定时器>,启动确认定时器;否则,数据路由器R1选择符合条件3的所有转发表项,对于每个选择的转发表项,数据路由器R1进行如下操作:产生一个随机数并构建一个数据请求消息,该数据请求消息的数据名称域值为N1,消息类型为2,数据块ID集合为该转发表项中的数据块ID集合域值,序列号为产生的随机数,负载为空,数据路由器R1从该转发表项的接口域值发送构建数据请求消息,同时保存四元组<构建的数据请求消息,发送构建的数据请求消息的接口,构建的数据请求消息中的序列号,确认定时器>,启动确认定时器;
步骤406:判断是数据路由器还是数据提供者从接口f2接收到数据请求消息,如果是数据提供者接收到数据请求消息,则执行步骤407,否则执行步骤408;
步骤407:数据提供者从接口f2返回一个数据确认消息,该数据确认消息的数据名称域值为N1,数据块ID集合为数据请求消息中的数据块ID集合,序列号为数据请求消息中的序列号,消息类型为4;数据提供者产生一个随机数并创建一个数据响应消息,该数据响应消息的数据名称域值为N1,消息类型为3,数据块ID集合为接收到的数据请求消息中的数据块ID集合,序列号为产生的随机数,负载为提供的数据块,数据提供者从接口f2发送该数据响应消息,同时保存四元组<构建的数据响应消息,发送构建的数据响应消息的接口,构建的数据响应消息中的序列号,确认定时器>,启动确认定时器,执行步骤417;
步骤408:数据路由器从接口f2返回一个数据确认消息,该数据确认消息的数据名称域值为N1,数据块ID集合为数据请求消息中的数据块ID集合,序列号为数据请求消息中的序列号,消息类型为4;数据路由器判断聚合表中是否存在数据名称域值为N1,接口域值为f2且数据块ID集合为接收到的数据请求消息中的数据块ID集合的超集的表项,如果是,执行步骤417,否则执行步骤409;
步骤409:数据路由器创建一个聚合表项,该聚合表项的数据名称域值为N1,数据块ID集合域值为接收到的数据请求消息中的数据块ID集合,接口域值为f2;
步骤410:数据路由器查看转发表,如果存在数据名称域值为N1且数据块ID集合为数据请求消息中的数据块ID集合的超集的转发表项,那么数据路由器产生一个随机数并构建一个数据请求消息,该数据请求消息中的数据名称域值为N1,消息类型为2,数据块ID集合为接收到的数据请求消息中的数据块ID集合域值,序列号为产生的随机数,负载为空,从该转发表项的接口发送构建的数据请求消息,同时保存四元组<构建的数据请求消息,发送构建的数据请求消息的接口,构建的数据请求消息中的序列号,确认定时器>,启动确认定时器;否则,数据路由器选择符合条件3的所有转发表项,对于每个选择的转发表项,数据路由器进行如下操作:产生一个随机数和构建一个数据请求消息,数据名称域值为N1,消息类型为2,数据块ID集合为该转发表项中的数据块ID集合域值,序列号为产生的随机数,负载为空,从该转发表项的接口域值发送构建的数据请求消息,同时保存四元组<构建的数据请求消息,发送构建的数据请求消息的接口,构建的数据请求消息中的序列号,确认定时器>,启动确认定时器;
步骤411:数据消费者U1查看保存的四元组,如果在四元组中的确认时钟过期之前收到了与四元组中的序列号相同的数据确认消息,则执行步骤413,否则执行步骤412;
步骤412:数据消费者U1通过该四元组中的接口域值重新发送该四元组中的数据请求消息,重新启动该四元组中的确认时钟,执行步骤403;
步骤413:数据消费者U1收到了与四元组中的序列号相同的数据确认消息后,删除该四元组;
步骤414:数据路由器查看保存的所有四元组,对于每个四元组判断是否在该四元组中的确认时钟过期之前收到了与四元组中的序列号相同的数据确认消息,如果是,则执行步骤416,否则执行步骤415;
步骤415:对于每个没有收到确认消息的四元组,数据路由器通过该四元组中的接口域值重新发送该四元组中的数据请求消息,重新启动该四元组中的确认时钟,执行步骤406;
步骤416:数据路由器收到与四元组中的序列号相同的数据确认消息后,删除该四元组,执行步骤406;
步骤417:判断是数据路由器还是数据消费者从接口f3接收到数据响应消息,如果是数据路由器接收到数据响应消息,则执行步骤419,否则执行步骤418;
步骤418:数据消费者U1从接口f3返回一个数据确认消息,该数据确认消息的数据名称域值为N1,数据块ID集合为数据响应消息中的数据块ID集合,序列号为数据响应消息中的序列号,消息类型为4,数据消费者U1获取并保存数据响应消息中的数据块,执行步骤426;
步骤419:数据路由器从接口f3返回一个数据确认消息,该数据确认消息的数据名称域值为N1,数据块ID集合为数据响应消息中的数据块ID集合,序列号为数据响应消息中的序列号,消息类型为4,数据路由器从聚合表中选择所有数据名称域值为N1且数据块ID集合与数据响应消息中的数据块ID集合的交集不为空的聚合表项,对于每个选择的聚合表项,数据路由器产生一个随机数并构建一个数据响应消息,该数据响应消息的名称域值为N1,数据块ID集合为该聚合表项中的数据块ID集合与数据响应消息中的数据ID集合的交集,消息类型为3,序列号为产生的随机数,负载为数据响应消息中的负载,数据路由器从该聚合表项中的接口域发送构建的数据响应消息,从该聚合表项的数据块ID集合中减去构建的数据响应消息的数据块ID集合,如果该聚合表项的数据块ID集合为空,则删除该聚合表项,同时保存四元组<构建的数据响应消息,发送构建的数据响应消息的接口,构建的数据请求响应中的序列号,确认定时器>,启动确认定时器;
步骤420:返回数据响应消息的数据提供者查看保存的四元组,如果在四元组中的确认时钟过期之前收到了与四元组中的序列号相同的数据确认消息,则执行步骤422,否则执行步骤421;
步骤421:数据提供者通过该四元组中的接口域值重新发送该四元组中的数据响应消息,重新启动该四元组中的确认时钟,执行步骤417;
步骤422:数据提供者收到与四元组中的序列号相同的数据确认消息后,删除该四元组;
步骤423:数据路由器查看保存的所有四元组,对于每个四元组判断是否在该四元组中的确认时钟过期之前收到与四元组中的序列号相同的数据确认消息,如果是,则执行步骤425,否则执行步骤424;
步骤424:对于每个没有收到确认消息的四元组,数据路由器通过该四元组中的接口域值重新发送该四元组中的数据响应消息,重新启动该四元组中的确认时钟,执行步骤417;
步骤425:数据路由器收到与四元组中的序列号相同的数据确认消息后,删除该四元组,执行步骤417;
步骤426:数据消费者U1整理所有收到的数据响应消息中从而获取数据块ID集合为S1的数据块;
步骤427:结束。
通过上述过程,数据消息者U1能够快速获取目标数据块。
本发明所述方法中,在数据路由器R2通过接口f3与邻居数据路由器或者邻居数据提供者相连且该邻居路由器或者理论数据提供者失效的条件下,如果网络性能稳定,那么数据路由器R2执行下述过程更新转发表:
步骤501:开始;
步骤502:数据路由器R2从转发表中选择接口域值为f3的所有转发表项,然后构建一个不可达消息,该不可达消息的数据名称域值和数据块ID集合均为空,消息类型为5,序列号为0,负载为接口域值为f3的所有转发表项,数据路由器R2从除了接口f3的所有与数据路由器相连的接口发送该不可达消息,数据路由器R2删除所有接口域值为f3的转发表项;
步骤503:邻居数据路由器从自己的接口f4收到不可达消息,从除了接口f4的所有与数据路由器相连的接口发送不可达消息;
步骤504:邻居数据路由器选择接口域值为f4,且数据名称域值等于不可达消息负载中任一个转发表项的数据名称域值,且数据块ID集合等于不可达消息负载中任一个转发表项的数据块ID集合的转发表项,删除这些选择的转发表项;
步骤505:执行步骤503~504直到所有的数据路由器都接收到不可达消息;
步骤506:结束。
通过上述过程,数据路由器能够快速更新转发表以确保用户能够正确快速地获取目标数据。
本发明所述方法中,在数据路由器R2通过接口f3与邻居数据路由器或者邻居数据提供者相连且该邻居路由器或者理论数据提供者失效的条件下,如果网络性能不稳定,那么数据路由器R2执行下述过程更新转发表:
步骤601:开始;
步骤602:数据路由器R2从转发表中选择接口域值为f3的所有转发表项,对于除了接口f3之外的每个与数据路由器相连的接口,数据路由器R2进行如下操作:产生一个随机数并构建一个不可达消息,该不可达消息的数据名称域值和数据块ID集合均为空,消息类型为5,序列号为产生的随机数,负载为接口域值为f3的所有转发表项,数据路由器R2从该接口发送该不可达消息,同时保存四元组<构建的不可达消息,发送构建的不可达消息的接口,构建的不可达消息的序列号,确认定时器>,启动确认定时器,数据路由器R2删除所有接口域值为f3的转发表项;
步骤603:邻居数据路由器从自己的接口f4收到不可达消息,数据路由器从接口f4返回一个数据确认消息,该数据确认消息的数据名称域值和数据块ID集合为空,序列号为不可达消息中的序列号,消息类型为4;对于除了接口f4之外的每个与数据路由器相连的接口,邻居数据路由器进行如下操作:产生一个随机数并构建一个不可达消息,该不可达消息的数据名称域值和数据块ID集合均为空,消息类型为5,序列号为产生的随机数,负载为接收到的不可达消息中的负载,邻居数据路由器从该接口发送该不可达消息,同时保存四元组<构建的不可达消息,发送构建的不可达消息的接口,构建的不可达消息的序列号,确认定时器>,启动确认定时器;
步骤604:邻居数据路由器选择接口域值为f4,且数据名称域值等于不可达消息负载中任一个转发表项的数据名称域值,并且数据块ID集合等于不可达消息负载中任一个转发表项的数据块ID集合的转发表项,删除这些选择的转发表项;
步骤605:数据路由器查看保存的所有四元组,对于每个四元组判断是否在该四元组中的确认时钟过期之前收到与四元组中的序列号相同的数据确认消息,如果是,则执行步骤607,否则执行步骤606;
步骤606:对于每个没有收到确认消息的四元组,数据路由器通过该四元组中的接口域值重新发送该四元组中的不可达消息,重新启动该四元组中的确认时钟;
步骤607:数据路由器收到与四元组中的序列号相同的数据确认消息后,删除该四元组;
步骤608:执行步骤603~607直到所有的数据路由器都接收到不可达消息;
步骤609:结束;
数据路由器删除无效的转发表项之后,通过数据提供者定期执行步骤101~107或者步骤201~213建立转发表。
通过上述过程,数据路由器能够快速更新转发表以确保用户能够正确快速地获取目标数据。
有益效果:本发明提供了一种快速的网络数据通信方法,用户通过本发明所提供的数据通信方法能够从距离最近的数据提供者以单播方式获取服务数据,缩短了获取服务数据的延迟和代价,提高了服务质量,本发明可应用于道路路况监测、环境监测等领域,具有广泛的应用前景。
附图说明
下面集合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
图1为本发明所述的网络稳定情况下的转发表建立流程示意图。
图2为本发明所述的网络不稳定情况下的转发表建立流程示意图。
图3为本发明所述的网络稳定情况下的数据获取流程示意图。
图4为本发明所述的网络不稳定情况下的数据获取流程示意图。
图5为本发明所述的网络稳定情况下的转发表更新流程示意图。
图6为本发明所述的网络不稳定情况下的转发表更新流程示意图。
具体实施方式:
本发明提供了一种快速的网络数据通信方法,用户通过本发明所提供的数据通信方法能够从距离最近的数据提供者以单播方式获取服务数据,缩短了获取服务数据的延迟和代价,提高了服务质量,本发明可应用于道路路况监测、环境监测等领域,具有广泛的应用前景。
图1为本发明所述的网络稳定情况下的转发表建立流程示意图。所述网络包括两个以上的节点和两个以上的数据路由器,一种类型的数据包括两个以上的数据块且由一个数据名称唯一定义,每个数据块由一个数据块ID唯一标识;数据消费者为有权限获取一种类型的数据的节点,数据提供者为有权提供一种类型的数据的节点;节点不具有路由转发功能,数据路由器具有路由转发功能;
每种消息结构包括五个部分:数据名称域、数据块ID集合、消息类型域,、序列号以及负载;
消息类型如下表所示:
数据路由器维护一个转发表,一个转发表项由接口域、数据名称域以及数据块ID集合构成,其中,接口域值指向到达数据提供者的下一跳,数据名称域值为目标数据的数据名称,目标数据为数据消费者请求的数据;数据块ID集合域值为构成目标数据的部分或者全部数据块ID的集合;
在数据C1由数据名称N1定义,数据提供者P1产生了数据C1的数据块,所述数据块的数据块ID集合为S1的情况下,如果网络链路稳定,例如有线网络,如图1所示,数据提供者P1则执行下述过程建立转发表:
步骤101:开始;
步骤102:数据提供者P1构建数据发布消息,该数据发布消息的数据名称域值为N1,消息类型为1,数据块ID集合为S1,序列号为0,负载为空,数据提供者P1通过与本地数据路由器相连的接口发送该数据发布消息;
步骤103:数据路由器从自己的接口j接收到数据发布消息,查看转发表判断是否存在数据名称域值为N1,接口域为j,数据块ID集合域值为S1的转发表项,如果存在,执行步骤105,否则执行步骤104;
步骤104:数据路由器创建一个转发表项,该转发表项的数据名称域值为N1,接口域值为j,数据块ID集合域值为S1,数据路由器从每个符合条件1和条件2的接口转发该数据发布消息,执行步骤106;
条件1:该接口与数据路由器相连;
条件2:从该接口没有接收到数据发布消息;
步骤105:数据路由器放弃接收到的数据发布消息,执行步骤106;
步骤106:重复步骤103~105直到网络内所有的数据路由器都接收到数据提供者P1发送的数据发布消息且建立了数据名称域值为N1、数据块ID集合域值为S1的转发表项为止;
步骤107:结束;
数据提供者定期执行步骤101~107建立或者更新数据路由器的转发表。通过上述过程,数据路由器能够建立转发表从而确保用户能够快速获取数据。
图2为本发明所述的网络不稳定情况下的转发表建立流程示意图。如果网络链路不稳定,不稳定的评价指标为丢包率,例如丢包率达到一定比例,比如20%,数据路由器、数据消费者和数据提供者通过保存四元组<发送的消息,发送消息的接口,消息中的序列号,确认定时器>来确保消息的传输成功率;确认定时器的初始值预先设定,例如100ms,然后根据时钟衰减,如果时钟衰减到0,则定时器过期。
在数据C1由数据名称N1定义,数据提供者P1提供数据C1的数据块,所述数据块的数据块ID集合为S1的条件下,如果网络链路不稳定,数据提供者P1则执行下述过程建立转发表:
步骤201:开始;
步骤202:数据提供者P1产生一个随机数同时构建数据发布消息,该数据发布消息的数据名称域值为N1,消息类型为1,数据块ID集合为S1,序列号为产生的随机数,负载为空;数据提供者P1通过与本地数据路由器相连的接口发送该数据发布消息,同时保存四元组<发送的数据发布消息,与本地数据路由器相连的接口,产生的随机数,确认定时器>,然后启动确认定时器;
步骤203:数据路由器从自己的接口j接收到数据发布消息后,通过接口j发送一个数据确认消息,该数据确认消息中的数据名称域值为N1,数据块ID集合为S1,消息类型为4,序列号为数据发布消息中的序列号;数据路由器查看转发表判断是否存在数据名称域值为N1,接口域为j,数据块ID集合域值为S1的表项,如果存在,执行步骤205,否则执行步骤204;
步骤204:数据路由器创建一个转发表项,该转发表项的数据名称域值为N1,接口域值为j,数据块ID集合域值为S1;对于每个符合条件1和条件2的接口数据路由器执行下述操作:产生一个随机数同时构建数据发布消息,该数据发布消息的数据名称域值为N1,消息类型为1,数据块ID集合为S1,序列号为产生的随机数,负载为空;通过从该接口发送数据发布消息,同时保存四元组<发送的数据发布消息,发送数据发布消息的接口,产生的随机数,确认定时器>,然后启动确认定时器,执行步骤206;
步骤205:数据路由器放弃接收到的数据发布消息;
步骤206:数据提供者P1查看保存的四元组,如果在四元组中的确认时钟过期之前收到了与四元组中的序列号相同的数据确认消息,则执行步骤208,否则执行步骤207;
步骤207:数据提供者P1通过步骤202中保存的四元组中的接口域值重新发送四元组中的数据发布消息,重新启动四元组中的确认时钟,执行步骤203;
步骤208:数据提供者P1删除保存的四元组;
步骤209:数据路由器查看保存的所有四元组,对于每个四元组判断是否在该四元组中的确认时钟过期之前收到了与四元组中的序列号相同的数据确认消息,如果是,则执行步骤211,否则执行步骤210;
步骤210:对于每个没有收到确认消息的四元组,数据路由器通过该四元组中对应接口的接口域值重新发送该四元组中的数据发布消息,重新启动该四元组中的确认时钟,执行步骤203;
步骤211:数据路由器收到了与四元组中的序列号相同的数据确认消息后,删除该四元组;
步骤212:重复步骤203~211直到所述网络内所有的数据路由器都接收到数据提供者P1发送的数据发布消息且建立了数据名称域值为N1、数据块ID集合域值为S1的转发表项为止;
步骤213:结束;
数据提供者定期执行步骤201~213建立或者更新数据路由器的转发表。
通过上述过程,数据路由器能够建立转发表从而确保用户能够快速获取数据。
图3为本发明所述的网络稳定情况下的数据获取流程示意图。在数据路由器维护一个聚合表,一个聚合表项由接口域、数据名称域和数据块ID集合构成,接口域指向到达数据消费者的下一跳,数据名称域值为目标数据的数据名称,数据块ID集合域值记录未收到的目标数据块的条件下,如果聚合表项的数据块ID集合域值为空,那么删除该聚合表项;
在数据消费者U1通过自己的接口f与本地数据路由器R1相连,数据消息者U1需要获取由数据名称N1定义的数据C1的数据块,所述数据块的数据块ID集合为S1的情况下,如果网络性能稳定,那么数据消息者U1通过下述过程获取目标数据块:
步骤301:开始;
步骤302:数据消费者U1构建一个数据请求消息,数据名称域值为N1,消息类型域值为2,数据块ID集合为S1,序列号为0,负载为空;数据消费者U1从接口f发送该数据请求消息;
步骤303:数据路由器R1从自己的接口f1接收到数据请求消息后,判断自己的聚合表中是否存在数据名称域值为N1,接口域值为f1且数据块ID集合为数据请求消息中的数据块ID集合的超集的表项,如果是,执行步骤311,否则执行步骤304;
步骤304:数据路由器R1创建一个聚合表项,该聚合表项的数据名称域值为N1,数据块ID集合域值为接收到的数据请求消息中的数据块ID集合,接口域值为f1;
步骤305:数据路由器R1查看转发表,如果存在数据名称域值为N1且数据块ID集合为数据请求消息中的数据块ID集合的超集的转发表项,则数据路由器R1从该转发表项的接口转发接收到的数据请求消息;否则,数据路由器R1选择符合条件3的所有转发表项,对于每个选择的转发表项,数据路由器R1进行如下操作:构建一个数据请求消息,数据名称域值为N1,消息类型为2,数据块ID集合为该转发表项中的数据块ID集合域值,序列号为0,负载为空,数据路由器R1从该转发表项的接口域值发送构建数据请求消息;
条件3:所述数据转发表项的数据块ID集合的并集是接收到的数据请求消息中的数据块ID集合的超集;
步骤306:判断是数据路由器还是数据提供者从接口f2接收到数据请求消息,如果是数据提供者接收到数据请求消息,则执行步骤307,否则执行步骤308;
步骤307:数据提供者创建一个数据响应消息,该数据响应消息的数据名称域值为N1,消息类型为3,数据块ID集合为接收到的数据请求消息中的数据块ID集合,序列号为0,负载为提供的数据块,然后从接口f2发送该数据响应消息,执行步骤311;
步骤308:数据路由器判断聚合表中是否存在数据名称域值为N1,接口域值为f2且数据块ID集合为接收到的数据请求消息中的数据块ID集合的超集的表项,如果是,执行步骤311,否则执行步骤309;
步骤309:数据路由器创建一个聚合表项,该聚合表项的数据名称域值为N1,数据块ID集合域值为接收到的数据请求消息中的数据块ID集合,接口域值为f2;
步骤310:数据路由器查看转发表,如果存在数据名称域值为N1且数据块ID集合为数据请求消息中的数据块ID集合的超集的转发表项,则数据路由器从该转发表项的接口转发接收到的数据请求消息;否则,数据路由器选择符合条件3的所有转发表项,对于每个选择的转发表项,数据路由器进行如下操作:构建一个数据请求消息,数据名称域值为N1,消息类型为2,数据块ID集合为该转发表项中的数据块ID集合域值,序列号为0,负载为空,数据路由器从该转发表项的接口域值发送构建的数据请求消息,执行步骤306;
步骤311:判断是数据路由器还是数据消费者从接口f3接收到数据响应消息,如果是数据路由器接收到数据响应消息,则执行步骤312,否则执行步骤313;
步骤312:数据路由器从聚合表中选择所有数据名称域值为N1且数据块ID集合与数据响应消息中的数据块ID集合的交集不为空的表项,对于每个选择的聚合表项,数据路由器构建一个数据响应消息,数据响应消息的名称域值为N1,数据块ID集合为该聚合表项中的数据块ID集合与数据响应消息中的数据ID集合的交集,消息类型为3,序列号为0,负载为数据响应消息中的负载,数据路由器从该聚合表项中的接口域发送构建的数据响应消息,从该聚合表项的数据块ID集合中减去构建的数据响应消息的数据块ID集合,如果该聚合表项的数据块ID集合为空,则删除该聚合表项,执行步骤311;
步骤313:数据消费者U1获取并保存数据响应消息中的数据块;
步骤314:数据消费者U1整理所有收到的数据响应消息中从而获取数据块ID集合为S1的数据块;
步骤315:结束。
通过上述过程,数据消息者U1能够快速获取目标数据块。
图4为本发明所述的网络不稳定情况下的数据获取流程示意图。在数据消费者U1通过接口f与本地数据路由器R1相连,数据消息者U1需要获取由数据名称N1定义的数据C1的数据块,所述数据块的数据块ID集合为S1的条件下,如果网络性能不稳定,那么数据消费者U1通过下述过程获取目标数据块:
步骤401:开始;
步骤402:数据消费者U1产生一个随机数并构建一个数据请求消息,该数据请求消息的数据名称域值为N1,消息类型为2,数据块ID集合为S1,序列号为产生的随机数,负载为空,数据消费者U1从接口f发送该数据请求消息,同时保存四元组<构建的数据请求消息,接口f,产生的随机数,确认定时器>,启动确认定时器;
步骤403:数据路由器R1从自己的接口f1接收到数据请求消息后,从接口f1返回一个数据确认消息,该数据确认消息中的数据名称域值为N1,数据块ID集合为S1,消息类型为4,序列号为数据请求消息中的序列号,数据路由器R1判断聚合表中是否存在数据名称域值为N1,接口域值为f1且数据块ID集合为数据请求消息
一种快速的网络数据通信方法专利购买费用说明
Q:办理专利转让的流程及所需资料
A:专利权人变更需要办理著录项目变更手续,有代理机构的,变更手续应当由代理机构办理。
1:专利变更应当使用专利局统一制作的“著录项目变更申报书”提出。
2:按规定缴纳著录项目变更手续费。
3:同时提交相关证明文件原件。
4:专利权转移的,变更后的专利权人委托新专利代理机构的,应当提交变更后的全体专利申请人签字或者盖章的委托书。
Q:专利著录项目变更费用如何缴交
A:(1)直接到国家知识产权局受理大厅收费窗口缴纳,(2)通过代办处缴纳,(3)通过邮局或者银行汇款,更多缴纳方式
Q:专利转让变更,多久能出结果
A:著录项目变更请求书递交后,一般1-2个月左右就会收到通知,国家知识产权局会下达《转让手续合格通知书》。
动态评分
0.0