[0079] 下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
[0080] 图1为本发明所述的建立路由表流程示意图。
[0081] 图2为本发明所述的更新路由表流程示意图。
[0082] 图3为本发明所述的修改路由表流程示意图。
[0083] 图4为本发明所述的数据推送流程示意图。
[0084] 图5为本发明所述的数据通信流程示意图。具体实施方式:
[0085] 本发明提供了一种命名数据网络的实现方法,节点通过本发明提供的方法能够快速获取数据,从而降低数据通信延迟和代价,提高服务质量。本发明可应用于农业工程化、智能医疗等诸多领域,具有广泛的应用前景。
[0086] 图1为本发明所述的建立路由表流程示意图。所述网络包括一组节点;一种类型的数据由名称标识,数据由N个数据块构成,N大于1的整数,每个数据块由数据块ID n1标识,n1=1…N;
[0087] 如果一个节点有权限产生和提供一个数据块,则该节点称为该数据块的拥有者;一个拥有者能够产生、更新和提供两个以上的数据块,但是一个数据块只能被一个拥有者产生、更新和提供,数据块例如是英文版的电影或者中文版的电影;
[0088] 如果一个节点有权限获取一个数据块,则该节点称为该数据块的请求者;一个节点配置两个以上的接口,一个接口由接口ID唯一标识,一个接口与另外一个节点相连;
[0089] 消息由消息类型定义,如下所示:
[0090]消息名称 消息类型值
拥有者发布消息 1
请求者发布消息 2
更新消息 3
推送消息 4
获取消息 5
数据消息 6
[0091] 一个节点保存一个路由表,一个路由表项包含名称、数据块ID、接口ID、节点类型和生命周期;如果节点类型值为1,则表明该节点类型为拥有者,如果节点类型为0,则表明该节点类型为请求者;
[0092] 数据DA1由名称NA1标识,包含N1个数据块,N1为大于正整数;拥有者P1有权限产生、更新和提供数据DA1中的两个以上的数据块,所述数据块的数据块ID构成数据块ID集合BS1;
[0093] 一个拥有者发布消息包含消息类型、名称和数据块ID集合;
[0094] 一个请求者发布消息包含消息类型、名称和数据块ID;
[0095] 拥有者P1产生由名称NA1和数据块集合BS1所定义的数据块后,执行下述过程建立路由表:
[0096] 步骤101:开始;
[0097] 步骤102:拥有者P1从每个接口发送拥有者发布消息,该拥有者发布消息中,消息类型值为1,名称为NA1,数据块ID集合为BS1;
[0098] 步骤103:其他节点从接口f1接收到拥有者发布消息后,对于该拥有者发布消息中的数据块ID集合中的每个元素m1执行下述操作:该节点判断是否存在一个路由表项,该路由表项的名称等于该拥有者发布消息的名称,数据块ID等于m1,节点类型为1,生命周期大于阈值TH1,阈值TH1取值范围为最大生命周期的90%-95%,如果存在,则执行步骤108,否则执行步骤104;
[0099] 步骤104:从接口f1接收到拥有者发布消息的节点判断是否存在一个路由表项,该路由表项的名称等于该拥有者发布消息的名称,数据块ID等于m1且节点类型等于1,如果存在,则执行步骤105,否则执行步骤106;
[0100] 步骤105:从接口f1接收到拥有者发布消息的节点选择一个路由表项,该路由表项的名称等于该拥有者发布消息的名称,数据块ID等于m1且节点类型等于1,将该路由表项的接口ID更新为f1,将生命周期设置为最大值,从除了接口f1以外的每个接口转发该拥有者发布消息,执行步骤103;
[0101] 步骤106:从接口f1接收到拥有者发布消息的节点创建一个路由表项,该路由表项的名称等于该拥有者发布消息的名称,数据块ID等于m1且节点类型等于1,接口ID等于f1,生命周期为最大值,从除了接口f1以外的每个接口转发该拥有者发布消息;如果该节点有权限获取由该拥有者发布消息的名称和数据块ID m1等于的数据块,则执行步骤107,否则执行步骤103;
[0102] 步骤107:从接口f1接收到拥有者发布消息的节点从接口f1发送一个请求者发布消息,该请求者发布消息的消息类型值为1,名称等于该拥有者发布消息的名称,数据块ID等于m1,执行步骤103;
[0103] 步骤108:其他节点从接口f2接收到该请求者发布消息,如果该节点是拥有者P1,则执行步骤110,否则执行步骤109;
[0104] 步骤109:从接口f2接收到该请求者发布消息的节点选择一个路由表项,该路由表项的名称和数据块ID分别等于该请求者发布消息的名称和数据块ID且节点类型为1,从该路由表项的接口ID所标识的接口转发该请求者发布消息,执行步骤108;
[0105] 步骤110:从接口f2接收到该请求者发布消息的节点查看路由表,如果存在一个路由表项,该路由表项的名称和数据块ID分别等于该请求者发布消息的名称和数据块ID,节点类型为0且生命周期大于阈值TH1,则执行步骤114,否则执行步骤111;
[0106] 步骤111:从接口f2接收到该请求者发布消息的节点查看路由表,如果存在一个路由表项,该路由表项的名称和数据块ID分别等于该请求者发布消息的名称和数据块ID并且节点类型为0,则执行步骤112,否则执行步骤113;
[0107] 步骤112:从接口f2接收到该请求者发布消息的节点选择一个路由表项,该路由表项的名称和数据块ID分别等于该请求者发布消息的名称和数据块ID并且节点类型为0,将该路由表项的接口ID更新为f2,将生命周期设置为最大值,执行步骤114;
[0108] 步骤113:从接口f2接收到该请求者发布消息的节点创建一个路由表项,该路由表项的名称和数据块ID分别等于该请求者发布消息的名称和数据块ID,节点类型为0,接口ID为f2,生命周期设置为最大值;
[0109] 步骤114:结束。
[0110] 拥有者通过上述过程建立请求者到达自己的路由路径从而请求者能够获取所需数据块,同时,请求者通过上述过程建立拥有者到达自己的路由路径从而拥有者在更新数据块后实现数据块的实时推送,从而确保请求者快速及时或者最新数据;上述过程通过节点类型同时建立了到达请求者和拥有者的路由路径,同时通过生存时间来确保路由表项的实时性和有效性。
[0111] 图2为本发明所述的更新路由表流程示意图。一个更新消息包含消息类型、节点类型、名称和数据块ID;
[0112] 数据DA1由名称NA1定义,包含N1个数据块;拥有者P1有权限产生、更新和提供数据DA1中的两个以上的数据块,这些数据块的数据块ID构成数据块ID集合BS1;对于数据块ID集合BS1中的每个元素m2,拥有者P1定期执行下述操作:
[0113] 步骤201:开始;
[0114] 步骤202:拥有者P1选择所有符合条件1的路由表项,针对每个选中的路由表项,拥有者P1执行下述操作:拥有者P1将该路由表项的生命周期设置为最大值,从该路由表项的接口ID所标识的接口发送一个更新消息,该更新消息的消息类型值为3,节点类型为0,名称为NA1,数据块ID为m2;
[0115] 条件1:路由表项的名称等于NA1,数据块ID等于m2,节点类型为0;
[0116] 步骤203:节点接收到更新消息后,选择所有符合条件2的路由表项,如果选中的路由表项的个数为0,则执行步骤205;否则执行步骤204;
[0117] 条件2:路由表项的名称、数据块ID和节点类型分别等于接收到的更新消息的名称、数据块ID和节点类型;
[0118] 步骤204:接收到更新消息的节点选择所有符合条件2的路由表项,针对每个选中的路由表项,该节点执行下述操作:该节点将该路由表项的生命周期设置为最大值,从该路由表项的接口ID所标识的接口转发该更新消息,执行步骤203;
[0119] 步骤205:结束。
[0120] 拥有者通过上述过程更新所有到达请求者的路由路径,从而确保这些路由路径的有效性和实时性,由于拥有者通过自己到达请求者的路由路径进行数据推送,因此大幅度提高了数据推送的成功率,降低了数据推送的延迟和代价。
[0121] 图3为本发明所述的修改路由表流程示意图。数据DA1由名称NA1定义,包含N1个数据块;请求者C1有权限访问数据DA1中的数据块ID为m3的数据块,请求者C1定期执行下述操作:
[0122] 步骤301:开始;
[0123] 步骤302:请求者C1选择一个路由表项,该路由表项的名称为NA1,数据块ID为m3,节点类型值为1,将该路由表项的生命周期设置为最大值,从该路由表项的接口ID所标识的接口发送一个更新消息,该更新消息的消息类型值为3,节点类型为1,名称为NA1,数据块ID为m3;
[0124] 步骤303:节点接收到更新消息后,判断是否存在一个路由表项,该路由表项的名称、数据块ID和节点类型分别等于接收到的更新消息的名称、数据块ID和节点类型,是则执行步骤304,否则执行步骤305;
[0125] 步骤304:接收到更新消息的节点选择存在一个路由表项,该路由表项的名称、数据块ID和节点类型分别等于接收到的更新消息的名称、数据块ID和节点类型,该节点将该路由表项的生命周期设置为最大值,从该路由表项的接口ID所标识的接口转发该更新消息,执行步骤303;
[0126] 步骤305:结束。
[0127] 请求者通过上述过程更新拥有者的路由路径,从而确保这些路由路径的有效性和实时性,由于请求者通过自己到达拥有者的路由路径获取数据,因此路由表项的更新操作大幅度提高了请求者获取数据的成功率,降低了获取数据的延迟和代价。
[0128] 图4为本发明所述的数据推送流程示意图。一个推送消息包含消息类型、名称、数据块ID和负载;数据DA1由名称NA1定义,包含N1个数据块;拥有者P1有权限产生和更新数据DA1中的两个以上的数据块,这些数据块的数据块ID构成数据块ID集合BS1;对于数据块ID集合BS1中的每个元素m4,拥有者P1定期执行下述操作:
[0129] 步骤401:开始;
[0130] 步骤402:拥有者P1选择所有符合条件3的路由表项,针对每个选中的路由表项,拥有者P1执行下述操作:拥有者P1从该路由表项的接口ID所标识的接口发送一个推送消息,该推送消息的消息类型值为4,名称为NA1,数据块ID为m4,负载为名称NA1和数据块ID m4定义的数据块;
[0131] 条件3:路由表项的名称等于NA1,数据块ID等于m4,节点类型为0;
[0132] 步骤403:节点接收到推送消息后,如果该节点由权限获取该推送消息的名称和数据块ID定义的数据块,则执行步骤404,否则执行步骤405;
[0133] 步骤404:接收到推送消息的节点保存该推送消息负载中的数据块;
[0134] 步骤405:接收到推送消息的节点选择所有符合条件4的路由表项,如果选中的路由表项的个数为0,则执行步骤407;否则执行步骤406;
[0135] 条件4:路由表项的名称和数据块ID分别等于接收到的推送消息的名称和数据块ID,节点类型为0;
[0136] 步骤406:接收到推送消息的节点选择所有符合条件4的路由表项,针对每个选中的路由表项,该节点从该路由表项的接口ID所标识的接口转发该推送消息,执行步骤403;
[0137] 步骤407:结束。
[0138] 拥有者通过上述过程定期将数据块推送到请求者,从而确保请求者能够及时获取更新后的数据,从而降低请求获取数据的延迟和代价,同时能够确请求者获取数据的实时性和有效性。
[0139] 图5为本发明所述的数据通信流程示意图。获取消息包括消息类型、名称和数据块ID;
[0140] 数据消息包括消息类型、名称、数据块ID和负载;
[0141] 节点维护一个消息表,一个消息表项包含名称、数据块ID和接口ID;
[0142] 数据DA1由名称NA1定义,包含N1个数据块;请求者C1有权限访问数据DA1中的数据块ID为m3的数据块,请求者C1执行下述操作获取该数据块:
[0143] 步骤501:开始;
[0144] 步骤502:请求者C1选择一个路由表项,该路由表项的名称为NA1,数据块ID为m3,节点类型为1,从该路由表项的接口ID所标识的接口发送一个获取消息,该获取消息的消息类型值为5,名称为NA1,数据块ID为m3;
[0145] 步骤503:其他节点从接口x1接收到该获取消息,如果该节点能够提供该获取消息中的名称和数据块ID所标识的数据块,则执行步骤508,否则执行步骤504;
[0146] 步骤504:从接口x1接收到该获取消息的节点查看消息表,如果存在一个消息表项,该消息表项的名称和数据块ID分别等于该获取消息中的名称和数据块ID且接口ID等于x1,则执行步骤509,否则执行步骤505;
[0147] 步骤505;从接口x1接收到该获取消息的节点查看消息表,如果存在一个消息表项,该消息表项的名称和数据块ID分别等于该获取消息中的名称和数据块ID,则执行步骤506,否则执行步骤507;
[0148] 步骤506:从接口x1接收到该获取消息的节点创建一个消息表项,该消息表项的名称和数据块ID分别等于该获取消息中的名称和数据块ID且接口ID等于x1,执行步骤509;
[0149] 步骤507:从接口x1接收到该获取消息的节点创建一个消息表项,该消息表项的名称和数据块ID分别等于该获取消息中的名称和数据块ID且接口ID等于x1,选择一个路由表项,该路由表项的名称和数据块ID分别等于该获取消息的名称和数据块ID,且节点类型为1,从选中的路由表项的接口ID所标识的接口转发该获取消息,执行步骤503;
[0150] 步骤508:从接口x1接收到该获取消息的节点从接口x1发送一个数据消息,该数据消息的消息类型值为6,名称和数据块ID分别等于该获取消息的名称和数据块ID,负载为该获取消息的名称和数据块ID所标识的数据块;
[0151] 步骤509:节点接收到该数据消息,如果该节点由权限获取该数据消息的名称和数据块ID所标识的数据块,则执行步骤510,否则执行步骤511;
[0152] 步骤510:接收到数据消息的节点保存该数据消息负载中的数据块;
[0153] 步骤511:接收到数据消息的节点查看消息表,选择所有符合条件5的消息表项,如果选中的消息表项的个数为0,则执行步骤513,否则执行步骤512;
[0154] 条件5:消息表项的名称和数据块ID分别等于接收到的数据消息的名称和数据块ID;
[0155] 步骤512:接收到数据消息的节点查看消息表,选择所有符合条件5的消息表项,针对每个选中的消息表项,该节点从该消息表项的接口ID所标识的接口转发该数据消息,删除该数据消息,执行步骤509;
[0156] 步骤513:结束。
[0157] 请求者通过上述过程能够获取所需数据块,上述过程通过消息表实现消息聚合,从而使得两个以上的请求者通过一次数据通信操作即可获取数据,因此降低了数据通信延迟和代价,同时,这些请求者可以从中间节点分享数据,从而进一步降低了获取数据的延迟和代价。
[0158] 实施例1
[0159] 基于表1的仿真参数,本实施例模拟了本发明中的一种命名数据网络的实现方法,性能分析如下:当传输数据量增加时,网络性能下降,数据通信成功率有所增加,当传输数据量降低时,网络性能增强,数据通信成功率有所降低,数据获取的平均成功率为98.63%。
[0160] 表1仿真参数
[0161]
[0162] 本发明提供了一种命名数据网络的实现方法的思路,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部份均可用现有技术加以实现。