[0003] 发明目的:本发明所要解决的技术问题是针对现有技术的不足,提供了一种基于命名数据的物联网数据通信方法。本发明通过请求聚合的方式来实现物联网,从而降低物联网提供服务的延迟和代价,从而有效提高网络服务性能。
[0004] 技术方案:本发明公开了一种基于命名数据的物联网数据通信方法,所述物联网包括一个以上的节点,每个节点配置一个无线接口;一种数据由一个数据ID唯一标识,例如电视剧,数据ID为大于0的正整数;
[0005] 一个消息包含消息类型、数据ID、广播范围和负载域;
[0006] 邻居消息的消息类型为1,邻居查询消息的消息类型为2,邻居数据消息的消息类型为3,查询消息的消息类型为4,数据消息的消息类型为5,二次查询消息的消息类型为6,二次数据消息的消息类型为7,数据创建消息的消息类型为8;
[0007] 每个节点维护一个索引表,每个索引表项包含数据ID集合域和生命周期域;
[0008] 每个节点维护一个存储表,每个存储表项包含数据ID域,数据域和生命周期域;
[0009] 节点N1定期执行下述过程来建立索引表:
[0010] 步骤101:开始;
[0011] 步骤102:节点N1查看存储表并创建一个数据ID集合参数D1,参数D1的初始值为空;针对每一个存储表项,节点N1判断参数D1中是否包含该存储表项的数据ID域值,如果不包括,节点N1则将该存储表项的数据ID域值加入到参数D1中,否则节点N1不执行任何操作;
[0012] 步骤103:节点N1发送邻居消息,该邻居消息的消息类型为1,数据ID域值为0,广播范围为1,负载为参数D1;
[0013] 步骤104:邻居节点接收到该邻居消息后,将该邻居消息的广播范围递减1,查看索引表,如果存在一个索引表项,该索引表项的数据ID集合域值等于该邻居消息负载中的参数D1,则将该索引表项中的生命周期设置为最大值,例如500ms,否则该邻居节点创建一个索引表项,该索引表项的数据ID集合域值等于该邻居消息负载中的参数D1,生命周期为最大值;
[0014] 步骤105:接收到该邻居消息的邻居节点判断该邻居消息的广播范围是否为0,如果是,则执行步骤107,否则执行步骤106;
[0015] 步骤106:接收到该邻居消息的邻居节点转发该邻居消息,执行步骤104;
[0016] 步骤107:结束;
[0017] 如果节点检测到一个索引表项的生命周期衰减为0,则从索引表中删除该索引表项;
[0018] 节点通过上述过程建立索引表,基于该索引表项的数据ID集合域,节点能够从邻居节点获取所需数据,从而大幅度降低了数据通信延迟和代价。
[0019] 本发明所述方法中,数据C1由数据ID CID1标识,如果节点N1检测到自己的索引表中存在一个索引表项,且该索引表项的数据ID集合中包含数据ID CID1,则通过下述过程获取数据C1:
[0020] 步骤201:开始;
[0021] 步骤202:节点N1发送邻居查询消息,该邻居查询消息的消息类型为2,数据ID为CID1,广播范围为1,负载为空;
[0022] 步骤203:邻居节点接收到邻居查询消息后,将该邻居查询消息的广播范围域值递减1,查看存储表;如果存在一个存储表项,该存储表项的数据ID等于该邻居查询消息的数据ID,则执行步骤206,否则执行步骤204;
[0023] 步骤204:接收到邻居查询消息的邻居节点判断该邻居查询消息的广播范围是否等于0,如果是,则执行步骤207,否则执行步骤205;
[0024] 步骤205:接收到邻居查询消息的邻居节点转发该邻居查询消息,执行步骤203;
[0025] 步骤206:接收到邻居查询消息的邻居节点选择一个存储表项,该存储表项的数据ID等于该邻居查询消息的数据ID,该邻居节点发送一个邻居数据消息,该邻居数据消息的数据ID等于该邻居查询消息的数据ID,消息类型为3,广播范围域值为1,负载为该存储表项中的数据域值;
[0026] 步骤207:接收到邻居数据消息的节点将该邻居数据消息的广播范围域值递减1,查看存储表,如果存在一个存储表项,该存储表项的数据ID等于该邻居数据消息的数据ID,则丢弃该邻居数据消息,否则,接收到邻居数据消息的节点创建一个存储表项,该存储表项的数据ID等于该邻居数据消息的数据ID,数据域值等于该邻居数据消息负载中的数据域值,生命周期设置为最大值,例如1h;
[0027] 步骤208:接收到邻居数据消息的节点判断该邻居数据消息的广播范围域值是否等于0,如果是,则执行步骤210,否则执行步骤209;
[0028] 步骤209:接收到邻居数据消息的节点转发该邻居数据消息,执行步骤207;
[0029] 步骤210:结束;
[0030] 如果节点检测到一个存储表项的生命周期衰减为0,则从存储表中删除该存储表项;
[0031] 节点通过监测邻居表以获取能够提供目标数据的邻居表项,由于上述过程没有指定某个特定的邻居节点提供数据,因此所有能够提供目标数据的邻居节点均返回数据,从而确保节点能够接收到响应数据,解决了无线网络丢包率高的问题,也避免了节点由于数据通信失败而再次请求数据的情况,因此大幅度降低了数据通信延迟和代价。
[0032] 本发明所述方法中,节点保存一个查询表,每个查询表项包含数据ID域、距离域和生命周期域;
[0033] 数据C1由数据ID CID1标识;如果节点N1检测到自己的索引表中任何一个索引表项的数据ID集合中都不包含数据ID CID1,则通过下述过程获取数据C1:
[0034] 步骤301:开始;
[0035] 步骤302:节点N1设置一个参数h0,参数h0的初始值为常量X;常量X一般为大于5的正整数,常量X小于阈值TS1,X取值越大,查询消息和数据消息的广播范围越大;
[0036] 步骤303:节点N1将参数h0的值递增1;如果参数h0的值大于阈值TS1,则执行步骤315,否则执行步骤304;阈值TS1为大于常量X的正整数;阈值TS1越大,查询消息和数据消息的广播范围越大;
[0037] 步骤304:节点N1设置一个时钟TM1,节点N1发送一个查询消息,该查询消息的消息类型为4,数据ID为CID1,广播范围域值等于参数h0,负载为参数h0;
[0038] 步骤305:接收到查询消息的节点将该查询消息的广播范围域值递减1,查看存储表,如果存在一个存储表项,该存储表项的数据ID等于该查询消息的数据ID,则执行步骤306,否则执行步骤307;
[0039] 步骤306:接收到查询消息的节点选择一个存储表项,该存储表项的数据ID等于该查询消息的数据ID,该节点发送一个数据消息,该数据消息的数据ID等于该查询消息的数据ID,消息类型为5,广播范围域值等于该查询消息负载中的参数h0与该查询消息广播范围域值之差的绝对值,负载为该存储表项中的数据域值,执行步骤310;
[0040] 步骤307:接收到查询消息的节点查看查询表,如果存在一个查询表项,该查询表项的数据ID等于该查询消息的数据ID,则执行步骤310,否则执行步骤308;
[0041] 步骤308:接收到查询消息的节点创建一个查询表项,该查询表项的数据ID等于该查询消息的数据ID,距离域值等于该查询消息负载中的参数h0与该查询消息广播范围域值之差的绝对值,生命周期设置为最大值,例如1s;该节点判断该查询消息的广播范围域值是否为0,如果是,则执行步骤310,否则执行步骤309;
[0042] 步骤309:接收到查询消息的节点转发接收到的查询消息,执行步骤305;
[0043] 步骤310:接收到数据消息节点将该数据消息的广播范围域值递减1,查看查询表,如果存在一个查询表项,该查询表项的数据ID等于该数据消息的数据ID,则执行步骤311,否则执行步骤312;
[0044] 步骤311:接收到数据消息的节点选择一个查询表项,该查询表项的数据ID等于该数据消息的数据ID,将该数据消息的广播范围域值更新为该查询表项的距离域值,删除该查询表项,转发该数据消息,执行步骤310;
[0045] 步骤312:接收到数据消息的节点丢弃该数据消息;
[0046] 步骤313:判断节点N1是否在时钟TM1规定的时间范围内接收到数据消息,如果是,则执行步骤314,否则执行步骤303;
[0047] 步骤314:接收到数据消息的节点N1创建一个存储表项,该存储表项的数据ID等于该数据消息的数据ID,数据域值等于该数据消息负载中的数据域值,生命周期设置为最大值;
[0048] 步骤315:结束;
[0049] 节点通过存储表能够从距离最近的节点获取所需数据,因此降低了数据通信延迟,此外,车辆节点采用查询表实现了查询消息的聚合,因此多个节点能够通过一次数据通信过程获取数据,此外,有些节点能够从中间节点共享数据,因此进一步降低了数据通信延迟;由于上述过程中任何接收到查询消息且能提供目标数据的节点均能返回响应数据,因此提高了数据通信成功率,由于响应数据通过查询表自动返回到源节点,而无需建立路由,也无需维护路由信息,因此大幅度降低了数据通信和代价,提高了数据通信性能。
[0050] 本发明所述方法中,数据C1由数据ID CID1标识;如果节点N2创建了数据C1,则通过下述过程发布数据C1:
[0051] 步骤401:开始;
[0052] 步骤402:节点N2创建一个存储表项,该存储表项的数据ID等于数据ID CID1,数据域值等于数据C1,生命周期设置为最大值;节点N2发送一个数据创建消息,该数据创建消息的数据ID等于数据ID CID1,消息类型为8,广播范围为常量X,负载为数据C1;
[0053] 步骤403:接收到数据创建消息的节点将该数据创建消息的广播范围域值递减1,查看存储表,如果存在一个存储表项,该存储表项的数据ID等于该数据创建消息的数据ID,该节点则将该存储表项的数据域值更新为该数据创建消息负载中的数据,将生命周期设置为最大值;否则,该节点创建一个存储表项,该存储表项的数据ID等于该数据创建消息的数据ID,数据域值等于该数据创建消息负载中的数据,生命周期设置为最大值;
[0054] 步骤404:接收到数据创建消息的节点查看查询表;如果存在一个查询表项,该查询表项的数据ID等于该数据创建消息的数据ID,则执行步骤405,否则执行步骤406;
[0055] 步骤405:接收到数据创建消息的节点选择一个查询表项,该查询表项的数据ID等于该数据创建消息的数据ID,将该数据创建消息的广播范围域值更新为该查询表项的距离域值,删除该查询表项,转发该数据创建消息,执行步骤403;
[0056] 步骤406:接收到数据创建消息的节点判断该数据创建消息的广播范围域值是否等于0,如果是,则执行步骤408,否则执行步骤407;
[0057] 步骤407:接收到数据创建消息的节点转发该数据创建消息,执行步骤403;
[0058] 步骤408:结束;
[0059] 节点产生数据后通过上述过程进行发布,在数据发布过程中,节点通过查询表能够将该数据返回到请求该数据的节点,因此降低了节点获取数据的延迟,同时提高了节点获取数据的成功率,此外,某些节点无需发送查询消息即可获取响应数据,进一步降低了数据通信延迟,不仅解决了无线网络丢包率高的问题,也避免了节点由于数据通信失败而再次请求数据的情况。
[0060] 本发明所述方法中,数据C1由数据ID CID1标识;如果节点N1检测到自己的索引表中任何一个索引表项的数据ID集合中都不包含CID1,并且执行301~315并没有获取数据C1,节点N1则通过下述过程获取数据C1:
[0061] 步骤501:开始;
[0062] 步骤502:节点N1设置一个参数h2,参数h2的初始值为常量X;,常量X一般为大于5的正整数;
[0063] 步骤503:节点N1将参数h2的值递增1;如果参数h2的值大于阈值TS2,则执行步骤516,否则执行步骤504;阈值TS2为大于常量X的正整数;阈值TS2越大,二次查询消息和二次数据消息的广播范围越大;
[0064] 步骤504:节点N1设置一个时钟TM2,发送二次查询消息,该二次查询消息的消息类型为6,数据ID为CID1,广播范围域值为参数h2,负载为参数h2;
[0065] 步骤505:接收到二次查询消息的节点将该二次查询消息的广播范围域值递减1,查看存储表;如果存在一个存储表项,该存储表项的数据ID等于该二次查询消息的数据ID,则执行步骤506,否则执行步骤507;
[0066] 步骤506:接收到二次查询消息的节点选择一个存储表项,该存储表项的数据ID等于该二次查询消息的数据ID,该节点发送一个二次数据消息,该二次数据消息的数据ID等于该二次查询消息的数据ID,消息类型为7,广播范围域值等于该二次查询消息负载中的参数h2与该二次查询消息广播范围域值之差的绝对值,负载为该存储表项中的数据域值,执行步骤510;
[0067] 步骤507:接收到二次查询消息的节点查看查询表,如果存在一个查询表项,该查询表项的数据ID等于该二次查询消息的数据ID,则执行步骤510,否则执行步骤508;
[0068] 步骤508:接收到二次查询消息的节点创建一个查询表项,该查询表项的数据ID等于该二次查询消息的数据ID,距离域值等于该二次查询消息负载中的参数h2与该二次查询消息广播范围域值之差的绝对值,生命周期设置为最大值,例如1s;该节点判断该二次查询消息的广播范围域值是否为0,如果是,则执行步骤510,否则执行步骤509;
[0069] 步骤509:接收到二次查询消息的节点转发接收到的二次查询消息,执行步骤505;
[0070] 步骤510:接收到二次数据消息的节点,将该二次数据消息的广播范围域值递减1,查看查询表;如果存在一个查询表项,该查询表项的数据ID等于该二次数据消息的数据ID,则执行步骤511,否则执行步骤512;
[0071] 步骤511:接收到二次数据消息的节点选择一个查询表项,该查询表项的数据ID等于该二次数据消息的数据ID,将该二次数据消息的广播范围域值更新为该查询表项的距离域值,删除该查询表项,转发该二次数据消息,执行步骤510;
[0072] 步骤512:接收到二次数据消息的节点查看该二次数据消息的广播范围域值是否为0,如果是,则执行步骤514,否则执行步骤513;
[0073] 步骤513:接收到二次数据消息的节点转发该二次数据消息,执行步骤510;
[0074] 步骤514:判断节点N1是否在时钟TM2规定的时间范围内接收到二次数据消息,如果是,则执行步骤515,否则执行步骤503;
[0075] 步骤515:接收到二次数据消息的节点N1创建一个存储表项,该存储表项的数据ID等于该二次数据消息的数据ID,数据域值等于该二次数据消息负载中的数据域值,生命周期设置为最大值;
[0076] 步骤516:结束。
[0077] 为了确保节点能够获取所需数据,节点通过存储表能够从距离最近的车辆节点获取所需数据,此外,由于在查询消息经过的所有中间节点均能够返回数据,同时,响应数据能够根据二次查询消息中的广播范围进行传输,因此节点无需发送请求消息即可获取响应数据,降低了数据通信延迟,此外,车辆节点采用查询表实现了查询消息的聚合,多个节点通过一次数据通信过程能够同时获取数据,部分节点能够从中间节点共享数据,因此进一步降低了数据通信延迟;由于上述过程中任何接收到二次查询消息且能提供目标数据的节点均能返回响应数据,因此提高了数据通信成功率,解决了无线网络丢包率高的问题,也避免了车辆节点由于数据通信失败而再次请求数据的情况,因此大幅度降低了数据通信延迟和代价。由于响应数据通过查询表自动返回到源节点,无需建立路由,也无需维护路由信息,因此大幅度降低了数据通信和代价,提高了数据通信性能。
[0078] 有益效果:本发明提供了一种基于命名数据的物联网数据通信方法,用户通过本发明提供的方法能够快速获取数据,从而降低数据通信延迟和代价,提高服务质量。本发明可应用于智能家居、环境监测、路况监测等诸多领域,具有广泛的应用前景。