1.一种高效的车联网数据通信方法,其特征在于,所述车联网包括接入节点和车辆节点,每个接入节点的坐标具有唯一性,一个接入节点由接入节点ID唯一标识,其值等于该接入节点的坐标;一个接入节点和一个以上的车辆节点构成一个子网,所述车辆节点在所有的接入节点中距离自己所在子网的接入节点距离最近;
一种数据由一个名称唯一标识,一个名称由坐标和名称ID构成;一种数据由一个以上的数据分片构成,每个数据分片由分片ID唯一标识;
车辆节点和接入节点通过消息实现通信,一个消息包括名称域、源坐标域、目的坐标域和负载;
对于每种数据,接入节点维护一个数据表,一个数据表项包含名称域、分片ID域、分片域和生命周期域;其中,生命周期域值为预先设置的值;如果接入节点检测到一个数据表项的生命周期衰减为0,则删除该数据表项;
在数据C1由名称NA1唯一标识,名称NA1中的坐标为(x1,y1),名称ID为NID1,数据C1由N1个数据分片构成,每个数据分片由分片ID z1唯一标识的条件下,z1取值1~N1,将所述分片ID的集合为SIDS1,如公式(1)所示;
接入节点AP1的坐标为(x1,y1),位于子网B1中,它通过下述过程产生数据C1:步骤101:开始;
步骤102:接入节点AP1发送一个数据产生消息,该数据产生消息的名称域为NA1,源坐标为(x1,y1),目的坐标为空,负载为集合SIDS1;
步骤103:车辆节点接收到该数据产生消息后,判断该车辆节点是否位于子网B1中,如果是则执行步骤105,否则执行步骤104;
步骤104:接收到数据产生消息的车辆节点丢弃该数据产生消息,执行步骤110;
步骤105:判断接收到该数据产生消息的车辆节点能否提供该数据产生消息负载中的分片集合中的部分分片ID所标识的数据分片,如果能则执行步骤106,否则执行步骤109;
步骤106:接收到该数据产生消息的车辆节点对于每一个能提供的数据产生消息负载中的分片集合中的分片ID所标识的数据分片执行下述操作:创建一个二元组<分片,分片ID>,其中分片值为该分片ID所标识的分片,分片ID值等于所能提供的数据产生消息负载中的分片集合中的分片ID,从该数据产生消息负载中的集合中删除该分片ID;
步骤107:接收到该数据产生消息的车辆节点返回一个数据产生响应消息,该数据产生响应消息中的名称域值等于该数据产生消息中的名称域值,源坐标为车辆节点自己的坐标,目的坐标等于该数据产生消息中的源坐标,负载为所有创建的二元组;
步骤108:接收到该数据产生消息的车辆节点查看数据产生消息负载中的集合是否为空,如果是,则执行步骤110,否则执行步骤109;
步骤109:接收到该数据产生消息的车辆节点将该数据产生消息转发给邻居车辆节点,执行步骤103;
步骤110:接入节点AP1接收到数据产生响应消息后,对于数据产生响应消息负载中的每个二元组执行下述操作:接入节点AP1查看数据表,如果存在一个数据表项,该数据表项的名称域等于该数据产生响应消息中的名称,且分片ID等于该二元组的分片ID,接入节点AP1将该数据表项的生命周期设置为最大值;否则接入节点AP1创建一个数据表项,该数据表项的名称域等于该数据产生响应消息中的名称,分片ID和分片分别等于该二元组的分片ID和分片,生命周期设置为最大值;
步骤111:结束。
2.根据权利要求1所述的一种高效的车联网数据通信方法,其特征在于,每个接入节点维护一个接入节点表,每个接入节点表项由接入节点ID域、名称域以及分片ID集合域构成;
接入节点AP1创建数据C1后,创建一个接入节点表项,该接入节点表项的接入节点ID域值为接入节点AP1的坐标,名称域值为NA1,分片ID集合域值为SIDS1;
在接入节点AP1的接入节点ID等于坐标(x1,y1),接入节点AP2的接入节点ID等于坐标(x2,y2)的条件下,如果条件1或者2满足,则接入节点AP1的接入节点ID大于接入节点AP2的接入节点ID;如果条件3或者4满足,则接入节点AP2的接入节点ID大于接入节点AP1的接入节点ID;
条件1:x1>x2;
条件2:x1=x2且y1>y2;
条件3:x2>x1;
条件4:x1=x2且y2>y1;
接入节点AP1有nAP个邻居接入节点,接入节点AP1按照升序对nAP个邻居接入节点的接入节点ID进行排序;如果邻居接入节点APy的接入节点ID在所有邻居接入节点的接入节点ID中所排序的位置为ny,1≤y≤nAP,则接入节点AP1根据公式(2)计算分配给接入节点APy的分片的分片ID集合Sy;数据C1名称NA1唯一标识,名称NA1中的坐标为(x1,y1),名称ID为NID1,数据C1由N1个数据分片构成;X为常量,其值大于 小于等于 为i为接入节点ID变量,该值的取值范围为1到X;
接入节点AP1的坐标为(x1,y1),邻居接入节点APy的坐标为(x’,y’),接入节点AP1执行下述过程将部分分片分配给邻居接入节点APy:步骤201:开始;
步骤202:对于分片ID集合Sy中的每一个分片ID,AP1选择一个数据表项,该数据表项的名称为NA1,分片ID等于分片ID集合Sy中的分片ID;
步骤203:接入节点AP1构建一个分配消息,该分配消息的名称域值为NA1,源坐标域值为(x1,y1),目的坐标域值为(x’,y’),负载为所有选择的数据表项;接入节点AP1将该分配消息转发给距离目的坐标距离最近的邻居接入节点;
步骤204:判断是否接入节点APy接收到分配消息,是则执行步骤206,否则执行步骤205;
步骤205:接收到分配消息的接入节点将该分配消息转发给距离目的坐标距离最近的邻居接入节点,执行步骤204;
步骤206:接入节点APy接收到分配消息后,将分配消息负载中的所有数据表项保存到数据表中;
步骤207:结束。
3.根据权利要求2所述的一种高效的车联网数据通信方法,其特征在于,每个接入节点定期执行下述过程更新接入节点表:步骤301:开始;
步骤302:接入节点创建一个名称集合NS1,名称集合NS1包含该接入节点的所有数据表项的名称域值;对于名称集合NS1中的每个名称,接入节点创建一个二元组<名称,分片ID集合>,其中名称域值等于名称集合NS1中的名称,分片ID集合包含名称域值等于该二元组中的名称的所有数据表项的分片ID;
步骤303:接入节点发送一个发布消息,该发布消息的名称域值为空,源坐标等于该接入节点的坐标,目的坐标为空,负载为创建的所有二元组;
步骤304:接收到发布消息的接入节点查看接入节点表,同时设置一个变量u,变量u的初始值为0;
对于该发布消息负载中的每个二元组,如果该接入节点存在一个接入节点表项,该接入节点表项的接入节点ID等于该发布消息的源坐标,名称域值和分片ID集合分别等于该二元组的名称域值和分片ID集合,则不执行任何操作;
如果该接入节点存在一个接入节点表项,该接入节点表项的接入节点ID等于该发布消息的源坐标,名称域值等于该二元组的名称域值,该接入节点则将该接入节点表项中的分片ID集合更新为二元组中的分片ID集合,同时将变量u设置为1;
如果该接入节点不存在接入节点ID等于该发布消息的源坐标且名称域值等于该二元组的名称域值的接入节点表项,该接入节点则将创建一个接入节点表项,该接入节点表项的接入节点ID等于该发布消息的源坐标,名称域值和分片ID集合分别等于该二元组的名称域值和分片ID集合,同时将变量u设置为1;
步骤305:变量u如果等于1,则执行步骤306,否则执行步骤307;
步骤306:接收到发布消息的接入节点将该发布消息转发到邻居接入节点,执行步骤
304;
步骤307:结束。
4.根据权利要求2所述的一种高效的车联网数据通信方法,其特征在于,数据C1由名称NA1唯一标识,名称NA1中的坐标为(x1,y1),名称ID为NID1,数据C1由N1个数据分片构成,每个数据分片由分片ID z1唯一标识,z1取值1~N1,所述分片ID的集合为SIDS1;
接入节点AP1的坐标为(x1,y1),位于子网B1中,车辆节点V1位于子网B1内,它通过下述过程获取数据C1:步骤401:开始;
步骤402:车辆节点V1构建一个请求消息,该请求消息的名称域值为NA1,源坐标为车辆节点V1的坐标,目的坐标为(x1,y1),负载为空;车辆节点V1将该请求消息转发给与目的坐标距离最近的邻居车辆节点或者接入节点AP1;
步骤403:判断是否接入节点AP1接收到该请求消息,是则执行步骤405,否则执行步骤
404;
步骤404:接收到请求消息的车辆节点将该请求消息转发到与目的坐标距离最近的邻居车辆节点,执行步骤403;
步骤405:接入节点AP1接收到该请求消息后,选择N1个数据表项,所述N1个数据表项的名称域值等于该请求消息中的名称且任两个数据表项的分片ID都不相同,然后接入节点AP1构建一个响应消息,该响应消息的名称域值等于该请求消息的名称域值,源坐标等于自己的坐标,目的坐标等于该请求消息中的源坐标,负载为选择的N1个数据表项;接入节点AP1将该响应消息转发给与目的坐标距离最近的邻居车辆节点;
步骤406:判断是否车辆节点V1接收到响应消息,是则执行步骤408,否则执行步骤407;
步骤407:接收到响应消息的车辆节点将该响应消息转发到与目的坐标距离最近的邻居车辆节点,执行步骤406;
步骤408:车辆节点V1将响应消息中的N1个数据表项的分片域值构建成数据C1并保存数据C1;
步骤409:结束。
5.根据权利要求2所述的一种高效的车联网数据通信方法,其特征在于,每个车辆节点启动后,构建一个路线集合,该路线集合包含此次行程所经过的所有接入节点的接入节点ID;
数据C1由名称NA1唯一标识,名称NA1中的坐标为(x1,y1),名称ID为NID1,数据C1由N1个数据分片构成,每个数据分片由分片ID z1唯一标识,z1取值1~N1,所述分片ID的集合为SIDS1;
接入节点AP1的坐标为(x1,y1),位于子网B1中,接入节点AP2的坐标为(x2,y2),位于子网B2中,车辆节点V2位于子网B2内;如果车辆节点V2的路线集合RS2包含接入节点AP1的接入节点ID,车辆节点V2则执行下述过程获取数据C1:步骤501:开始;
步骤502:车辆节点V2构建一个请求消息,该请求消息的名称域值为NA1,源坐标为车辆节点V2的坐标,目的坐标为(x2,y2),负载为路线集合RS2;车辆节点V2将该请求消息转发给与目的坐标距离最近的邻居车辆节点或者接入节点AP2,同时创建一个分片ID集合SIDS2,其初始值为空;
步骤503:判断是否接入节点AP2接收到该请求消息,是则执行步骤505,否则执行步骤
504;
步骤504:接收到请求消息的车辆节点将该请求消息转发到与目的坐标距离最近的邻居车辆节点,执行步骤503;
步骤505:接入节点AP2接收到该请求消息后,判断自己是否能提供该请求消息名称域值所定义的数据的部分分片,如果能,则执行步骤506,否则执行步骤509;
步骤506:接入节点AP2选择所有名称域值等于该请求消息中的名称的数据表项,构建一个响应消息,该响应消息的名称域值等于该请求消息的名称域值,源坐标等于自己的坐标,目的坐标等于该请求消息中的源坐标,负载为选择的N1个数据表项;接入节点AP2将该响应消息转发给与目的坐标距离最近的邻居车辆节点;
步骤507:判断是否车辆节点V2接收到该响应消息,是则执行步骤514,否则执行步骤
508;
步骤508:接收到响应消息的车辆节点将该响应消息转发到与目的坐标距离最近的邻居车辆节点,执行步骤507;
步骤509:接入节点AP2接收到该请求消息后,对于该请求消息负载中的路线集合RS2中的每一个接入节点ID执行下述操作:如果接入节点AP2的接入节点表中存在一个接入节点表项,该接入节点表项的名称域值等于该请求消息的名称域值,接入节点ID域值等于路线集合RS2中的接入节点ID,则选中该接入节点表项;
步骤510:接入节点AP2发送一个索引消息,该索引消息的名称域值等于接收到的请求消息的名称域值,源坐标等于自己的坐标,目的坐标等于接收到的请求消息中的源坐标,负载为所有选择的接入节点表项;接入节点AP2将该索引消息转发给与目的坐标距离最近的邻居车辆节点;
步骤511:判断是否车辆节点V2接收到该索引消息,是则执行步骤513,否则执行步骤
512;
步骤512:接收到索引消息的车辆节点将该索引消息转发到与目的坐标距离最近的邻居车辆节点,执行步骤511;
步骤513:车辆节点V2接收到索引消息后,保存索引消息中的所有接入节点表项,执行步骤515;
步骤514:车辆节点V2接收到该响应消息后,保存该响应消息负载中的所有数据表项并将所有数据表项中的分片ID加入到集合SIDS2中;判断集合SIDS2的元素个数是否等于N1,是则执行步骤520,否则执行步骤515;
步骤515:车辆节点V2移动到新的子网后,查看索引消息中的接入节点表项,判断是否存在一个接入节点表项,该接入节点表项的名称域值等于NA1,接入节点ID域值等于新的子网中的新接入节点的接入节点ID,且分片ID集合与集合SIDS2之差不为空,是则执行步骤
517,否则执行步骤516;
步骤516:车辆节点V2按照路线集合RS2继续行使,执行步骤515;
步骤517:车辆节点V2选中一个接入节点表项,该接入节点表项的名称域值等于NA1,接入节点ID域值等于新的子网中的新接入节点的接入节点ID,车辆节点V2构建一个请求消息,该请求消息的名称域值为NA1,源坐标为自己的坐标,目的坐标为当前所在子网的接入节点的坐标,负载为选中的接入节点表项的分片ID集合与集合SIDS2之差;车辆节点V2将该请求消息转发给与目的坐标距离最近的邻居车辆节点或者当前所在子网的接入节点;目的接入节点接收到该请求消息后,对于该请求消息负载中的分片ID集合中的每一个分片ID选择一个数据表项,该数据表项的名称域值等于该请求消息中的名称且分片ID等于分片集合中的分片ID;目的接入节点构建一个响应消息,该响应消息的名称域值等于该请求消息的名称域值,源坐标等于自己的坐标,目的坐标等于该请求消息中的源坐标,负载为选择的所有数据表项;目的接入节点将该响应消息转发给与目的坐标距离最近的邻居车辆节点;
步骤518:判断是否车辆节点V2接收到该响应消息,是则执行步骤514,否则执行步骤
519;
步骤519:接收到响应消息的车辆节点将该响应消息转发到与目的坐标距离最近的邻居车辆节点,执行步骤518;
步骤520:车辆节点V2将保存的所有数据表项的分片域值构建成数据C1并保存数据C1;
步骤521:结束。
6.根据权利要求2所述的一种高效的车联网数据通信方法,其特征在于,数据C1由名称NA1唯一标识,名称NA1中的坐标为(x1,y1),名称ID为NID1,数据C1由N1个数据分片构成,每个数据分片由分片ID z1唯一标识,z1取值范围1~N1,所述分片ID的集合为SIDS1;
接入节点AP1的坐标为(x1,y1),位于子网B1中,接入节点AP2的坐标为(x2,y2),位于子网B2中,车辆节点V2位于子网B2内;如果车辆节点V2的路线集合RS2不包含接入节点AP1的接入节点ID,车辆节点V2则执行下述过程获取数据C1:步骤601:开始;
步骤602:车辆节点V2构建一个请求消息,该请求消息的名称域值为NA1,源坐标为车辆节点V2的坐标,目的坐标为(x2,y2),负载为路线集合RS2;车辆节点V2将该请求消息转发给与目的坐标距离最近的邻居车辆节点或者接入节点AP2,同时创建一个分片ID集合SIDS2,其初始值为空;
步骤603:判断是否接入节点AP2接收到该请求消息,是则执行步骤605,否则执行步骤
604;
步骤604:接收到请求消息的车辆节点将该请求消息转发到与目的坐标距离最近的邻居车辆节点,执行步骤603;
步骤605:接入节点AP2接收到该请求消息后,判断自己是否能提供该请求消息名称域值所定义的数据的部分分片,如果能,则执行步骤606,否则执行步骤609;
步骤606:接入节点AP2选择所有名称域值等于该请求消息中的名称的数据表项,构建一个响应消息,该响应消息的名称域值等于该请求消息的名称域值,源坐标等于自己的坐标,目的坐标等于该请求消息中的源坐标,负载为选择的N1个数据表项;接入节点AP2将该响应消息转发给与目的坐标距离最近的邻居车辆节点;
步骤607:判断是否车辆节点V2接收到该响应消息,则执行步骤614,否则执行步骤608;
步骤608:接收到响应消息的车辆节点将该响应消息转发到与目的坐标距离最近的邻居车辆节点,执行步骤607;
步骤609:接入节点AP2接收到该请求消息后,对于该请求消息负载中的路线集合RS2中的每一个接入节点ID执行下述操作:如果接入节点AP2的接入节点表中存在一个接入节点表项,该接入节点表项的名称域值等于该请求消息的名称域值,接入节点ID域值等于路线集合RS2中的接入节点ID,则选中该接入节点表项;接入节点AP2发送一个索引消息,该索引消息的名称域值等于接收到的请求消息的名称域值,源坐标等于自己的坐标,目的坐标等于接收到的请求消息中的源坐标,负载为所有选择的接入节点表项;接入节点AP2将该索引消息转发给与目的坐标距离最近的邻居车辆节点;如果选中的所有接入节点表项的分片ID集合等于集合SIDS1,则执行步骤611,否则执行步骤610;
步骤610:接入节点AP2构建一个请求消息,该请求消息的名称域值为NA1,源坐标为自己的坐标,目的坐标为(x1,y1),负载为集合SIDS1与选中的所有接入节点表项的分片ID集合之差;接入节点AP2将该请求消息转发给与目的坐标距离最近的邻居接入节点;邻居接入节点同样将该请求消息转发给与目的坐标距离最近的邻居接入节点;最终,接入节点AP1接收到请求消息,对于该请求消息负载中的分片ID集合中的每一个分片ID选择一个数据表项,该数据表项的名称域值等于该请求消息中的名称且分片ID等于分片集合中的分片ID;
接入节点AP1构建一个响应消息,该响应消息的名称域值等于该请求消息的名称域值,源坐标等于自己的坐标,目的坐标等于该请求消息中的源坐标,负载为选择的所有数据表项;接入节点AP1将该响应消息转发给与目的坐标距离最近的邻居接入节点;邻居接入节点同样将该响应消息转发给与目的坐标距离最近的邻居接入节点;
最终,接入节点AP2接收到响应消息后,构建一个新的响应消息,该响应消息的名称域值等于接收到的请求消息的名称域值,源坐标等于接入节点AP2自己的坐标,目的坐标等于接收到的请求消息中的源坐标,负载为接收到的响应消息中的负载;
接入节点AP2将该响应消息转发给与目的坐标距离最近的邻居车辆节点;邻居接入节点同样将该响应消息转发给与目的坐标距离最近的邻居车辆节点;最终,该响应消息到达车辆节点V2,执行步骤614;
步骤611:判断是否车辆节点V2接收到该索引消息,是则执行步骤613,否则执行步骤
612;
步骤612:接收到索引消息的车辆节点将该索引消息转发到与目的坐标距离最近的邻居车辆节点,执行步骤611;
步骤613:车辆节点V2接收到索引消息后,保存索引消息中的所有接入节点表项,执行步骤615;
步骤614:车辆节点V2接收到该响应消息后,保存该响应消息负载中的所有数据表项并将所有数据表项中的分片ID加入到集合SIDS2中;如果集合SIDS2的元素个数等于N1,则执行步骤620,否则执行步骤615;
步骤615:车辆节点V2移动到新的子网后,查看索引消息中的接入节点表项,如果存在一个接入节点表项,该接入节点表项的名称域值等于NA1,接入节点ID域值等于新的子网中的接入节点的接入节点ID,且分片ID集合与集合SIDS2之差不为空,则执行步骤617,否则执行步骤616;
步骤616:车辆节点V2按照路线集合RS2继续行使,执行步骤615;
步骤617:车辆节点V2选中一个接入节点表项,该接入节点表项的名称域值等于NA1,接入节点ID域值等于新的子网中的接入节点的接入节点ID,构建一个请求消息,该请求消息的名称域值为NA1,源坐标为自己的坐标,目的坐标为当前所在子网的接入节点的坐标,负载为选中的接入节点表项的分片ID集合与集合SIDS2之差;
车辆节点V2将该请求消息转发给与目的坐标距离最近的邻居车辆节点或者当前所在子网的接入节点;目的接入节点接收到该请求消息后,对于该请求消息负载中的分片ID集合中的每一个分片ID选择一个数据表项,该数据表项的名称域值等于该请求消息中的名称且分片ID等于分片集合中的分片ID;目的接入节点构建一个响应消息,该响应消息的名称域值等于该请求消息的名称域值,源坐标等于自己的坐标,目的坐标等于该请求消息中的源坐标,负载为选择的所有数据表项;目的接入节点将该响应消息转发给与目的坐标距离最近的邻居车辆节点;
步骤618:如果车辆节点V2接收到该响应消息,则执行步骤614,否则执行步骤619;
步骤619:接收到响应消息的车辆节点将该响应消息转发到与目的坐标距离最近的邻居车辆节点,执行步骤618;
步骤620:车辆节点V2将保存的所有数据表项的分片域值构建成数据C1并保存数据C1;
步骤621:结束。