1.一种快速的网络数据通信方法,其特征在于,所述网络包括两个以上的节点和两个以上的数据路由器,一种类型的数据包括两个以上的数据块且由一个数据名称唯一定义,每个数据块由一个数据块ID唯一标识;数据消费者为有权限获取一种类型的数据的节点,数据提供者为有权提供一种类型的数据的节点;节点不具有路由转发功能,数据路由器具有路由转发功能;
每种消息结构包括五个部分:数据名称域、数据块ID集合、消息类型域、序列号以及负载;
消息类型分别为数据发布消息、数据请求消息、数据响应消息、数据确认消息以及不可达消息,对应消息类型域值分别为1、2、3、4以及5;数据路由器维护一个转发表,一个转发表项由接口域、数据名称域以及数据块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建立转发表。