一种基于多跳簇的车载网数据通信方法与流程

文档序号:16688756发布日期:2019-01-22 18:35阅读:162来源:国知局
一种基于多跳簇的车载网数据通信方法与流程

本发明涉及一种通信方法,尤其涉及的是一种基于多跳簇的车载网数据通信方法。



背景技术:

近年来,很多研究工作致力于车联网,以便使车辆驾驶人能够快速获取网络服务。随着车载网技术的发展,车联网会成为未来提供服务的一种模式。

目前,车联网的实现模式是通过广播来实现,因此延迟和代价都比较大,降低了网络服务性能。因此,如何降低车联网提供服务的延迟和代价成为近年来研究的热点问题。



技术实现要素:

发明目的:本发明所要解决的技术问题是针对现有技术的不足,提供一种基于多跳簇的车载网数据通信方法。本发明通过单播取代广播的方式来实现车联网,从而降低车联网提供服务的延迟和代价,从而有效提高网络服务性能。

技术方案:本发明公开了一种基于多跳簇的车载网数据通信方法,所述车载网包含一个核心路由器,两个以上的接入路由器和两个以上的车辆节点;一个核心路由器配置两个以上的有线接口,核心路由器的每个有线接口连接一个接入路由器;一个接入路由器配置一个有线接口和一个无线接口,接入路由器的有线接口与核心路由器相连,无线接口与车辆节点链路相连;

每个车辆节点配置一个无线接口,车辆节点通过无线接口与接入路由器或者其他车辆节点相连;

接入路由器由坐标唯一标识,该坐标具有网络唯一性;接入路由器与在所有接入路由器中距离自己最近的车辆节点构成一个多跳簇,该接入路由器为簇首节点,车辆节点为簇成员节点;一种数据由名称唯一标识;车辆节点由硬件id唯一标识,硬件id可以是mac地址;一个消息由名称域、消息类型域、路径域和负载域构成,其中路径域为硬件id集合,即路径所经过的车辆节点的硬件id的集合;

每个车辆节点保存一个邻居表,一个邻居表项包含坐标域、硬件id域、名称集合域和生命周期域;

如果车辆节点v1的硬件id为hid1,车辆节点v1定期执行下述操作维护邻居表:

步骤101:开始;

步骤102:车辆节点v1创建一个名称集合参数ns1,参数ns1包含车辆节点v1所能提供的所有数据的名称;发送一个邻居消息,该邻居消息的消息类型值为1,名称为空,路径域值为{hid1},负载为车辆节点v1的坐标和参数ns1;

步骤103:邻居车辆节点接收到邻居消息后,查看邻居表;如果存在一个邻居表项,该邻居表项的硬件id域值等于该邻居消息的路径域值的第一个元素,则将该邻居表项的坐标域值更新为该邻居消息负载中的坐标值,将名称集合域更新为该邻居消息负载中的名称集合参数值,将生命周期设置为最大值;否则,该邻居车辆节点创建一个邻居表项,该邻居表项的硬件id域值等于该邻居消息的路径域值的第一个元素,该邻居表项的坐标域值等于该邻居消息负载中的坐标值,名称集合域值等于该邻居消息负载中的名称集合参数值,将生命周期设置为最大值;

步骤104:结束;

如果车辆节点检测到一个邻居表项的生命周期衰减为0,则删除该邻居表项。

车辆节点通过上述过程建立邻居表,基于邻居表项的名称集合域值,车辆节点能够邻居车辆节点获取所需数据,根据邻居表项的坐标域值,车辆节点能够选择最优的邻居节点实现通信,以降低数据通信延迟和代价。

本发明所述方法中,车辆节点保存一个路由器表,一个路由器表项包含坐标域和生命周期域;

接入路由器sc1定期执行下述操作维护路由器表:

步骤201:开始;

步骤202:接入路由器sc1从无线接口发送一个坐标发布消息,该坐标发布消息的消息类型值为2,名称域为空,路径域为空,负载为接入路由器sc1的坐标;

步骤203:车辆节点接收到该坐标发布消息后查看路由器表,如果存在一个路由器表项,该路由器表项的坐标域值等于该坐标发布消息负载中的坐标,则将该路由器表项的生命周期设置为最大值,否则该车辆节点创建一个路由器表项,该路由器表项的坐标域值等于该坐标发布消息负载中的坐标,生命周期设置为最大值;

步骤204:接收到坐标发布消息的车辆节点计算该车辆节点当前坐标与该坐标发布消息坐标之间的距离d1,设置一个参数f,参数f的初始值为0;对于每个路由器表项,该车辆节点计算该车辆节点当前坐标与该路由器表项坐标域值之间的距离d2,如果距离值d2小于距离值d1,则将参数f设置为1,否则,参数f的值不变;

步骤205:如果参数f等于1,则执行步骤207,否则执行步骤206;

步骤206:接收到坐标发布消息的车辆节点转发该坐标发布消息,执行步骤203;

步骤207:结束;

如果车辆节点检测到一个路由器表项的生命周期衰减为0是,删除该路由器表项;

车辆节点建立路由器表后,选择一个路由器表项,该路由器表项的坐标域值距离自己的坐标域值最近,将该路由器表项的坐标域值所标识的接入路由器标识为自己的簇首节点,将自己标记为簇成员节点。

车辆节点通过上述过程建立路由表,从而能够选择距离自己最近的接入路由器为自己的簇首节点并通过该簇首节点获取数据,从而降低数据通信延迟和代价。

本发明所述方法中,接入路由器维护一个车辆表,一个车辆表项包含路径域、名称集合域和生命周期域;一个车辆节点定期向它的簇首节点执行注册操作以维护车辆表;在车辆节点v1的簇首节点为接入路由器sc1,车辆节点v1的硬件id为hid1的条件下,车辆节点v1定期执行下述注册操作以维护车辆表:

步骤301:开始;

步骤302:车辆节点v1创建一个名称集合参数ns2,名称集合参数ns2由车辆节点v1所能提供的所有数据的名称构成;车辆节点v1选择一个邻居表项,该邻居表项坐标域值与接入路由器sc1距离最近,构建一个注册消息,该注册消息的消息类型值为3,名称域值为空,路径域值为{hid1,hid2},hid2为算中的邻居表项的硬件id域值,负载为接入路由器sc1的坐标和参数ns2;

步骤303:判断是接入路由器sc1还是车辆节点接收到注册消息,如果是接入路由器sc1则执行步骤308,否则执行步骤304;

步骤304:车辆节点接收到注册消息,如果该车辆节点的硬件id等于该注册消息路径域值的最后一个元素,则执行步骤305,否则执行步骤308;

步骤305:如果接收到注册消息的车辆节点的当前坐标与该注册消息负载中的坐标之间的距离小于车辆节点的通信半径,则执行步骤306,否则执行步骤307:

步骤306:接收到注册消息的车辆节点转发该注册消息,执行步骤303;

步骤307:接收到注册消息的车辆节点选择一个邻居表项,该邻居表项的坐标域值与该注册消息负载中的坐标之间的距离最近,将该邻居表项的硬件id域值加入到该注册消息的路径域值中并作为最后一个元素,转发该注册消息,执行步骤303;

步骤308:接入路由器sc1接收到注册消息后查看车辆表;如果存在一个车辆表项,该车辆表项的路径域值的第一个元素等于该注册消息的路径域值的第一个元素,则将该车辆表项的路径域值更新为该注册消息的路径域值,将该车辆表项的名称集合域值更新为该注册消息负载中的名称集合参数,将该车辆表项的生命周期设置为最大值;否则,接入路由器sc1创建一个车辆表项,该车辆表项的路径域值设置为该注册消息的路径域值,名称集合域值设置为该注册消息负载中的名称集合参数,将生命周期设置为最大值;

步骤309:结束;

如果接入路由器检测到一个车辆表项的生命周期衰减为0是,删除该车辆表项。

接入路由器通过车辆表能够自动实现路由,即根据车辆表中的名称集合域值能够查询到能够提供目标数据的距离最近的车辆节点的硬件id,从而将数据请求消息转发给该车辆节点以获取数据,由于车辆节点采用单播模式返回响应数据,因此降低了数据通信延迟。

本发明所述方法中,路由器的每个接口由接口id唯一标识,接口id为正整数;核心路由器保存一个检索表,一个检索表项包含坐标域、名称集合域、接口id域和生命周期域;接入路由器sc1定期执行下述操作维护检索表:

步骤401:开始;

步骤402:接入路由器sc1创建一个名称集合参数ns3,参数ns3等于接入路由表sci的车辆表中每个车辆表项的名称集合域值的并集;接入路由器sc1从有线接口发送一个信标消息,该信标消息的消息类型值为4,名称域值为空,路径域值为空,负载为参数ns3和接入路由器sc1的坐标;

步骤403:核心路由器从接口id为x1的接口接收到该信标消息后,如果核心路由器检测到自己的检索表中存在一个检索表项,该检索表项的接口id域值等于x1,该核心路由器则将该检索表项的坐标域值和名称集合域值更新为该信标消息负载中的坐标域值和名称集合参数值,将生命周期设置为最大值;否则,该核心路由器创建一个检索表项,该检索表项的接口id域值等于x1,坐标域值等于该信标消息负载中的坐标域值,名称集合域值等于该信标消息负载中的名称集合参数值,将生命周期设置为最大值;

步骤404:结束。

核心路由器通过检索表能够自动实现路由,即根据检索表中的名称集合域值能够查询到能够提供目标数据的接入路由器的坐标,从而将数据请求消息转发给该接入路由器从而获取数据,由于采用单播模式实现请求消息的转发,因此降低了数据通信延迟。

本发明所述方法中,在车辆节点v1的簇首节点为接入路由器sc1,车辆节点的硬件id为hid1,数据d1由名称na1标识的条件下,如果接入路由器sc1至少存在一个车辆表项,该车辆表项的名称集合域值包含名称na1,则车辆节点v1通过下述过程获取数据d1:

步骤501:开始;

步骤502:车辆节点v1查看邻居表,如果存在一个邻居表项,该邻居表项的名称集合域值包含名称na1,则执行步骤503,否则执行步骤504;

步骤503:车辆节点v1选择一个邻居表项,该邻居表项的名称集合域值包含名称na1,发送一个请求消息,该请求消息的消息类型值为5,名称域值为名称na1,路径域值为{hid1,hid3},hid3为所选中的邻居表项的硬件id域值,负载为接入路由器sc1的坐标和硬件idhid1,执行步骤505;

步骤504:车辆节点v1选择一个邻居表项,该邻居表项的坐标域值距离接入路由器sc1最近,发送一个请求消息,该请求消息的消息类型值为5,名称域值为名称na1,路径域值为{hid1,hid4},hid4为所选中的邻居表项的硬件id域值,负载为接入路由器sc1的坐标和硬件idhid1;

步骤505:判断是接入路由器sc1还是车辆节点接收到请求消息,如果是接入路由器sc1则执行步骤514,否则执行步骤506;

步骤506:车辆节点接收到请求消息后,查看自己的硬件id是否等于该请求消息路径域值的最后一个元素,如果等于,则执行步骤507,否则执行步骤525;

步骤507:判断接收到请求消息的车辆节点是否能提供该请求消息名称域值所标识的数据,如果能,则执行步骤508,否则执行步骤509;

步骤508:接收到请求消息的车辆节点从该请求消息路径域值中删除自己的硬件id,发送一个响应消息,该响应消息的消息类型值为6,名称等于该请求消息的名称,路径域值等于该请求消息的路径域值,负载为响应消息和该请求消息的负载内容,执行步骤525;

步骤509:接收到请求消息的车辆节点查看邻居表,如果存在一个邻居表项,该邻居表项的名称集合域值包含该请求消息的名称域值,则执行步骤510,否则执行步骤511;

步骤510:接收到请求消息的车辆节点选择一个邻居表项,该邻居表项的名称集合域值包含该请求消息的名称域值,将该邻居表项的硬件id域值加入到该请求消息的路径域中并作为最后一个元素,转发该请求消息,执行步骤505;

步骤511:接收到请求消息的车辆节点判断自己的当前坐标与该请求消息负载中的坐标之间的距离是否小于车辆节点的传输半径,如果是,则执行步骤512,否则执行步骤513;

步骤512:接收到请求消息的车辆节点转发该请求消息,执行步骤505;

步骤513:接收到请求消息的车辆节点选择一个邻居表项,该邻居表项的坐标域值与该请求消息负载中的坐标之间的距离最近,将该邻居表项的硬件id域值加入到该请求消息的路径域中并作为最后一个元素,转发该请求消息,执行步骤505;

步骤514:接入路由器sc1接收到请求消息后,选择所有名称集合域值中包含该请求消息名称域值的车辆表项,从这些车辆表项中选择一个车辆表项,该车辆表项的路径域值所包含的元素个数最小;接入路由器sc1从无线接口发送一个簇内请求消息,该簇内请求消息的消息类型值为7,路径域值等于选中的车辆表项的路径域值,名称等于该请求消息的名称,负载等于该请求消息的负载;

步骤515:车辆节点接收到簇内请求消息,如果该车辆节点的硬件id等于该簇内请求消息路径域值的最后一个元素,则执行步骤516,否则执行步骤525;

步骤516:判断接收到簇内请求消息的车辆节点是否能提供该簇内请求消息名称域值所标识的数据,如果能,则执行步骤517,否则执行步骤518;

步骤517:接收到簇内请求消息的车辆节点选择一个邻居表项,该邻居表项的坐标域值与该簇内请求消息负载中的坐标距离最近,发送一个簇内响应消息,该簇内响应消息的消息类型值为8,名称等于该簇内请求消息的名称,路径域值等于{hid5},hid5为选中的邻居表项的硬件id域值,负载为响应消息和该簇内请求消息的负载内容,执行步骤520;

步骤518:接收到簇内请求消息的车辆节点从该簇内请求消息路径域值中删除自己的硬件id,转发该簇内请求消息,执行步骤515;

步骤519:判断是接入路由器sc1还是车辆节点接收到簇内响应消息,如果是接入路由器sc1则执行步骤524,否则执行步骤520;

步骤520:判断接收到簇内响应消息的车辆节点的硬件id是否等于该簇内响应消息路径域值的最后一个元素,如果是,则执行步骤521,否则执行步骤525;

步骤521:接收到簇内响应消息的车辆节点判断自己当前的坐标与该簇内响应消息负载中的坐标之间的距离是否小于车辆节点的传输半径,如果是,则执行步骤522,否则执行步骤523;

步骤522:接收到簇内响应消息的车辆节点转发该簇内响应消息,执行步骤519;

步骤523:接收到簇内响应消息的车辆节点选择一个邻居表项,该邻居表项的坐标域值与该簇内响应消息负载中的坐标域值距离最近,将该邻居表项的硬件id加入到该簇内响应消息的路径域中并作为最后一个元素,转发该簇内响应消息,执行步骤519;

步骤524:接入路由器sc1接收到簇内响应消息后,选择一个车辆表项,该车辆表项的第一个元素等于该簇内响应消息负载中的硬件id;接入路由器sc1从无线接口发送一个响应消息,该响应消息的消息类型值为6,路径域值等于该车辆表项的路径域值,名称域值等于该簇内响应消息的名称域值,负载等于该簇内响应消息的负载;

步骤525:如果车辆节点v1接收到该响应消息,则执行步骤528,否则执行步骤526;

步骤526:接收到响应消息的其他车辆节点判断自己的硬件id是否等于该响应消息路径域值的最后一个元素,如果是,则执行步骤527,否则执行步骤525;

步骤527:接收到响应消息的车辆节点从该响应消息路径域值中删除最后一个元素,转发该响应消息,执行步骤525;

步骤528:车辆节点v1接收到该响应消息,保存该响应消息负载中的响应数据;

步骤529:结束。

车辆节点通过上述过程能从距离最近的车辆节点获取所需数据,由于车辆节点采用路径域值实现自动路由,所以无需路由发现过程即可将响应数据返回给源车辆节点,从而大幅度降低了数据通信延迟和代价,此外,车辆节点与提供数据的节点之间通过单播进行通信,进一步降低了数据通信延迟和代价。

本发明所述方法中,在车辆节点v1的簇首节点为接入路由器sc1,车辆节点的硬件id为hid1,数据d2由名称na2标识的条件下,如果接入路由器sc1的任何一个车辆表项的名称集合域值都不包含名称na2,则车辆节点v1通过下述过程获取数据d2:

步骤601:开始;

步骤602:车辆节点v1查看邻居表,如果存在一个邻居表项,该邻居表项的名称集合域值包含名称na2,则执行步骤603,否则执行步骤604;

步骤603:车辆节点v1选择一个邻居表项,该邻居表项的名称集合域值包含名称na2,发送一个请求消息,该请求消息的消息类型值为5,名称域值为名称na2,路径域值为{hid1,h3},h3为所选中的邻居表项的硬件id域值,负载为接入路由器sc1的坐标和硬件idhid1,执行步骤605;

步骤604:车辆节点v1选择一个邻居表项,该邻居表项的坐标域值距离接入路由器sc1最近,发送一个请求消息,该请求消息的消息类型值为5,名称域值为名称na2,路径域值为{hid1,h4},h4为所选中的邻居表项的硬件id域值,负载为接入路由器sc1的坐标和硬件idhid1;

步骤605:判断是接入路由器sc1还是车辆节点接收到请求消息,如果是接入路由器sc1则执行步骤614,否则执行步骤606;

步骤606:车辆节点接收到请求消息后,查看自己的硬件id是否等于该请求消息路径域值的最后一个元素,如果等于,则执行步骤607,否则执行步骤625;

步骤607:判断接收到请求消息的车辆节点是否能提供该请求消息名称域值所标识的数据,如果能,则执行步骤608,否则执行步骤609;

步骤608:接收到请求消息的车辆节点从该请求消息路径域值中删除自己的硬件id,发送一个响应消息,该响应消息的消息类型值为6,名称等于该请求消息的名称,路径域值等于该请求消息的路径域值,负载为响应消息和该请求消息的负载内容,执行步骤625;

步骤609:接收到请求消息的车辆节点查看邻居表,如果存在一个邻居表项,该邻居表项的名称集合域值包含该请求消息的名称域值,则执行步骤610,否则执行步骤611;

步骤610:接收到请求消息的车辆节点选择一个邻居表项,该邻居表项的名称集合域值包含该请求消息的名称域值,将该邻居表项的硬件id域值加入到该请求消息的路径域中并作为最后一个元素,转发该请求消息,执行步骤605;

步骤611:接收到请求消息的车辆节点判断自己的当前坐标与该请求消息负载中的坐标之间的距离是否小于车辆节点的传输半径,如果是,则执行步骤612,否则执行步骤613;

步骤612:接收到请求消息的车辆节点转发该请求消息,执行步骤605;

步骤613:接收到请求消息的车辆节点选择一个邻居表项,该邻居表项的坐标域值与该请求消息负载中的坐标之间的距离最近,将该邻居表项的硬件id域值加入到该请求消息的路径域中并作为最后一个元素,转发该请求消息,执行步骤605;

步骤614:接入路由器sc1接收到请求消息后,接入路由器sc1从有线接口发送一个簇间请求消息,该簇间请求消息的消息类型值为9,路径域值为空,名称域值等于该请求消息的名称域值,负载等于该请求消息的负载;核心路由器cc1接收到该簇间请求消息后,选择一个检索表项,该检索表项的名称集合域值中包含该簇间请求消息的名称域值,从该检索表项的接口id所标识的接口转发该簇间请求消息;其他接入路由器接收到该簇间请求消息后,选择所有名称集合域值中包含该簇间请求消息名称域值的车辆表项,从这些车辆表项中选择一个车辆表项,该车辆表项的路径域值所包含的元素个数最小;接收到该簇间请求消息的接入路由器创建一个二元组<c1,c2>,其中c1为该簇间请求消息负载中的坐标值,c2为自己的坐标值,将该簇间请求消息的路径域值更新为选中的车辆表项的路径域值,将该二元组加入到该簇间请求消息的负载中,从无线接口发送该簇间请求消息;

步骤615:车辆节点接收到簇间请求消息,如果该车辆节点的硬件id等于该簇间请求消息路径域值的最后一个元素,则执行步骤616,否则执行步骤625;

步骤616:判断接收到簇间请求消息的车辆节点是否能提供该簇间请求消息名称域值所标识的数据,如果能,则执行步骤617,否则执行步骤618;

步骤617:接收到簇间请求消息的车辆节点选择一个邻居表项,该邻居表项的坐标域值与该簇间请求消息负载中二元组的第二个元素距离最近,发送一个簇间响应消息,该簇间响应消息的消息类型值为10,名称等于该簇间请求消息的名称,路径域值等于{h5},h5为选中的邻居表项的硬件id域值,负载为响应消息和该簇间请求消息的负载内容,执行步骤620;

步骤618:接收到簇间请求消息的车辆节点从该簇间请求消息路径域值中删除自己的硬件id,转发该簇间请求消息,执行步骤615;

步骤619:判断是接入路由器还是车辆节点接收到簇间响应消息,如果是接入路由器则执行步骤624,否则执行步骤620;

步骤620:判断接收到簇间响应消息的车辆节点的硬件id是否等于该簇间响应消息路径域值的最后一个元素,如果是,则执行步骤621,否则执行步骤625;

步骤621:接收到簇间响应消息的车辆节点判断自己当前的坐标与该簇间响应消息负载中二元组的第二个元素之间的距离是否小于车辆节点的传输半径,如果是,则执行步骤622,否则执行步骤623;

步骤622:接收到簇间响应消息的车辆节点转发该簇间响应消息,执行步骤619;

步骤623:接收到簇间响应消息的车辆节点选择一个邻居表项,该邻居表项的坐标域值与该簇间响应消息负载中的二元组的第二个元素距离最近,将该邻居表项的硬件id加入到该簇间响应消息的路径域中并作为最后一个元素,转发该簇间响应消息,执行步骤619;

步骤624:接入路由器接收到簇间响应消息后,从有线接口转发该簇间响应消息;核心路由器cc1接收到该簇间响应消息后,选择一个检索表项,该检索表项的坐标域值等于该簇间响应消息负载中二元组的第一个元素,从该检索表项的接口id域值所标识的接口转发该簇间响应消息;接入路由器sc1接收到该簇间响应消息,选择一个车辆表项,该车辆表项的第一个元素等于该簇间响应消息负载中的硬件id;接入路由器sc1从无线接口发送一个响应消息,该响应消息的消息类型值为6,路径域值等于该车辆表项的路径域值,名称域值等于该簇间响应消息的名称域值,负载等于该簇间响应消息的硬件id以及坐标值;

步骤625:如果车辆节点v1接收到该响应消息,则执行步骤628,否则执行步骤626;

步骤626:接收到响应消息的其他车辆节点判断自己的硬件id是否等于该响应消息路径域值的最后一个元素,如果是,则执行步骤627,否则执行步骤625;

步骤627:接收到响应消息的其他车辆节点从该响应消息路径域值中删除最后一个元素,转发该响应消息,执行步骤625;

步骤628:车辆节点v1接收到该响应消息,保存该响应消息负载中的响应数据;

步骤629:结束。

车辆节点通过上述过程能从不同簇的车辆节点获取所需数据,由于车辆节点从距离最近的车辆节点获取数据,且核心路由器通过检索表以及接入路由器通过车辆表能够自动实现路由,因此车辆节点无需路由发现过程即可将响应数据返回给源车辆节点,从而大幅度降低了数据通信延迟和代价,此外,车辆节点采用单播获取数据,进一步降低了数据通信延迟和代价。

有益效果:本发明提供了一种基于多跳簇的车载网数据通信方法,车辆节点通过本发明所提供的车载网数据通信方法能够快速获取数据,缩短了获取服务数据的延迟和代价,提高了服务质量,本发明可应用于道路路况监测、车辆管理等领域,具有广泛的应用前景。

附图说明

下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。

图1为本发明所述的维护邻居表流程示意图。

图2为本发明所述的维护路由表流程示意图。

图3为本发明所述的维护车辆表流程示意图。

图4为本发明所述的维护检索表流程示意图。

图5为本发明所述的数据通信流程示意图。

图6为本发明所述的获取数据流程示意图。

具体实施方式:

本发明提供了一种基于多跳簇的车载网数据通信方法,车辆节点通过本发明所提供的车载网数据通信方法能够快速获取数据,缩短了获取服务数据的延迟和代价,提高了服务质量,本发明可应用于道路路况监测、车辆管理等领域,具有广泛的应用前景。

图1为本发明所述的维护邻居表流程示意图。所述车载网包含一个核心路由器,两个以上的接入路由器和两个以上的车辆节点;一个核心路由器配置两个以上的有线接口,核心路由器的每个有线接口连接一个接入路由器;一个接入路由器配置一个有线接口和一个无线接口,接入路由器的有线接口与核心路由器相连,无线接口与车辆节点链路相连;

每个车辆节点配置一个无线接口,车辆节点通过无线接口与接入路由器或者其他车辆节点相连;

接入路由器由坐标唯一标识,该坐标具有网络唯一性;接入路由器与在所有接入路由器中距离自己最近的车辆节点构成一个多跳簇,该接入路由器为簇首节点,车辆节点为簇成员节点;一种数据由名称唯一标识;车辆节点由硬件id唯一标识;一个消息由名称域、消息类型域、路径域和负载域构成,其中路径域为硬件id集合,即路径所经过的车辆节点的硬件id的集合;

每个车辆节点保存一个邻居表,一个邻居表项包含坐标域、硬件id域、名称集合域和生命周期域;

如果车辆节点v1的硬件id为hid1,车辆节点v1定期执行下述操作维护邻居表:

步骤101:开始;

步骤102:车辆节点v1创建一个名称集合参数ns1,参数ns1包含车辆节点v1所能提供的所有数据的名称;发送一个邻居消息,该邻居消息的消息类型值为1,名称为空,路径域值为{hid1},负载为车辆节点v1的坐标和参数ns1;

步骤103:邻居车辆节点接收到邻居消息后,查看邻居表;如果存在一个邻居表项,该邻居表项的硬件id域值等于该邻居消息的路径域值的第一个元素,则将该邻居表项的坐标域值更新为该邻居消息负载中的坐标值,将名称集合域更新为该邻居消息负载中的名称集合参数值,将生命周期设置为最大值;否则,该邻居车辆节点创建一个邻居表项,该邻居表项的硬件id域值等于该邻居消息的路径域值的第一个元素,该邻居表项的坐标域值等于该邻居消息负载中的坐标值,名称集合域值等于该邻居消息负载中的名称集合参数值,将生命周期设置为最大值;

步骤104:结束;

如果车辆节点检测到一个邻居表项的生命周期衰减为0,则删除该邻居表项。

图2为本发明所述的维护路由表流程示意图。车辆节点保存一个路由器表,一个路由器表项包含坐标域和生命周期域;

接入路由器sc1定期执行下述操作维护路由器表:

步骤201:开始;

步骤202:接入路由器sc1从无线接口发送一个坐标发布消息,该坐标发布消息的消息类型值为2,名称域为空,路径域为空,负载为接入路由器sc1的坐标;

步骤203:车辆节点接收到该坐标发布消息后查看路由器表,如果存在一个路由器表项,该路由器表项的坐标域值等于该坐标发布消息负载中的坐标,则将该路由器表项的生命周期设置为最大值,否则该车辆节点创建一个路由器表项,该路由器表项的坐标域值等于该坐标发布消息负载中的坐标,生命周期设置为最大值;

步骤204:接收到坐标发布消息的车辆节点计算该车辆节点当前坐标与该坐标发布消息坐标之间的距离d1,设置一个参数f,参数f的初始值为0;对于每个路由器表项,该车辆节点计算该车辆节点当前坐标与该路由器表项坐标域值之间的距离d2,如果距离值d2小于距离值d1,则将参数f设置为1,否则,参数f的值不变;

步骤205:如果参数f等于1,则执行步骤207,否则执行步骤206;

步骤206:接收到坐标发布消息的车辆节点转发该坐标发布消息,执行步骤203;

步骤207:结束;

如果车辆节点检测到一个路由器表项的生命周期衰减为0是,删除该路由器表项;

车辆节点建立路由器表后,选择一个路由器表项,该路由器表项的坐标域值距离自己的坐标域值最近,将该路由器表项的坐标域值所标识的接入路由器标识为自己的簇首节点,将自己标记为簇成员节点。

图3为本发明所述的维护车辆表流程示意图。接入路由器维护一个车辆表,一个车辆表项包含路径域、名称集合域和生命周期域;一个车辆节点定期向它的簇首节点执行注册操作以维护车辆表;在车辆节点v1的簇首节点为接入路由器sc1,车辆节点v1的硬件id为hid1的条件下,车辆节点v1定期执行下述注册操作以维护车辆表:

步骤301:开始;

步骤302:车辆节点v1创建一个名称集合参数ns2,名称集合参数ns2由车辆节点v1所能提供的所有数据的名称构成;车辆节点v1选择一个邻居表项,该邻居表项坐标域值与接入路由器sc1距离最近,构建一个注册消息,该注册消息的消息类型值为3,名称域值为空,路径域值为{hid1,hid2},hid2为算中的邻居表项的硬件id域值,负载为接入路由器sc1的坐标和参数ns2;

步骤303:判断是接入路由器sc1还是车辆节点接收到注册消息,如果是接入路由器sc1则执行步骤308,否则执行步骤304;

步骤304:车辆节点接收到注册消息,如果该车辆节点的硬件id等于该注册消息路径域值的最后一个元素,则执行步骤305,否则执行步骤308;

步骤305:如果接收到注册消息的车辆节点的当前坐标与该注册消息负载中的坐标之间的距离小于车辆节点的通信半径,则执行步骤306,否则执行步骤307:

步骤306:接收到注册消息的车辆节点转发该注册消息,执行步骤303;

步骤307:接收到注册消息的车辆节点选择一个邻居表项,该邻居表项的坐标域值与该注册消息负载中的坐标之间的距离最近,将该邻居表项的硬件id域值加入到该注册消息的路径域值中并作为最后一个元素,转发该注册消息,执行步骤303;

步骤308:接入路由器sc1接收到注册消息后查看车辆表;如果存在一个车辆表项,该车辆表项的路径域值的第一个元素等于该注册消息的路径域值的第一个元素,则将该车辆表项的路径域值更新为该注册消息的路径域值,将该车辆表项的名称集合域值更新为该注册消息负载中的名称集合参数,将该车辆表项的生命周期设置为最大值;否则,接入路由器sc1创建一个车辆表项,该车辆表项的路径域值设置为该注册消息的路径域值,名称集合域值设置为该注册消息负载中的名称集合参数,将生命周期设置为最大值;

步骤309:结束;

如果接入路由器检测到一个车辆表项的生命周期衰减为0是,删除该车辆表项。

图4为本发明所述的维护检索表流程示意图。路由器的每个接口由接口id唯一标识,接口id为正整数;核心路由器保存一个检索表,一个检索表项包含坐标域、名称集合域、接口id域和生命周期域;接入路由器sc1定期执行下述操作维护检索表:

步骤401:开始;

步骤402:接入路由器sc1创建一个名称集合参数ns3,参数ns3等于接入路由表sci的车辆表中每个车辆表项的名称集合域值的并集;接入路由器sc1从有线接口发送一个信标消息,该信标消息的消息类型值为4,名称域值为空,路径域值为空,负载为参数ns3和接入路由器sc1的坐标;

步骤403:核心路由器从接口id为x1的接口接收到该信标消息后,如果核心路由器检测到自己的检索表中存在一个检索表项,该检索表项的接口id域值等于x1,该核心路由器则将该检索表项的坐标域值和名称集合域值更新为该信标消息负载中的坐标域值和名称集合参数值,将生命周期设置为最大值;否则,该核心路由器创建一个检索表项,该检索表项的接口id域值等于x1,坐标域值等于该信标消息负载中的坐标域值,名称集合域值等于该信标消息负载中的名称集合参数值,将生命周期设置为最大值;

步骤404:结束。

图5为本发明所述的数据通信流程示意图。在车辆节点v1的簇首节点为接入路由器sc1,车辆节点的硬件id为hid1,数据d1由名称na1标识的条件下,如果接入路由器sc1至少存在一个车辆表项,该车辆表项的名称集合域值包含名称na1,则车辆节点v1通过下述过程获取数据d1:

步骤501:开始;

步骤502:车辆节点v1查看邻居表,如果存在一个邻居表项,该邻居表项的名称集合域值包含名称na1,则执行步骤503,否则执行步骤504;

步骤503:车辆节点v1选择一个邻居表项,该邻居表项的名称集合域值包含名称na1,发送一个请求消息,该请求消息的消息类型值为5,名称域值为名称na1,路径域值为{hid1,hid3},hid3为所选中的邻居表项的硬件id域值,负载为接入路由器sc1的坐标和硬件idhid1,执行步骤505;

步骤504:车辆节点v1选择一个邻居表项,该邻居表项的坐标域值距离接入路由器sc1最近,发送一个请求消息,该请求消息的消息类型值为5,名称域值为名称na1,路径域值为{hid1,hid4},hid4为所选中的邻居表项的硬件id域值,负载为接入路由器sc1的坐标和硬件idhid1;

步骤505:判断是接入路由器sc1还是车辆节点接收到请求消息,如果是接入路由器sc1则执行步骤514,否则执行步骤506;

步骤506:车辆节点接收到请求消息后,查看自己的硬件id是否等于该请求消息路径域值的最后一个元素,如果等于,则执行步骤507,否则执行步骤525;

步骤507:判断接收到请求消息的车辆节点是否能提供该请求消息名称域值所标识的数据,如果能,则执行步骤508,否则执行步骤509;

步骤508:接收到请求消息的车辆节点从该请求消息路径域值中删除自己的硬件id,发送一个响应消息,该响应消息的消息类型值为6,名称等于该请求消息的名称,路径域值等于该请求消息的路径域值,负载为响应消息和该请求消息的负载内容,执行步骤525;

步骤509:接收到请求消息的车辆节点查看邻居表,如果存在一个邻居表项,该邻居表项的名称集合域值包含该请求消息的名称域值,则执行步骤510,否则执行步骤511;

步骤510:接收到请求消息的车辆节点选择一个邻居表项,该邻居表项的名称集合域值包含该请求消息的名称域值,将该邻居表项的硬件id域值加入到该请求消息的路径域中并作为最后一个元素,转发该请求消息,执行步骤505;

步骤511:接收到请求消息的车辆节点判断自己的当前坐标与该请求消息负载中的坐标之间的距离是否小于车辆节点的传输半径,如果是,则执行步骤512,否则执行步骤513;

步骤512:接收到请求消息的车辆节点转发该请求消息,执行步骤505;

步骤513:接收到请求消息的车辆节点选择一个邻居表项,该邻居表项的坐标域值与该请求消息负载中的坐标之间的距离最近,将该邻居表项的硬件id域值加入到该请求消息的路径域中并作为最后一个元素,转发该请求消息,执行步骤505;

步骤514:接入路由器sc1接收到请求消息后,选择所有名称集合域值中包含该请求消息名称域值的车辆表项,从这些车辆表项中选择一个车辆表项,该车辆表项的路径域值所包含的元素个数最小;接入路由器sc1从无线接口发送一个簇内请求消息,该簇内请求消息的消息类型值为7,路径域值等于选中的车辆表项的路径域值,名称等于该请求消息的名称,负载等于该请求消息的负载;

步骤515:车辆节点接收到簇内请求消息,如果该车辆节点的硬件id等于该簇内请求消息路径域值的最后一个元素,则执行步骤516,否则执行步骤525;

步骤516:判断接收到簇内请求消息的车辆节点是否能提供该簇内请求消息名称域值所标识的数据,如果能,则执行步骤517,否则执行步骤518;

步骤517:接收到簇内请求消息的车辆节点选择一个邻居表项,该邻居表项的坐标域值与该簇内请求消息负载中的坐标距离最近,发送一个簇内响应消息,该簇内响应消息的消息类型值为8,名称等于该簇内请求消息的名称,路径域值等于{hid5},hid5为选中的邻居表项的硬件id域值,负载为响应消息和该簇内请求消息的负载内容,执行步骤520;

步骤518:接收到簇内请求消息的车辆节点从该簇内请求消息路径域值中删除自己的硬件id,转发该簇内请求消息,执行步骤515;

步骤519:判断是接入路由器sc1还是车辆节点接收到簇内响应消息,如果是接入路由器sc1则执行步骤524,否则执行步骤520;

步骤520:判断接收到簇内响应消息的车辆节点的硬件id是否等于该簇内响应消息路径域值的最后一个元素,如果是,则执行步骤521,否则执行步骤525;

步骤521:接收到簇内响应消息的车辆节点判断自己当前的坐标与该簇内响应消息负载中的坐标之间的距离是否小于车辆节点的传输半径,如果是,则执行步骤522,否则执行步骤523;

步骤522:接收到簇内响应消息的车辆节点转发该簇内响应消息,执行步骤519;

步骤523:接收到簇内响应消息的车辆节点选择一个邻居表项,该邻居表项的坐标域值与该簇内响应消息负载中的坐标域值距离最近,将该邻居表项的硬件id加入到该簇内响应消息的路径域中并作为最后一个元素,转发该簇内响应消息,执行步骤519;

步骤524:接入路由器sc1接收到簇内响应消息后,选择一个车辆表项,该车辆表项的第一个元素等于该簇内响应消息负载中的硬件id;接入路由器sc1从无线接口发送一个响应消息,该响应消息的消息类型值为6,路径域值等于该车辆表项的路径域值,名称域值等于该簇内响应消息的名称域值,负载等于该簇内响应消息的负载;

步骤525:如果车辆节点v1接收到该响应消息,则执行步骤528,否则执行步骤526;

步骤526:接收到响应消息的其他车辆节点判断自己的硬件id是否等于该响应消息路径域值的最后一个元素,如果是,则执行步骤527,否则执行步骤525;

步骤527:接收到响应消息的车辆节点从该响应消息路径域值中删除最后一个元素,转发该响应消息,执行步骤525;

步骤528:车辆节点v1接收到该响应消息,保存该响应消息负载中的响应数据;

步骤529:结束。

图6为本发明所述的获取数据流程示意图。在车辆节点v1的簇首节点为接入路由器sc1,车辆节点的硬件id为hid1,数据d2由名称na2标识的条件下,如果接入路由器sc1的任何一个车辆表项的名称集合域值都不包含名称na2,则车辆节点v1通过下述过程获取数据d2:

步骤601:开始;

步骤602:车辆节点v1查看邻居表,如果存在一个邻居表项,该邻居表项的名称集合域值包含名称na2,则执行步骤603,否则执行步骤604;

步骤603:车辆节点v1选择一个邻居表项,该邻居表项的名称集合域值包含名称na2,发送一个请求消息,该请求消息的消息类型值为5,名称域值为名称na2,路径域值为{hid1,h3},h3为所选中的邻居表项的硬件id域值,负载为接入路由器sc1的坐标和硬件idhid1,执行步骤605;

步骤604:车辆节点v1选择一个邻居表项,该邻居表项的坐标域值距离接入路由器sc1最近,发送一个请求消息,该请求消息的消息类型值为5,名称域值为名称na2,路径域值为{hid1,h4},h4为所选中的邻居表项的硬件id域值,负载为接入路由器sc1的坐标和硬件idhid1;

步骤605:判断是接入路由器sc1还是车辆节点接收到请求消息,如果是接入路由器sc1则执行步骤614,否则执行步骤606;

步骤606:车辆节点接收到请求消息后,查看自己的硬件id是否等于该请求消息路径域值的最后一个元素,如果等于,则执行步骤607,否则执行步骤625;

步骤607:判断接收到请求消息的车辆节点是否能提供该请求消息名称域值所标识的数据,如果能,则执行步骤608,否则执行步骤609;

步骤608:接收到请求消息的车辆节点从该请求消息路径域值中删除自己的硬件id,发送一个响应消息,该响应消息的消息类型值为6,名称等于该请求消息的名称,路径域值等于该请求消息的路径域值,负载为响应消息和该请求消息的负载内容,执行步骤625;

步骤609:接收到请求消息的车辆节点查看邻居表,如果存在一个邻居表项,该邻居表项的名称集合域值包含该请求消息的名称域值,则执行步骤610,否则执行步骤611;

步骤610:接收到请求消息的车辆节点选择一个邻居表项,该邻居表项的名称集合域值包含该请求消息的名称域值,将该邻居表项的硬件id域值加入到该请求消息的路径域中并作为最后一个元素,转发该请求消息,执行步骤605;

步骤611:接收到请求消息的车辆节点判断自己的当前坐标与该请求消息负载中的坐标之间的距离是否小于车辆节点的传输半径,如果是,则执行步骤612,否则执行步骤613;

步骤612:接收到请求消息的车辆节点转发该请求消息,执行步骤605;

步骤613:接收到请求消息的车辆节点选择一个邻居表项,该邻居表项的坐标域值与该请求消息负载中的坐标之间的距离最近,将该邻居表项的硬件id域值加入到该请求消息的路径域中并作为最后一个元素,转发该请求消息,执行步骤605;

步骤614:接入路由器sc1接收到请求消息后,接入路由器sc1从有线接口发送一个簇间请求消息,该簇间请求消息的消息类型值为9,路径域值为空,名称域值等于该请求消息的名称域值,负载等于该请求消息的负载;核心路由器cc1接收到该簇间请求消息后,选择一个检索表项,该检索表项的名称集合域值中包含该簇间请求消息的名称域值,从该检索表项的接口id所标识的接口转发该簇间请求消息;其他接入路由器接收到该簇间请求消息后,选择所有名称集合域值中包含该簇间请求消息名称域值的车辆表项,从这些车辆表项中选择一个车辆表项,该车辆表项的路径域值所包含的元素个数最小;接收到该簇间请求消息的接入路由器创建一个二元组<c1,c2>,其中c1为该簇间请求消息负载中的坐标值,c2为自己的坐标值,将该簇间请求消息的路径域值更新为选中的车辆表项的路径域值,将该二元组加入到该簇间请求消息的负载中,从无线接口发送该簇间请求消息;

步骤615:车辆节点接收到簇间请求消息,如果该车辆节点的硬件id等于该簇间请求消息路径域值的最后一个元素,则执行步骤616,否则执行步骤625;

步骤616:判断接收到簇间请求消息的车辆节点是否能提供该簇间请求消息名称域值所标识的数据,如果能,则执行步骤617,否则执行步骤618;

步骤617:接收到簇间请求消息的车辆节点选择一个邻居表项,该邻居表项的坐标域值与该簇间请求消息负载中二元组的第二个元素距离最近,发送一个簇间响应消息,该簇间响应消息的消息类型值为10,名称等于该簇间请求消息的名称,路径域值等于{h5},h5为选中的邻居表项的硬件id域值,负载为响应消息和该簇间请求消息的负载内容,执行步骤620;

步骤618:接收到簇间请求消息的车辆节点从该簇间请求消息路径域值中删除自己的硬件id,转发该簇间请求消息,执行步骤615;

步骤619:判断是接入路由器还是车辆节点接收到簇间响应消息,如果是接入路由器则执行步骤624,否则执行步骤620;

步骤620:判断接收到簇间响应消息的车辆节点的硬件id是否等于该簇间响应消息路径域值的最后一个元素,如果是,则执行步骤621,否则执行步骤625;

步骤621:接收到簇间响应消息的车辆节点判断自己当前的坐标与该簇间响应消息负载中二元组的第二个元素之间的距离是否小于车辆节点的传输半径,如果是,则执行步骤622,否则执行步骤623;

步骤622:接收到簇间响应消息的车辆节点转发该簇间响应消息,执行步骤619;

步骤623:接收到簇间响应消息的车辆节点选择一个邻居表项,该邻居表项的坐标域值与该簇间响应消息负载中的二元组的第二个元素距离最近,将该邻居表项的硬件id加入到该簇间响应消息的路径域中并作为最后一个元素,转发该簇间响应消息,执行步骤619;

步骤624:接入路由器接收到簇间响应消息后,从有线接口转发该簇间响应消息;核心路由器cc1接收到该簇间响应消息后,选择一个检索表项,该检索表项的坐标域值等于该簇间响应消息负载中二元组的第一个元素,从该检索表项的接口id域值所标识的接口转发该簇间响应消息;接入路由器sc1接收到该簇间响应消息,选择一个车辆表项,该车辆表项的第一个元素等于该簇间响应消息负载中的硬件id;接入路由器sc1从无线接口发送一个响应消息,该响应消息的消息类型值为6,路径域值等于该车辆表项的路径域值,名称域值等于该簇间响应消息的名称域值,负载等于该簇间响应消息的硬件id以及坐标值;

步骤625:如果车辆节点v1接收到该响应消息,则执行步骤628,否则执行步骤626;

步骤626:接收到响应消息的其他车辆节点判断自己的硬件id是否等于该响应消息路径域值的最后一个元素,如果是,则执行步骤627,否则执行步骤625;

步骤627:接收到响应消息的其他车辆节点从该响应消息路径域值中删除最后一个元素,转发该响应消息,执行步骤625;

步骤628:车辆节点v1接收到该响应消息,保存该响应消息负载中的响应数据;

步骤629:结束。

实施例1

基于表1的仿真参数,本实施例模拟了本发明中的一种基于多跳簇的车载网数据通信方法,性能分析如下:当数据传输量增加的情况下,数据通信成功率随之下降;当数据传输量减少的情况下,数据通信成功率随之增加;车辆节点获取服务数据的平均成功率为98.73%。

表1仿真参数

本发明提供了一种基于多跳簇的车载网数据通信方法的思路,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部份均可用现有技术加以实现。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1