[0085] 下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
[0086] 图1为本发明所述的数据获取流程示意图。
[0087] 图2为本发明所述的数据通信流程示意图。
[0088] 图3为本发明所述的链路断裂情况下的数据通信流程示意图。具体实施方式:
[0089] 本发明提供了一种高效可靠的物联网实现方法,移动节点通过本发明提供的方法能够快速获取数据,从而降低数据通信延迟和代价,提高服务质量。本发明可应用于农业工程化、智能医疗等诸多领域,具有广泛的应用前景。
[0090] 图1为本发明所述的数据获取流程示意图。所述物联网包括移动节点;一种数据由一个名称唯一标识,能够提供一种数据的移动节点称为该种数据的提供者,请求一种数据的移动节点称为该种数据的消费者;
[0091] 消费者通过消息获取数据,一个消息包含源MAC地址、目的MAC地址、名称域、消息类型域和负载,消息类型如下表所示:
[0092]消息类型 消息值
请求消息 1
数据消息 2
信标消息 3
回溯消息 4
[0093] 每个移动节点维护一个转发表,一个转发表项包含名称域、下一跳域、距离域和提供者域;名称域唯一指定一种类型的数据,下一跳域为到达提供者的下一跳的MAC地址,距离域为到达提供者的跳数,提供者域为提供者的MAC地址;
[0094] 每个移动节点维护一个数据表,每个数据表项包含消息域和生命周期域,如果一个数据表项的生命周期域值衰减为0,则从数据表中删除该数据表项;
[0095] 每个移动节点维护一个请求表,一个请求表项包含名称域,前一跳域和生命周期域;
[0096] 数据C1由名称NA1唯一标识,如果消费者U1需要获取数据C1,消费者U1首先查看转发表,如果所有转发表项的名称域值都不等于NA1,消费者U1则通过下述过程获取数据C1:
[0097] 步骤101:开始;
[0098] 步骤102:消费者U1发送一个请求消息,该请求消息的源MAC地址等于消费者U1的MAC地址,目的MAC地址为空,名称为NA1,消息类型为1,负载为空;
[0099] 步骤103:接收到请求消息的移动节点查看数据表,判断是否存在一个数据表项,该数据表项中的消息域值中的名称域值等于该请求消息的名称域值,如果是则执行步骤104,否则执行步骤105;
[0100] 步骤104:接收到请求消息的移动节点选择一个数据表项,该数据表项中的消息域值中的名称域值等于该请求消息的名称域值,然后发送一个数据消息,该数据消息的源MAC地址为该移动节点的MAC地址,目的MAC地址等于该请求消息的源MAC地址,名称和消息类型域值分别等于该数据表项中的消息域值中的名称和消息类型,负载包括三个部分:该移动节点的MAC地址,该数据表项中的消息域值中的负载值,参数d,参数d值为0,执行步骤108;
[0101] 步骤105:接收到请求消息的移动节点查看请求表,如果存在一个请求表项,该请求表项的名称域值等于该请求消息的名称域值且前一跳域值等于该请求消息的源MAC地址,则执行步骤106,否则执行步骤107;
[0102] 步骤106:接收到请求消息的移动节点选择一个请求表项,该请求表项的名称域值等于该请求消息的名称域值且前一跳域值等于该请求消息的源MAC地址,将该请求表项的生命周期设置为最大值,执行步骤108;
[0103] 步骤107:接收到请求消息的移动节点创建一个请求表项,该请求表项的名称域值等于该请求消息的名称域值,前一跳域值等于该请求消息的源MAC地址,生命周期设置为最大值,该移动节点将该请求消息的源MAC地址更新为自己的MAC地址,转发该请求消息,执行步骤103;
[0104] 步骤108:接收到数据消息的移动节点查看自己的MAC地址是否等于该数据消息的目的MAC地址,如果等于,则执行步骤110,否则执行步骤109;
[0105] 步骤109:接收到数据消息的移动节点丢弃该数据消息,执行步骤117;
[0106] 步骤110:接收到数据消息的移动节点查看数据表,如果存在一个数据表项,该数据表项的消息域值中的名称等于该数据消息中的名称,该移动节点则将该数据消息中的生命周期设置为最大值;否则该移动节点创建一个数据表项,该数据表项的消息域值等于该数据消息,生命周期设置为最大值;
[0107] 步骤111:接收到数据消息的移动节点将该数据消息中的参数d递增1,如果存在一个转发表项,该转发表项的名称域值等于该数据消息的名称,提供者域值等于该数据消息负载中的MAC地址且距离域值不大于数据消息中的参数d,则执行步骤115,否则执行步骤112;
[0108] 步骤112:接收到数据消息的移动节点查看转发表,如果存在一个转发表项,该转发表项的名称域值等于该数据消息的名称,提供者域值等于该数据消息负载中的MAC地址且距离域值大于数据消息中的参数d,则执行步骤113,否则执行步骤114;
[0109] 步骤113:接收到数据消息的移动节点选择一个转发表项,该转发表项的名称域值等于该数据消息的名称且提供者域值等于该数据消息负载中的MAC地址,将该转发表项的下一跳域值设置为该数据消息的源MAC地址,将该转发表项的距离域值设置为数据消息中的参数d,执行步骤115;
[0110] 步骤114:接收到数据消息的移动节点创建一个转发表项,该转发表项的名称域值等于该数据消息的名称,提供者域值等于该数据消息负载中的MAC地址,下一跳域值设置为该数据消息的源MAC地址,距离域值设置为数据消息中的参数d;
[0111] 步骤115:如果接收到数据消息的移动节点为消费者U1,则执行步骤117,否则执行步骤116;
[0112] 步骤116:接收到数据消息的移动节点查看请求表并选择所有名称域值等于该数据消息中的名称的请求表项;针对每一个选择的请求表项,移动节点将接收到的数据消息的目的MAC地址更新为该请求表项的前一跳域值,将该数据消息的源MAC地址更新为该移动节点的MAC地址,删除该请求表项,发送该数据消息,执行步骤108;
[0113] 步骤117:结束。
[0114] 图2为本发明所述的数据通信流程示意图。数据C1由名称NA1唯一标识,如果消费者U1需要获取数据C1,则首先查看转发表,如果至少有一个转发表项的名称域值等于NA1且在通信过程中没有链路断裂,消费者U1则通过下述过程获取数据C1:
[0115] 步骤201:开始;
[0116] 步骤202:消费者U1查看所有名称域值等于NA1的转发表项,从所述转发表项中选择一个距离域值最小的转发表项,发送一个请求消息,该请求消息的源MAC地址等于消费者U1的MAC地址,目的MAC地址为选择的转发表项的下一跳域值,名称为NA1,消息类型为1,负载为空;
[0117] 步骤203:接收到请求消息的移动节点判断自己的MAC地址是否等于该请求消息的目的MAC地址,如果是,则执行步骤205,否则执行步骤204;
[0118] 步骤204:接收到请求消息的移动节点丢弃该请求消息,执行步骤210;
[0119] 步骤205:接收到请求消息的移动节点查看数据表,判断是否存在一个数据表项,该数据表项中的消息域值中的名称域值等于该请求消息的名称域值,如果是则执行步骤206,否则执行步骤207;
[0120] 步骤206:接收到请求消息的移动节点选择一个数据表项,该数据表项中的消息域值中的名称域值等于该请求消息的名称域值,然后发送一个数据消息,该数据消息的源MAC地址为该移动节点的MAC地址,目的MAC地址等于该请求消息的源MAC地址,名称和消息类型域值分别等于该数据表项中的消息域值中的名称和消息类型,负载包括三个部分:该移动节点的MAC地址,该数据表项中的消息域值中的负载值,参数d,参数d值为0,执行步骤210;
[0121] 步骤207:接收到请求消息的移动节点查看请求表,判断是否存在一个请求表项,该请求表项的名称域值等于该请求消息的名称域值且前一跳域值等于该请求消息的源MAC地址,如果是则执行步骤208,否则执行步骤209;
[0122] 步骤208:接收到请求消息的移动节点选择一个请求表项,该请求表项的名称域值等于该请求消息的名称域值且前一跳域值等于该请求消息的源MAC地址,将该请求表项的生命周期设置为最大值,执行步骤210;
[0123] 步骤209:接收到请求消息的移动节点创建一个请求表项,该请求表项的名称域值等于该请求消息的名称域值,前一跳域值等于该请求消息的源MAC地址,生命周期设置为最大值,该移动节点查看所有名称域值等于该请求消息的名称的转发表项,从这些转发表项中选取一个距离值最小的转发表项,将该请求消息的目的MAC地址更新为该转发表项的下一跳域值,将该请求消息的源MAC地址更新为自己的MAC地址,转发该请求消息,执行步骤203;
[0124] 步骤210:接收到数据消息的移动节点查看自己的MAC地址是否等于该数据消息的目的MAC地址,如果等于,则执行步骤212,否则执行步骤211;
[0125] 步骤211:接收到数据消息的移动节点丢弃该数据消息,执行步骤219;
[0126] 步骤212:接收到数据消息的移动节点查看数据表,如果存在一个数据表项,该数据表项的消息域值中的名称等于该数据消息中的名称,该移动节点则将该数据消息中的生命周期设置为最大值;否则该移动节点创建一个数据表项,该数据表项的消息域值等于该数据消息,生命周期设置为最大值;
[0127] 步骤213:接收到数据消息的移动节点将该数据消息中的参数d递增1,如果存在一个转发表项,该转发表项的名称域值等于该数据消息的名称,提供者域值等于该数据消息负载中的MAC地址且距离域值不大于数据消息中的参数d,则执行步骤217,否则执行步骤214;
[0128] 步骤214:接收到数据消息的移动节点查看转发表,如果存在一个转发表项,该转发表项的名称域值等于该数据消息的名称,提供者域值等于该数据消息负载中的MAC地址且距离域值大于数据消息中的参数d,则执行步骤215,否则执行步骤216;
[0129] 步骤215:接收到数据消息的移动节点选择一个转发表项,该转发表项的名称域值等于该数据消息的名称且提供者域值等于该数据消息负载中的MAC地址,将该转发表项的下一跳域值设置为该数据消息的源MAC地址,将该转发表项的距离域值设置为数据消息中的参数d,执行步骤217;
[0130] 步骤216:接收到数据消息的移动节点创建一个转发表项,该转发表项的名称域值等于该数据消息的名称,提供者域值等于该数据消息负载中的MAC地址,下一跳域值设置为该数据消息的源MAC地址,距离域值设置为数据消息中的参数d;
[0131] 步骤217:判断接收到数据消息的移动节点是否为消费者U1,如果则执行步骤219,否则执行步骤218;
[0132] 步骤218:接收到数据消息的移动节点查看请求表并选择所有名称域值等于该数据消息中的名称的请求表项;针对每一个选择的请求表项,移动节点将接收到的数据消息的目的MAC地址更新为该请求表项的前一跳域值,将该数据消息的源MAC地址更新为自己的MAC地址,删除该请求表项,发送该数据消息,执行步骤210;
[0133] 步骤219:结束。
[0134] 图3为本发明所述的链路断裂情况下的数据通信流程示意图。一个移动节点维护一个邻居表,一个邻居表项由MAC地址域和生命周期域构成;一个移动节点定期广播信标消息,该信标消息的源MAC地址为该移动节点的MAC地址,目的MAC地址为空,消息类型为3,名称域值为空,负载为空;一个移动节点从邻居移动节点接收到信标消息后,查看邻居表;如果存在一个邻居表项,该邻居表项的MAC地址域值等于该信标消息的源MAC地址,它则将该邻居表项的生命周期设置为最大值,否则,该移动节点创建一个邻居表项,该邻居表项的MAC地址域值等于该信标消息的源MAC地址,该邻居表项的生命周期为最大值;
[0135] 如果一个移动节点检测到一个邻居表项的生命周期衰减到0,则删除所有下一跳域值等于该邻居表项的MAC地址域值的转发表项,然后删除该邻居表项;
[0136] 数据C1由名称NA1唯一标识;如果消费者U1需要获取数据C1,它首先查看转发表,如果至少有一个转发表项的名称域值都等于NA1且在通信过程中存在链路断裂,消费者U1则通过下述过程获取数据C1:
[0137] 步骤301:开始;
[0138] 步骤302:消费者U1查看所有名称域值等于NA1的转发表项,从这些转发表项中选择一个距离域值最小的转发表项,发送一个请求消息,该请求消息的源MAC地址等于消费者U1的MAC地址,目的MAC地址为选择的转发表项的下一跳域值,名称为NA1,消息类型为1,负载为空;
[0139] 步骤303:接收到请求消息的移动节点判断自己的MAC地址是否等于该请求消息的目的MAC地址,如果是,则执行步骤305,否则执行步骤304;
[0140] 步骤304:接收到请求消息的移动节点丢弃该请求消息,执行步骤312;
[0141] 步骤305:接收到请求消息的移动节点查看数据表,判断是否存在一个数据表项,该数据表项中的消息域值中的名称域值等于该请求消息的名称域值,如果是则执行步骤306,否则执行步骤307;
[0142] 步骤306:接收到请求消息的移动节点选择一个数据表项,该数据表项中的消息域值中的名称域值等于该请求消息的名称域值,然后发送一个数据消息,该数据消息的源MAC地址为该移动节点的MAC地址,目的MAC地址等于该请求消息的源MAC地址,名称和消息类型域值分别等于该数据表项中的消息域值中的名称和消息类型,负载包括三个部分:该移动节点的MAC地址,该数据表项中的消息域值中的负载值,参数d,参数d值为0,执行步骤312;
[0143] 步骤307:接收到请求消息的移动节点查看请求表,如果存在一个请求表项,该请求表项的名称域值等于该请求消息的名称域值且前一跳域值等于该请求消息的源MAC地址,则执行步骤308,否则执行步骤309;
[0144] 步骤308:接收到请求消息的移动节点选择一个请求表项,该请求表项的名称域值等于该请求消息的名称域值且前一跳域值等于该请求消息的源MAC地址,将该请求表项的生命周期设置为最大值,执行步骤312;
[0145] 步骤309:接收到请求消息的移动节点创建一个请求表项,该请求表项的名称域值等于该请求消息的名称域值,前一跳域值等于该请求消息的源MAC地址,生命周期设置为最大值,该移动节点判断是否存在名称域值等于该请求消息的名称的转发表项,如果是则执行步骤310,否则执行步骤311;
[0146] 步骤310:接收到请求消息的移动节点查看所有名称域值等于该请求消息的名称的转发表项,从这些转发表项中选取一个距离值最小的转发表项,将该请求消息的目的MAC地址更新为该转发表项的下一跳域值,将该请求消息的源MAC地址更新为自己的MAC地址,转发该请求消息,执行步骤303;
[0147] 步骤311:接收到请求消息的移动节点发送一个回溯消息,该回溯消息的源MAC地址等于该移动节点的MAC地址,目的MAC地址等于该请求消息的源MAC地址,名称域值等于该请求消息的名称域值,消息类型为4,负载为接收到的请求消息;
[0148] 步骤312:接收到数据消息或者回溯消息的移动节点查看自己的MAC地址是否等于该数据消息或者回溯消息的目的MAC地址,如果等于,则执行步骤314,否则执行步骤313;
[0149] 步骤313:接收到数据消息或者回溯消息的移动节点丢弃该数据消息或者回溯消息,执行步骤327;
[0150] 步骤314:判断移动节点接收到的消息是否为数据消息,如果是则执行步骤315,否则执行步骤322;
[0151] 步骤315:接收到数据消息的移动节点查看数据表,如果存在一个数据表项,该数据表项的消息域值中的名称等于该数据消息中的名称,该移动节点则将该数据消息中的生命周期设置为最大值;否则该移动节点创建一个数据表项,该数据表项的消息域值等于该数据消息,生命周期设置为最大值;
[0152] 步骤316:接收到数据消息的移动节点将该数据消息中的参数d递增1,如果存在一个转发表项,该转发表项的名称域值等于该数据消息的名称,提供者域值等于该数据消息负载中的MAC地址且距离域值不大于数据消息中的参数d,则执行步骤320,否则执行步骤317;
[0153] 步骤317:接收到数据消息的移动节点查看转发表,如果存在一个转发表项,该转发表项的名称域值等于该数据消息的名称,提供者域值等于该数据消息负载中的MAC地址且距离域值大于数据消息中的参数d,则执行步骤318,否则执行步骤319;
[0154] 步骤318:接收到数据消息的移动节点选择一个转发表项,该转发表项的名称域值等于该数据消息的名称且提供者域值等于该数据消息负载中的MAC地址,将该转发表项的下一跳域值设置为该数据消息的源MAC地址,将该转发表项的距离域值设置为数据消息中的参数d,执行步骤320;
[0155] 步骤319:接收到数据消息的移动节点创建一个转发表项,该转发表项的名称域值等于该数据消息的名称,提供者域值等于该数据消息负载中的MAC地址,下一跳域值设置为该数据消息的源MAC地址,距离域值设置为数据消息中的参数d;
[0156] 步骤320:判断接收到数据消息的移动节点是否为消费者U1,如果是则执行步骤327,否则执行步骤321;
[0157] 步骤321:接收到数据消息的移动节点查看请求表并选择所有名称域值等于该数据消息中的名称的请求表项;针对每一个选择的请求表项,移动节点将接收到的数据消息的目的MAC地址更新为该请求表项的前一跳域值,将该数据消息的源MAC地址更新为自己的MAC地址,删除该请求表项,发送该数据消息,执行步骤312;
[0158] 步骤322:接收到回溯消息的移动节点查看转发表,如果存在一个转发表项,该转发表项的名称域值等于该回溯消息的名称域值且下一跳域值不等于该回溯消息的源MAC地址域值,则执行步骤323,否则执行步骤324;
[0159] 步骤323:接收到回溯消息的移动节点选择一个转发表项,该转发表项的名称域值等于该回溯消息的名称域值且下一跳域值不等于该回溯消息的源MAC地址域值,所述移动节点发送一个请求消息,该请求消息的源MAC地址等于该移动节点的MAC地址,目的MAC地址等于该转发表项的下一跳域值,消息类型和名称域值分别等于该回溯消息负载中的请求消息中的消息类型和名称域值,负载为空,执行步骤303;
[0160] 步骤324:判断接收到回溯消息的移动节点是否为消费者U1,如果是则执行步骤325,否则执行步骤326;
[0161] 步骤325:消费者U1执行步骤101~117获取数据C1,执行步骤327;
[0162] 步骤326:接收到回溯消息的移动节点查看请求表并选择所有名称域值等于该回溯消息中的名称的请求表项;针对每一个选择的请求表项,移动节点将接收到的回溯消息的目的MAC地址更新为该请求表项的前一跳域值,将该回溯消息的源MAC地址更新为自己的MAC地址,删除该请求表项,发送该回溯消息,执行步骤312;
[0163] 步骤327:结束。
[0164] 实施例1
[0165] 基于表1的仿真参数,本实施例模拟了本发明中的一种高效可靠的物联网实现方法,性能分析如下:当数据量增加时,网络性能下降,数据获取延迟有所增加,当数据量减少时,网络性能增强,数据获取延迟有所降低,数据获取的平均延迟为528ms。
[0166] 表1仿真参数
[0167]
[0168] 本发明提供了一种高效可靠的物联网实现方法的思路,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部份均可用现有技术加以实现。