1.一种命名数据网络的实现方法,其特征在于,所述网络包括一组节点;一种类型的数据由名称标识,数据由N个数据块构成,N大于1的整数,每个数据块由数据块ID n1标识,n1=1…N;
如果一个节点有权限产生和提供一个数据块,则该节点称为该数据块的拥有者;一个拥有者能够产生、更新和提供两个以上的数据块,但是一个数据块只能被一个拥有者产生、更新和提供;
如果一个节点有权限获取一个数据块,则该节点称为该数据块的请求者;一个节点配置两个以上的接口,一个接口由接口ID唯一标识,一个接口与另外一个节点相连;
消息由消息类型定义,如下所示:
消息名称 消息类型值
拥有者发布消息 1
请求者发布消息 2
更新消息 3
推送消息 4
获取消息 5
数据消息 6
一个节点保存一个路由表,一个路由表项包含名称、数据块ID、接口ID、节点类型和生命周期;如果节点类型值为1,则表明该节点类型为拥有者,如果节点类型为0,则表明该节点类型为请求者;
数据DA1由名称NA1标识,包含N1个数据块,N1为大于正整数;拥有者P1有权限产生、更新和提供数据DA1中的两个以上的数据块,所述数据块的数据块ID构成数据块ID集合BS1;
一个拥有者发布消息包含消息类型、名称和数据块ID集合;
一个请求者发布消息包含消息类型、名称和数据块ID;
拥有者P1产生由名称NA1和数据块集合BS1所定义的数据块后,执行下述过程建立路由表:步骤101:开始;
步骤102:拥有者P1从每个接口发送拥有者发布消息,该拥有者发布消息中,消息类型值为1,名称为NA1,数据块ID集合为BS1;
步骤103:其他节点从接口f1接收到拥有者发布消息后,对于该拥有者发布消息中的数据块ID集合中的每个元素m1执行下述操作:该节点判断是否存在一个路由表项,该路由表项的名称等于该拥有者发布消息的名称,数据块ID等于m1,节点类型为1,生命周期大于阈值TH1,如果存在,则执行步骤114,否则执行步骤104;
步骤104:从接口f1接收到拥有者发布消息的节点判断是否存在一个路由表项,该路由表项的名称等于该拥有者发布消息的名称,数据块ID等于m1且节点类型等于1,如果存在,则执行步骤105,否则执行步骤106;
步骤105:从接口f1接收到拥有者发布消息的节点选择一个路由表项,该路由表项的名称等于该拥有者发布消息的名称,数据块ID等于m1且节点类型等于1,将该路由表项的接口ID更新为f1,将生命周期设置为最大值,从除了接口f1以外的每个接口转发该拥有者发布消息,执行步骤103;
步骤106:从接口f1接收到拥有者发布消息的节点创建一个路由表项,该路由表项的名称等于该拥有者发布消息的名称,数据块ID等于m1且节点类型等于1,接口ID等于f1,生命周期为最大值,从除了接口f1以外的每个接口转发该拥有者发布消息;如果该节点有权限获取由该拥有者发布消息的名称标识的数据中数据块ID等于m1的数据块,则执行步骤107,否则执行步骤103;
步骤107:从接口f1接收到拥有者发布消息的节点从接口f1发送一个请求者发布消息,该请求者发布消息的消息类型值为2,名称等于该拥有者发布消息的名称,数据块ID等于m1,执行步骤103;
步骤108:其他节点从接口f2接收到该请求者发布消息,如果该节点是拥有者P1,则执行步骤110,否则执行步骤109;
步骤109:从接口f2接收到该请求者发布消息的节点选择一个路由表项,该路由表项的名称和数据块ID分别等于该请求者发布消息的名称和数据块ID且节点类型为1,从该路由表项的接口ID所标识的接口转发该请求者发布消息,执行步骤108;
步骤110:从接口f2接收到该请求者发布消息的节点查看路由表,如果存在一个路由表项,该路由表项的名称和数据块ID分别等于该请求者发布消息的名称和数据块ID,节点类型为0且生命周期大于阈值TH1,则执行步骤114,否则执行步骤111;
步骤111:从接口f2接收到该请求者发布消息的节点查看路由表,如果存在一个路由表项,该路由表项的名称和数据块ID分别等于该请求者发布消息的名称和数据块ID并且节点类型为0,则执行步骤112,否则执行步骤113;
步骤112:从接口f2接收到该请求者发布消息的节点选择一个路由表项,该路由表项的名称和数据块ID分别等于该请求者发布消息的名称和数据块ID并且节点类型为0,将该路由表项的接口ID更新为f2,将生命周期设置为最大值,执行步骤114;
步骤113:从接口f2接收到该请求者发布消息的节点创建一个路由表项,该路由表项的名称和数据块ID分别等于该请求者发布消息的名称和数据块ID,节点类型为0,接口ID为f2,生命周期设置为最大值;
步骤114:结束。
2.根据权利要求1所述的一种命名数据网络的实现方法,其特征在于,一个更新消息包含消息类型、节点类型、名称和数据块ID;
数据DA1由名称NA1定义,包含N1个数据块;拥有者P1有权限产生、更新和提供数据DA1中的两个以上的数据块,这些数据块的数据块ID构成数据块ID集合BS1;对于数据块ID集合BS1中的每个元素m2,拥有者P1定期执行下述操作:步骤201:开始;
步骤202:拥有者P1选择所有符合条件1的路由表项,针对每个选中的路由表项,拥有者P1执行下述操作:拥有者P1将该路由表项的生命周期设置为最大值,从该路由表项的接口ID所标识的接口发送一个更新消息,该更新消息的消息类型值为3,节点类型为0,名称为NA1,数据块ID为m2;
条件1:路由表项的名称等于NA1,数据块ID等于m2,节点类型为0;
步骤203:节点接收到更新消息后,选择所有符合条件2的路由表项,如果选中的路由表项的个数为0,则执行步骤205;否则执行步骤204;
条件2:路由表项的名称、数据块ID和节点类型分别等于接收到的更新消息的名称、数据块ID和节点类型;
步骤204:接收到更新消息的节点选择所有符合条件2的路由表项,针对每个选中的路由表项,该节点执行下述操作:该节点将该路由表项的生命周期设置为最大值,从该路由表项的接口ID所标识的接口转发该更新消息,执行步骤203;
步骤205:结束。
3.根据权利要求1所述的一种命名数据网络的实现方法,其特征在于,数据DA1由名称NA1定义,包含N1个数据块;请求者C1有权限访问数据DA1中的数据块ID为m3的数据块,请求者C1定期执行下述操作:步骤301:开始;
步骤302:请求者C1选择一个路由表项,该路由表项的名称为NA1,数据块ID为m3,节点类型值为1,将该路由表项的生命周期设置为最大值,从该路由表项的接口ID所标识的接口发送一个更新消息,该更新消息的消息类型值为3,节点类型为1,名称为NA1,数据块ID为m3;
步骤303:节点接收到更新消息后,判断是否存在一个路由表项,该路由表项的名称、数据块ID和节点类型分别等于接收到的更新消息的名称、数据块ID和节点类型,是则执行步骤304,否则执行步骤305;
步骤304:接收到更新消息的节点选择存在一个路由表项,该路由表项的名称、数据块ID和节点类型分别等于接收到的更新消息的名称、数据块ID和节点类型,该节点将该路由表项的生命周期设置为最大值,从该路由表项的接口ID所标识的接口转发该更新消息,执行步骤303;
步骤305:结束。
4.根据权利要求1所述的一种命名数据网络的实现方法,其特征在于,一个推送消息包含消息类型、名称、数据块ID和负载;数据DA1由名称NA1定义,包含N1个数据块;拥有者P1有权限产生和更新数据DA1中的两个以上的数据块,这些数据块的数据块ID构成数据块ID集合BS1;对于数据块ID集合BS1中的每个元素m4,拥有者P1定期执行下述操作:步骤401:开始;
步骤402:拥有者P1选择所有符合条件3的路由表项,针对每个选中的路由表项,拥有者P1执行下述操作:拥有者P1从该路由表项的接口ID所标识的接口发送一个推送消息,该推送消息的消息类型值为4,名称为NA1,数据块ID为m4,负载为名称NA1和数据块ID m4定义的数据块;
条件3:路由表项的名称等于NA1,数据块ID等于m4,节点类型为0;
步骤403:节点接收到推送消息后,如果该节点有权限获取该推送消息的名称和数据块ID定义的数据块,则执行步骤404,否则执行步骤405;
步骤404:接收到推送消息的节点保存该推送消息负载中的数据块;
步骤405:接收到推送消息的节点选择所有符合条件4的路由表项,如果选中的路由表项的个数为0,则执行步骤407;否则执行步骤406;
条件4:路由表项的名称和数据块ID分别等于接收到的推送消息的名称和数据块ID,节点类型为0;
步骤406:接收到推送消息的节点针对每个选中的路由表项,该节点从该路由表项的接口ID所标识的接口转发该推送消息,执行步骤403;
步骤407:结束。
5.根据权利要求1所述的一种命名数据网络的实现方法,其特征在于,
获取消息包括消息类型、名称和数据块ID;
数据消息包括消息类型、名称、数据块ID和负载;
节点维护一个消息表,一个消息表项包含名称、数据块ID和接口ID;
数据DA1由名称NA1定义,包含N1个数据块;请求者C1有权限访问数据DA1中的数据块ID为m3的数据块,请求者C1执行下述操作获取该数据块:步骤501:开始;
步骤502:请求者C1选择一个路由表项,该路由表项的名称为NA1,数据块ID为m3,节点类型为1,从该路由表项的接口ID所标识的接口发送一个获取消息,该获取消息的消息类型值为5,名称为NA1,数据块ID为m3;
步骤503:其他节点从接口x1接收到该获取消息,如果该节点能够提供该获取消息中的名称和数据块ID所标识的数据块,则执行步骤508,否则执行步骤504;
步骤504:从接口x1接收到该获取消息的节点查看消息表,如果存在一个消息表项,该消息表项的名称和数据块ID分别等于该获取消息中的名称和数据块ID且接口ID等于x1,则执行步骤509,否则执行步骤505;
步骤505;从接口x1接收到该获取消息的节点查看消息表,如果存在一个消息表项,该消息表项的名称和数据块ID分别等于该获取消息中的名称和数据块ID,则执行步骤506,否则执行步骤507;
步骤506:从接口x1接收到该获取消息的节点创建一个消息表项,该消息表项的名称和数据块ID分别等于该获取消息中的名称和数据块ID且接口ID等于x1,执行步骤509;
步骤507:从接口x1接收到该获取消息的节点创建一个消息表项,该消息表项的名称和数据块ID分别等于该获取消息中的名称和数据块ID且接口ID等于x1,选择一个路由表项,该路由表项的名称和数据块ID分别等于该获取消息的名称和数据块ID,且节点类型为1,从选中的路由表项的接口ID所标识的接口转发该获取消息,执行步骤503;
步骤508:从接口x1接收到该获取消息的节点从接口x1发送一个数据消息,该数据消息的消息类型值为6,名称和数据块ID分别等于该获取消息的名称和数据块ID,负载为该获取消息的名称和数据块ID所标识的数据块;
步骤509:节点接收到该数据消息,如果该节点有权限获取该数据消息的名称和数据块ID所标识的数据块,则执行步骤510,否则执行步骤511;
步骤510:接收到数据消息的节点保存该数据消息负载中的数据块;
步骤511:接收到数据消息的节点查看消息表,选择所有符合条件5的消息表项,如果选中的消息表项的个数为0,则执行步骤513,否则执行步骤512;
条件5:消息表项的名称和数据块ID分别等于接收到的数据消息的名称和数据块ID;
步骤512:接收到数据消息的节点查看消息表,选择所有符合条件5的消息表项,针对每个选中的消息表项,该节点从该消息表项的接口ID所标识的接口转发该数据消息,删除该数据消息,执行步骤509;
步骤513:结束。