本发明涉及一种通信方法,尤其涉及的是一种高效的车联网数据通信方法。
背景技术
近年来,很多研究工作致力于车联网,以便使车辆驾驶人能够快速获取网络服务。随着车载网技术的发展,车联网会成为未来提供服务的一种模式。
目前,车联网的实现模式是通过广播来实现,因此延迟和代价都比较大,降低了网络服务性能。因此,如何降低车联网提供服务的延迟和代价成为近年来研究的热点问题。
技术实现要素:
发明目的:本发明所要解决的技术问题是针对现有技术的不足,提供一种高效的车联网数据通信方法。本发明通过单播取代广播的方式来实现车联网,从而降低车联网提供服务的延迟和代价,从而有效提高网络服务性能。
技术方案:本发明公开了一种高效的车联网数据通信方法,所述车联网包括接入节点和车辆节点,每个接入节点的坐标具有唯一性,一个接入节点由接入节点id唯一标识,其值等于该接入节点的坐标;一个接入节点和一个以上的车辆节点构成一个子网,所述车辆节点在所有的接入节点中距离自己所在子网的接入节点距离最近;
一种数据由一个名称唯一标识,一个名称由坐标和名称id构成,名称id的中文含义为名称身份;一种数据由一个以上的数据分片构成,每个数据分片由分片id唯一标识;分片id的中文含义为分片身份;
车辆节点和接入节点通过消息实现通信,一个消息包括名称域、源坐标域、目的坐标域和负载;
对于每种数据,接入节点维护一个数据表,一个数据表项包含名称域、分片id域、分片域和生命周期域;其中,生命周期域值为预先设置的值,例如10分钟;如果接入节点检测到一个数据表项的生命周期衰减为0,则删除该数据表项;
在数据c1由名称na1唯一标识,名称na1中的坐标为(x1,y1),名称id为nid1,数据c1由n1个数据分片构成,每个数据分片由分片idz1唯一标识的条件下,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:结束。
由于车辆节点遍布区域较广,接入节点通过上述过程可以协调多个车辆节点共同提供数据,从而获取完成的数据提供给用户,例如接入节点可以通过上述过程来获取所在区域是否发生了交通事故的数据提供给车辆节点,这样车辆节点可以有效避免道路拥塞。
本发明所述方法中,每个接入节点维护一个接入节点表,每个接入节点表项由接入节点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为常量,其值大于
接入节点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将该分配消息转发给距离目的坐标距离最近的邻居接入节点;如果存在多个距离最近的邻居接入节点,则接入节点ap1随机选择一个距离最近的邻居接入节点,将该分配消息转发给选中的邻居接入节点;
步骤204:判断是否接入节点apy接收到分配消息,是则执行步骤206,否则执行步骤205;
步骤205:接收到分配消息的接入节点将该分配消息转发给距离目的坐标距离最近的邻居接入节点,执行步骤204;
步骤206:接入节点apy接收到分配消息后,将分配消息负载中的所有数据表项保存到数据表中;
步骤207:结束。
接入节点通过上述过程将数据分片分配给其他接入节点从而实现数据的分布式存储和获取,这样,车辆节点能够快速获取数据从而有效降低数据通信延迟和代价。
本发明所述方法中,每个接入节点定期执行下述过程更新接入节点表:
步骤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:结束。
接入节点通过上述过程来及时更新并发布自己能够提供的数据,这样,车辆节点能够发布的数据能够快速获取这些数据,从而降低数据通信延迟和代价。
本发明所述方法中,数据c1由名称na1唯一标识,名称na1中的坐标为(x1,y1),名称id为nid1,数据c1由n1个数据分片构成,每个数据分片由分片idz1唯一标识,z1取值1~n1,所述分片id的集合为sids1;
接入节点ap1的坐标为(x1,y1),位于子网b1中,车辆节点v1位于子网b1内,它通过下述过程获取数据c1:
步骤401:开始;
步骤402:车辆节点v1构建一个请求消息,该请求消息的名称域值为na1,源坐标为车辆节点v1的坐标,目的坐标为(x1,y1),负载为空;车辆节点v1将该请求消息转发给与目的坐标距离最近的邻居车辆节点或者接入节点ap1;如果存在多个距离最近的邻居车辆节点或者接入节点ap1,则车辆节点v1将该请求消息转发给接入节点ap1;如果存在多个距离最近的邻居车辆节点,则车辆节点v1随机选取一个距离最近的邻居车辆节点,将该请求消息转发给选中的邻居车辆节点;
步骤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:结束。
车辆节点通过上述过程能够从目标位置的接入节点获取某种特定数据,从而有效降低了数据通信延迟和代价,例如车辆节点可以通过上述过程获取某个特定路段是否发生了交通事故的数据,从而有效避免道路拥塞。
本发明所述方法中,每个车辆节点启动后,构建一个路线集合,该路线集合包含此次行程所经过的所有接入节点的接入节点id;
数据c1由名称na1唯一标识,名称na1中的坐标为(x1,y1),名称id为nid1,数据c1由n1个数据分片构成,每个数据分片由分片idz1唯一标识,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:结束。
上述过程能够确保车辆节点能够快速获取数据。
在车辆节点的路线集合包含远程目标位置的接入节点时,车辆节点通过上述过程能够从多个接入节点获取远程目标位置的数据,从而有效降低了数据通信延迟和代价,例如车辆节点可以通过上述过程获取某个特定路段是否发生了交通事故的数据,从而有效避免道路拥塞。
本发明所述方法中,数据c1由名称na1唯一标识,名称na1中的坐标为(x1,y1),名称id为nid1,数据c1由n1个数据分片构成,每个数据分片由分片idz1唯一标识,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:结束。
上述过程能够确保车辆节点快速获取数据。
在车辆节点的路线集合不包含远程目标位置的接入节点时,车辆节点通过接入节点表能够从多个距离最近的接入节点获取目标位置的数据,从而有效降低了数据通信延迟和代价,例如车辆节点可以通过上述过程获取某个特定路段是否发生了交通事故的数据,从而有效避免道路拥塞。
有益效果:本发明提供了一种高效的车联网数据通信方法,车辆节点通过本发明所提供的车联网数据通信方法能够快速获取数据,缩短了获取服务数据的延迟和代价,提高了服务质量,本发明可应用于道路路况监测、车辆管理等领域,具有广泛的应用前景。
附图说明
下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
图1为本发明所述的接入节点产生数据流程示意图。
图2为本发明所述的分片分配流程示意图。
图3为本发明所述的更新接入节点表流程示意图。
图4为本发明所述的车辆节点产生数据流程示意图。
图5为本发明所述的数据通信流程示意图。
图6为本发明所述的获取数据流程示意图。
具体实施方式:
本发明提供了一种高效的车联网数据通信方法,车辆节点通过本发明所提供的车联网数据通信方法能够快速获取数据,缩短了获取服务数据的延迟和代价,提高了服务质量,本发明可应用于道路路况监测、车辆管理等领域,具有广泛的应用前景。
图1为本发明所述的接入节点产生数据流程示意图。所述车联网包括接入节点和车辆节点,每个接入节点的坐标具有唯一性,一个接入节点由接入节点id唯一标识,其值等于该接入节点的坐标;一个接入节点和一个以上的车辆节点构成一个子网,所述车辆节点在所有的接入节点中距离自己所在子网的接入节点距离最近;
一种数据由一个名称唯一标识,一个名称由坐标和名称id构成;一种数据由一个以上的数据分片构成,每个数据分片由分片id唯一标识;
车辆节点和接入节点通过消息实现通信,一个消息包括名称域、源坐标域、目的坐标域和负载;
对于每种数据,接入节点维护一个数据表,一个数据表项包含名称域、分片id域、分片域和生命周期域;其中,生命周期域值为预先设置的值;如果接入节点检测到一个数据表项的生命周期衰减为0,则删除该数据表项;
在数据c1由名称na1唯一标识,名称na1中的坐标为(x1,y1),名称id为nid1,数据c1由n1个数据分片构成,每个数据分片由分片idz1唯一标识的条件下,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为本发明所述的分片分配流程示意图。每个接入节点维护一个接入节点表,每个接入节点表项由接入节点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为常量,其值大于
接入节点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为本发明所述的更新接入节点表流程示意图。每个接入节点定期执行下述过程更新接入节点表:
步骤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为本发明所述的车辆节点产生数据流程示意图。数据c1由名称na1唯一标识,名称na1中的坐标为(x1,y1),名称id为nid1,数据c1由n1个数据分片构成,每个数据分片由分片idz1唯一标识,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为本发明所述的数据通信流程示意图。每个车辆节点启动后,构建一个路线集合,该路线集合包含此次行程所经过的所有接入节点的接入节点id;
数据c1由名称na1唯一标识,名称na1中的坐标为(x1,y1),名称id为nid1,数据c1由n1个数据分片构成,每个数据分片由分片idz1唯一标识,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为本发明所述的获取数据流程示意图。数据c1由名称na1唯一标识,名称na1中的坐标为(x1,y1),名称id为nid1,数据c1由n1个数据分片构成,每个数据分片由分片idz1唯一标识,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:结束。
实施例1
基于表1的仿真参数,本实施例模拟了本发明中的一种高效的车联网数据通信方法,性能分析如下:当数据传输量增加的情况下,数据通信延迟随之增加;当数据传输量减少的情况下,数据通信延迟随之降低;车辆节点获取服务数据的平均延迟为1250ms。
表1仿真参数
本发明提供了一种高效的车联网数据通信方法的思路,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部份均可用现有技术加以实现。