[0113] 下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
[0114] 图1为本发明所述的维护控制器表示意图。
[0115] 图2为本发明所述的注册流程示意图。
[0116] 图3为本发明所述的维护转发表流程示意图。
[0117] 图4为本发明所述的更新提供者表流程示意图。
[0118] 图5为本发明所述的删除转发表流程示意图。
[0119] 图6为本发明所述的更新转发表流程示意图。
[0120] 图7为本发明所述的本地数据通信流程示意图。
[0121] 图8为本发明所述的远程数据通信流程示意图。具体实施方式:
[0122] 本发明提供了一种高效的命名数据网络实现方法,设备通过本发明中的实现方法能够快速获取数据,大幅度降低了数据通信延迟,提高了数据通信质量。本发明可应用于交通路况检控及农业工程化等诸多领域,具有广泛的应用前景。
[0123] 图1为本发明所述的维护控制器表示意图。所述网络由一个控制器、两个以上的路由器和两个以上的设备构成;一个控制器配置两个以上的有线接口,每个有线接口与一个路由器连接;一个路由器配置两个以上的上游有线接口、两个以上的下游有线接口以及两个以上的下游无线接口,每个上游有线接口与一个控制器或者路由器相连,一个路由器的下游有线接口与一个路由器或者设备相连,一个路由器的下游无线接口与设备相连;一个设备配置一个有线接口或者一个无线接口,该接口与路由器相连,该路由器称为该设备的关联路由器;
[0124] 每个有线接口或者无线接口由一个接口ID唯一标识,接口ID预先配置,接口ID为i的接口简写为接口i;
[0125] 一种类型的数据由一个名称唯一标识;一个消息由名称、消息类型、接口ID集合和负载构成;消息类型值如下所示:
[0126] 消息类型名称 消息类型值发布消息 1
注册消息 2
更新消息 3
信标消息 4
删除消息 5
请求消息 6
响应消息 7
[0127] 每个路由器保存一个控制器表,控制器表至多包含一个控制器表项,该控制器表项包含接口ID集合和生命周期域;控制器定期执行下述操作维护控制器表:
[0128] 步骤101:开始;
[0129] 步骤102:控制器构建一个发布消息,该发布消息的名称为空,消息类型值为1,接口ID集合为空,负载为空;控制器从每个接口发送该发布消息;
[0130] 步骤103:路由器从上游接口u1接收到发布消息后,将上游接口u1加入到该发布消息接口ID集合中并作为最后一个元素;该路由器查看控制器表,如果存在一个控制器表项且该控制器表项的接口ID集合域的元素个数小于该发布消息的接口ID集合的元素个数,则执行步骤110,否则执行步骤104;
[0131] 步骤104:从上游接口u1接收到发布消息的路由器查看控制器表,如果存在一个控制器表项且该控制器表项的接口ID集合域等于该发布消息的接口ID集合,则执行步骤105,否则执行步骤106;
[0132] 步骤105:从上游接口u1接收到发布消息的路由器将控制表中的控制器表项的生命周期设置为最大值,从每个下游接口转发该发布消息,执行步骤103;
[0133] 步骤106:从上游接口u1接收到发布消息的路由器查看控制器表,如果存在一个控制器表项且该控制器表项的接口ID集合域的元素个数等于该发布消息的接口ID集合的元素个数,则执行步骤110,否则执行步骤107;
[0134] 步骤107:从上游接口u1接收到发布消息的路由器查看控制器表,如果存在一个控制器表项,则执行步骤108,否则执行步骤109;
[0135] 步骤108:从上游接口u1接收到发布消息的路由器删除控制表中的控制器表项;
[0136] 步骤109:从上游接口u1接收到发布消息的路由器创建一个控制器表项,该控制器表项的接口ID集合等于该发布消息的接口ID集合,生命周期设置为最大值,执行步骤103;
[0137] 步骤110:结束;
[0138] 如果路由器检测到控制器表项的生命周期过期,则删除该控制器表项。
[0139] 图2为本发明所述的注册流程示意图。一个路由器或者控制器维护一个转发表,每个转发表项包含名称域、接口ID集合域、定时器集合域以及生命周期域;
[0140] 每个路由器维护一个提供者表,一个提供者表项包括名称、接口和生命周期域;
[0141] 在设备D1的关联路由器为路由器R1,数据C1由名称N1唯一标识的条件下,设备D1产生数据C1或者设备D1的关联路由器发生了变化之后,设备D1执行下述操作:
[0142] 步骤201:开始;
[0143] 步骤202:设备D1发送注册消息,该注册消息的名称为名称N1,接口ID集合为空,消息类型值为2,负载为空;
[0144] 步骤203:路由器R1从下游接口f1接收到该注册消息后查看提供者表,如果存在一个提供者表项,该提供者表项的名称域值为N1,接口ID为f1,则执行步骤204,否则执行步骤205;
[0145] 步骤204:路由器R1从下游接口f1接收到该注册消息后,选择一个提供者表项,该提供者表项的名称域值为N1,接口ID为f1,将该提供者表项的生命周期设置为最大值,执行步骤206;
[0146] 步骤205:路由器R1从下游接口f1接收到该注册消息后,创建一个提供者表项,该提供者表项的名称域值为N1,接口ID为f1,生命周期设置为最大值;
[0147] 步骤206:结束。
[0148] 图3为本发明所述的维护转发表流程示意图。路由器R1定期执行下述操作维护转发表:
[0149] 步骤301:开始;
[0150] 步骤302:路由器R1创建一个名称集合参数NS1,名称集合参数NS1的初始值为空;路由器R1查看提供者表,针对每个提供者表项,路由器R1执行下述操作:如果该提供者表项的名称包含在名称集合参数NS1中,则不执行任何操作,否则将该提供者表项的名称域值加入到名称集合参数NS1中;
[0151] 步骤303:对于名称集合参数NS1中的每个元素,路由器R1执行下述操作:路由器R1查看控制器表项,构建一个更新消息,该更新消息的名称为名称N1,接口ID集合为控制器表项中的接口ID集合,消息类型值为3,负载为接口ID集合参数P1,接口ID集合参数P1的初始值为空,路由器R1选取更新消息接口ID集合中的最后一个元素标识的接口,从更新消息接口ID集合中删除最后一个元素,从选中的接口转发该更新消息;
[0152] 步骤304:判断是控制器从接口f2还是路由器从接口f3接收到该更新消息,如果是控制器则执行步骤306,否则执行步骤305;
[0153] 步骤305:路由器将f3加入到该更新消息负载中的参数P1中并作为最后一个元素存在;如果存在一个转发表项,该转发表项的名称域值等于名称N1且接口ID集合等于该更新消息负载中的参数P1,则将该转发表项的生命周期设置为最大值;否则创建一个转发表项,该转发表项的名称域值等于名称N1,接口ID集合等于该更新消息负载中的参数P1,生命周期设置为最大值;该路由器选取更新消息接口ID集合中的最后一个元素标识的接口,从更新消息接口ID集合中删除最后一个元素,从选中的接口转发该更新消息,执行步骤304;
[0154] 步骤306:控制器将f2加入到该更新消息负载中的参数P1中并作为最后一个元素存在;如果存在一个转发表项,该转发表项的名称域值等于名称N1且接口ID集合等于该更新消息负载中的参数P1,则将该转发表项的生命周期设置为最大值;否则该控制器创建一个转发表项,该转发表项的名称域值等于名称N1,接口ID集合等于该更新消息负载中的参数P1,定时器集合为空,生命周期设置为最大值;
[0155] 步骤307:结束。
[0156] 图4为本发明所述的更新提供者表流程示意图。如果设备D1的关联路由器为路由器R1,设备D1定期执行下述操作更新提供者表项:
[0157] 步骤401:开始;
[0158] 步骤402:设备D1发送一个信标消息,该信标消息的名称为空,接口ID集合为空,消息类型值为4,负载为设备D1所能提供的所有数据的名称集合;
[0159] 步骤403:路由器R1从接口z1接收到该信标消息后,查看提供者表;针对信标消息负载中的名称集合中的每个名称N',路由器R1执行下述操作:路由器R1选择一个提供者表项,该提供者表项的名称域值等于名称N'且接口ID等于z1,将该提供者表项的生命周期设置为最大值;
[0160] 步骤404:结束。
[0161] 图5为本发明所述的删除转发表流程示意图。如果路由器R1检测到提供者表项E1的生命周期衰减到0,则执行下述操作更新转发表:
[0162] 步骤501:开始;
[0163] 步骤502:路由器R1查看是否至少存在两个提供者表项,这两个提供者表项的名称域值等于提供者表项E1的名称域值,如果是,则执行步骤503,否则执行步骤504;
[0164] 步骤503:路由器R1删除提供者表项E1,执行步骤508;
[0165] 步骤504:路由器R1选择控制器表项,构建一个删除消息,该删除消息的名称域值等于提供者表项E1中的名称域值,接口ID集合等于控制器表项的接口ID集合,消息类型值为5,负载为接口ID集合参数P2,参数P2的初始值为空;路由器R1选择删除消息接口ID集合中的最后一个元素标识的接口,从删除消息接口ID集合中删除最后一个元素,从选中的接口转发该删除消息,路由器R1删除提供者表项E1;
[0166] 步骤505:判断是控制器从接口f4还是路由器从接口f5接收到该删除消息,如果是控制器则执行步骤507,否则执行步骤506;
[0167] 步骤506:路由器将f5加入到该删除消息负载中的参数P2中并作为最后一个元素;如果该路由器的转发表中存在一个转发表项,该转发表项的名称等于该删除消息的名称且接口ID集合等于参数P2,则该路由器删除该转发表项;该路由器选择删除消息接口ID集合中的最后一个元素标识的接口,从删除消息接口ID集合中删除最后一个元素,从选中的接口转发该删除消息,执行步骤505;
[0168] 步骤507:控制器将f4加入到该删除消息负载中的参数P2中并作为最后一个元素;如果控制器的转发表中存在一个转发表项,该转发表项的名称等于该删除消息的名称且接口ID集合等于参数P2,控制器则删除该转发表项;
[0169] 步骤508:结束。
[0170] 图6为本发明所述的更新转发表流程示意图。在设备D1的关联路由器为路由器R1,数据C1由名称N1定义的条件下,如果设备D1删除了数据C1,它则执行下述操作更新转发表:
[0171] 步骤601:开始;
[0172] 步骤602:设备D1发送删除消息,该删除消息的名称为名称N1,接口ID集合为空,消息类型值为5,负载为空;路由器R1从接口z2接收到该删除消息后查看是否至少存在两个提供者表项,这两个提供者表项的名称域值等于名称N1,如果是,则执行步骤603,否则执行步骤604;
[0173] 步骤603:路由器R1删除名称域值等于名称N1且接口ID等于z2的提供者表项,执行步骤608;
[0174] 步骤604:路由器R1选择控制器表项,将接收到的删除消息的接口ID集合更新为控制器表项的接口ID集合,负载更新为接口ID集合参数P3,参数P3的初始值为空;路由器R1选择删除消息接口ID集合中的最后一个元素标识的接口,从删除消息接口ID集合中删除最后一个元素,从选中的接口转发该删除消息,路由器R1删除名称域值等于名称N1且接口ID等于z2的提供者表项;
[0175] 步骤605:判断是控制器从接口f6还是路由器从接口f7接收到该删除消息,如果是控制器则执行步骤607,否则执行步骤606;
[0176] 步骤606:路由器将f7加入到该删除消息负载中的参数P3中并作为最后一个元素;如果该路由器的转发表中存在一个转发表项,该转发表项的名称等于该删除消息的名称且接口ID集合等于参数P3,则该路由器删除该转发表项;该路由器选择删除消息接口ID集合中的最后一个元素标识的接口,从删除消息接口ID集合中删除最后一个元素,从选中的接口转发该删除消息,执行步骤605;
[0177] 步骤607:控制器将f6加入到该删除消息负载中的参数P3中并作为最后一个元素;如果控制器的转发表中存在一个转发表项,该转发表项的名称等于该删除消息的名称且接口ID集合等于参数P3,控制器则删除该转发表项;
[0178] 步骤608:结束。
[0179] 图7为本发明所述的本地数据通信流程示意图。每个路由器或者控制器保存一个请求表,每个请求表项包含名称、接口ID集合和生命周期;设备D2的关联路由器为路由器R1,数据C1由名称N1唯一标识;如果路由器R1至少存在一个名称域值等于名称N1的提供者表项,设备D2则执行下述操作获取数据C1:
[0180] 步骤701:开始;
[0181] 步骤702:设备D2发送请求消息,该请求消息的名称为名称N1,消息类型值为6,接口ID集合为空,负载为空;
[0182] 步骤703:路由器R1从接口x1接收到该请求消息;如果存在一个请求表项,该请求表项的名称等于该请求消息的名称域值且接口ID集合包含x1,则执行步骤707,否则执行步骤704;
[0183] 步骤704:路由器R1查看请求表,如果存在一个请求表项,该请求表项的名称等于该请求消息的名称,则执行步骤705,否则执行步骤706;
[0184] 步骤705:路由器R1选择一个请求表项,该请求表项的名称等于该请求消息的名称,将接口x1加入到该请求表项的接口ID集合中,生命周期设置为最大值,执行步骤707;
[0185] 步骤706:路由器R1创建一个请求表项,该请求表项的名称等于该请求消息的名称,接口ID集合域值等于{x1},即接口ID集合中只包含一个元素x1,生命周期设置为最大值;路由器R1选择一个提供者表项,该提供者表项的名称等于该请求消息中的名称域值,从该提供者表项的接口ID域值所标识的接口转发该请求消息;设备接收到该请求消息后,发送一个响应消息,该响应消息的名称为该请求消息中的名称,消息类型值为7,接口ID集合等于空,负载为响应消息;
[0186] 步骤707:路由器R1接收到响应消息后,选择一个请求表项,该请求表项的名称域值等于该响应消息的名称域值;对于该请求表项的接口ID集合中的每个元素,路由器R1执行下述操作:路由器R1选中该元素所标识的接口并从该接口转发响应消息;
[0187] 步骤708:路由器R1删除名称域值等于接收到的响应消息的名称域值的请求表项;
[0188] 步骤709:设备D2接收到响应消息后,保存该响应消息负载中的数据;
[0189] 步骤710:结束。
[0190] 图8为本发明所述的远程数据通信流程示意图。一个转发表项中,如果接口ID集合中的元素个数等于n1,定时器集合中的元素个数等于n2,那么该转发表项的权值w1如公式(1)所示:
[0191] w1=n1+α×n2 (1)
[0192] 其中α为调节参数,为正数;如果一个转发表项中的定时器集合中的一个元素过期,则该元素自动从该定时器集合中删除;在设备D2的关联路由器为路由器R1,数据C1由名称N1唯一标识的条件下,如果路由器R1中任何一个提供者表项的名称域值都不等于名称N1,设备D2则执行下述操作获取数据C1:
[0193] 步骤801:开始;
[0194] 步骤802:设备D2发送请求消息,该请求消息的名称为名称N1,消息类型值为6,接口ID集合为空,负载为空;
[0195] 步骤803:路由器R1从接口y1接收到该请求消息;如果路由器R1存在一个请求表项,该请求表项的名称等于该请求消息的名称域值且接口ID集合包含接口y1,则执行步骤824,否则执行步骤804;
[0196] 步骤804:路由器R1查看请求表,如果存在一个请求表项,该请求表项的名称等于该请求消息的名称,则执行步骤805,否则执行步骤806;
[0197] 步骤805:路由器R1选择一个请求表项,该请求表项的名称等于该请求消息的名称,将接口y1加入到该请求表项的接口ID集合域中,生命周期设置为最大值,执行步骤824;
[0198] 步骤806:路由器R1创建一个请求表项,该请求表项的名称等于该请求消息的名称,接口ID集合域值等于{y1},生命周期设置为最大值;路由器R1将该请求消息的接口ID集合更新为自己的控制器表项的接口ID集合,选择该请求消息接口ID集合中的最后一个元素标识的接口,从该请求消息接口ID集合中删除最后一个元素,从选中的接口转发该请求消息;
[0199] 步骤807:判断是控制器从接口y2还是路由器从接口y3接收到该请求消息,如果是控制器则执行步骤814,否则执行步骤808;
[0200] 步骤808:路由器从接口y3接收到该请求消息,如果存在一个请求表项,该请求表项的名称等于该请求消息的名称且接口ID集合包含接口y3,则执行步骤824,否则执行步骤809;
[0201] 步骤809:从接口y3接收到该请求消息的路由器查看请求表,如果存在一个请求表项,该请求表项的名称等于该请求消息的名称,则执行步骤810,否则执行步骤811;
[0202] 步骤810:从接口y3接收到该请求消息的路由器选择一个请求表项,该请求表项的名称等于该请求消息的名称,将接口y3加入到该请求表项的接口ID集合域,生命周期设置为最大值,执行步骤824;
[0203] 步骤811:从接口y3接收到该请求消息的路由器创建一个请求表项,该请求表项的名称等于该请求消息的名称,接口ID集合域值等于{y3},生命周期设置为最大值;如果该路由器至少存在一个转发表项,该转发表项的名称域值等于该请求消息的名称域值,则执行步骤812,否则执行步骤813;
[0204] 步骤812:从接口y3接收到该请求消息的路由器在名称域值等于该请求消息的名称域值的转发表项中选择一个权值最小的转发表项,在该转发表项的定时器集合中加入一个定时器,其初始值预先设置,将该请求消息的接口ID集合更新为该转发表项的接口ID集合,选择该请求消息接口ID集合中的最后一个元素标识的接口,从该请求消息接口ID集合中删除最后一个元素,从选中的接口转发该请求消息,执行步骤818;
[0205] 步骤813:从接口y3接收到该请求消息的路由器选择该请求消息接口ID集合中的最后一个元素标识的接口,从该请求消息接口ID集合中删除最后一个元素,从选中的接口转发该请求消息,执行步骤807;
[0206] 步骤814:控制器从接口y2接收到该请求消息,如果存在一个请求表项,该请求表项的名称等于该请求消息的名称且接口ID集合包含y2,则执行步骤824,否则执行步骤815;
[0207] 步骤815:从接口y2接收到该请求消息的控制器查看请求表,如果存在一个请求表项,该请求表项的名称等于该请求消息的名称,则执行步骤816,否则执行步骤817;
[0208] 步骤816:从接口y2接收到该请求消息的控制器选择一个请求表项,该请求表项的名称等于该请求消息的名称,将y2加入到该请求表项的接口ID集合域,生命周期设置为最大值,执行步骤824;
[0209] 步骤817:从接口y2接收到该请求消息的控制器创建一个请求表项,该请求表项的名称等于该请求消息的名称,接口ID集合域值等于{y2},生命周期设置为最大值;在所有名称域值等于该请求消息的名称域值的转发表项中选择一个权值最小的转发表项,在该转发表项的定时器集合中加入一个定时器,将该请求消息的接口ID集合更新为该转发表项的接口ID集合;控制器选择该请求消息接口ID集合中的最后一个元素标识的接口,从该请求消息接口ID集合中删除最后一个元素,从选中的接口转发该请求消息;
[0210] 步骤818:路由器从接口y4接收到该请求消息,如果存在一个请求表项,该请求表项的名称等于该请求消息的名称且接口ID集合包含接口y4,则执行步骤824,否则执行步骤819;
[0211] 步骤819:从接口y4接收到该请求消息的路由器查看请求表,如果存在一个请求表项,该请求表项的名称等于该请求消息的名称,则执行步骤820,否则执行步骤821;
[0212] 步骤820:从接口y4接收到该请求消息的路由器选择一个请求表项,该请求表项的名称等于该请求消息的名称,将接口y4加入到该请求表项的接口ID集合域,将该请求表项的生命周期设置为最大值,执行步骤824;
[0213] 步骤821:从接口y4接收到该请求消息的路由器创建一个请求表项,该请求表项的名称等于该请求消息的名称,接口ID集合域值等于{y4},生命周期设置为最大值;该路由器查看该请求消息的接口ID集合是否为空,如果是,则执行步骤823,否则执行步骤822;
[0214] 步骤822:从接口y4接收到该请求消息的路由器选择该请求消息接口ID集合中的最后一个元素标识的接口,从该请求消息接口ID集合中删除最后一个元素,从选中的接口转发该请求消息,执行步骤818;
[0215] 步骤823:从接口y4接收到该请求消息的路由器选择一个提供者表项,该提供者表项的名称等于该请求消息中的名称域值,从该提供者表项的接口ID域值所标识的接口转发该请求消息;设备接收到该请求消息后,发送一个响应消息,该响应消息的名称为该请求消息中的名称,消息类型值为7,接口ID集合等于空,负载为响应数据;
[0216] 步骤824:如果设备接收到响应消息,则执行步骤827,否则执行步骤825;
[0217] 步骤825:路由器或者控制器接收到响应消息后,选择一个请求表项,该请求表项的名称域值等于该响应消息的名称域值;对于该请求表项的接口ID集合中的每个元素,该路由器或者控制器执行下述操作:选中该元素所标识的接口并从该接口转发响应消息;
[0218] 步骤826:接收到响应消息的路由器或者控制器删除名称域值等于接收到的响应消息的名称域值的请求表项,执行步骤824;
[0219] 步骤827:设备接收到该响应消息后,保存响应消息负载中的数据;
[0220] 步骤828:结束。
[0221] 实施例1
[0222] 基于表1的仿真参数,本实施例模拟了本发明中的一种高效的命名数据网络实现方法,性能分析如下:当数据传输量增加时,数据通信成功率降低,当数据传输量减少时,数据通信成功率增加降低,数据通信平均成功率为96.7%。
[0223] 表1仿真参数
[0224]
[0225] 本发明提供了一种高效的命名数据网络实现方法的思路,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部份均可用现有技术加以实现。