[0113] 下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
[0114] 图1为本发明所述的建立代理路由器流程示意图。
[0115] 图2为本发明所述普通路由器创建路由表流程示意图。
[0116] 图3为本发明所述节点创建路由表流程示意图。
[0117] 图4为本发明所述数据通信流程示意图。
[0118] 图5为本发明所述获取数据流程示意图。具体实施方式:
[0119] 本发明提供了一种高效的网络通信方法,节点通过本发明提供的网络通信方法能够快速获取数据,从而降低数据通信延迟和代价,提高服务质量。本发明可应用于农业工程化、智能医疗等诸多领域,具有广泛的应用前景。
[0120] 图1为本发明所述的建立代理路由器流程示意图。所述网络包括互联骨干网和两个以上的数据网络,数据网络包括一个骨干网络和两个以上的子网,骨干网络包括数据路由器构成,一个子网包括一个普通路由器和两个以上的节点构成,普通路由器即为接入路由器,其作用是将子网连接到骨干网络;在骨干网络中,包括一个数据路由器与互联骨干网链路相连,该数据路由器称为代理路由器;代理路由器支持数据网网络和互联骨干网所使用的协议;
[0121] 一个节点配置一个接口,节点与所在子网中的普通路由器链路相连,在一个子网中,普通路由器配置一个上游接口和两个以上的下游接口,该上游接口与一个数据路由器相连,每个下游接口与一个节点相连;一个数据路由器配置两个以上的接口;代理路由器的一个接口与互联骨干网链路相连,该接口的IP地址预先设置,例如abcd:1:efad:a::1/64,该代理路由器的其它接口与普通路由器或者数据路由器链路相连;不作为代理路由器的数据路由器的每个接口与数据路由器或者普通路由器链路相连;
[0122] 一个子网中,普通路由器由名称前缀唯一标识,该名称前缀预先设置,例如China/JS/Cslg/N6/,该子网由普通路由器的名称前缀唯一标识;每一个节点由一个节点ID唯一标识,该节点ID具有前缀唯一性,例如email地址;
[0123] 节点使用数据地址和消息实现通信;如果目的节点在数据网络中,数据地址则由名称前缀、节点ID,协议以及序列号构成,例如协议为pop3协议,命令为Start,User,Finish等;如果目的节点在互联骨干网中,数据地址由名称前缀、IP地址,协议以及序列号构成;
[0124] 所述方法中消息包括数据地址域、消息类型域和负载域;消息类型域值如下所示:
[0125] 消息类型 消息类型值代理路由器消息 1
路由消息 2
命令消息 3
确认消息 4
[0126] 一个普通路由器和一个数据路由器维护一个代理路由器表,一个代理路由器表项由接口域和生命周期域构成;代理路由器R1启动后,定期执行下述操作创建或者更新代理路由器表:
[0127] 步骤101:开始;
[0128] 步骤102:代理路由器R1定期从除了与互联骨干网相连的接口之外的每个接口发送代理路由器消息,该代理路由器消息中的数据地址中的名称前缀、节点ID以及协议为空,序列号为随机数,负载为空,消息类型为1;
[0129] 步骤103:如果数据路由器从自己的接口f1接收到代理路由器消息,则执行步骤104,否则执行步骤108;
[0130] 步骤104:从自己的接口f1接收到代理路由器消息的数据路由器查看代理路由器消息,如果已经接收到具有相同序列号的代理路由器消息,则丢弃该代理路由器消息并执行步骤111,否则执行步骤105;
[0131] 步骤105:从自己的接口f1接收到代理路由器消息的数据路由器查看代理路由器表,如果存在一个代理路由器表项,该代理路由器表项的接口域值为f1,则执行步骤106,否则执行步骤107;
[0132] 步骤106:从自己的接口f1接收到代理路由器消息的数据路由器选中接口域值为f1的代理路由器表项,将该代理路由器表项的生命周期设置为最大值,从除了接口f1以外的所有接口转发接收到的代理路由器消息,执行步骤103;
[0133] 步骤107:从自己的接口f1接收到代理路由器消息的数据路由器创建一个代理路由器表项,该代理路由器表项的接口域值为f1,生命周期域值为最大值,从除了接口f1以外的所有接口转发接收到的代理路由器消息,执行步骤103;
[0134] 步骤108:普通路由器从自己的接口f2接收到代理路由器消息,如果存在一个代理路由器表项,该代理路由器表项的接口域值为f2,则执行步骤109,否则执行步骤110;
[0135] 步骤109:从自己的接口f2接收到代理路由器消息的普通路由器选中接口域值为f2的代理路由器表项,将该代理路由器表项的生命周期设置为最大值,执行步骤111;
[0136] 步骤110:从自己的接口f2接收到代理路由器消息的普通路由器创建一个代理路由器表项,该代理路由器表项的接口域值为f2,生命周期域值为最大值;
[0137] 步骤111:结束;
[0138] 如果数据路由器或者普通路由器检测到一个代理路由器表项的生命周期衰减为0,则从代理路由器表中删除该代理路由器表项。
[0139] 上述过程能够快速建立代理路由器表从而实现数据的快速获取。
[0140] 图2为本发明所述普通路由器创建路由表流程示意图。一个普通路由器和一个数据路由器各自维护一个路由表,一个路由表项包括接口域、名称前缀域、设备ID域和生命周期域;
[0141] 普通路由器C1启动后,定期执行下述操作创建或者更新路由表:
[0142] 步骤201:开始;
[0143] 步骤202:普通路由器C1构建一个数据地址,该数据地址的名称前缀为普通路由器C1的名称前缀,协议和节点ID为空,序列号为随机数,普通路由器C1定期从上游接口发送路由消息,该路由消息中的数据地址为构建的数据地址,消息类型为2,负载为空;
[0144] 步骤203:如果数据路由器从自己的接口y1接收到路由消息,则执行步骤204,否则执行步骤208;
[0145] 步骤204:从自己的接口y1接收到路由消息的数据路由器查看路由消息,如果已经接收到具有相同序列号的路由消息,则丢弃该消息并执行步骤211,否则执行步骤205;
[0146] 步骤205:从自己的接口y1接收到路由消息的数据路由器查看路由表,如果存在一个路由表项,该路由表项的名称前缀等于接收到的路由消息的数据地址的名称前缀且接口域值等于y1,则执行步骤206,否则执行步骤207;
[0147] 步骤206:从自己的接口y1接收到路由消息的数据路由器选中名称前缀等于接收到的路由消息的数据地址的名称前缀且接口域值为y1的路由表项,将该路由表项的生命周期设置为最大值,从除了接口y1以外的所有接口转发接收到的路由消息,执行步骤203;
[0148] 步骤207:从自己的接口y1接收到路由消息的数据路由器创建一个路由表项,该路由表项的名称前缀等于接收到的路由消息的数据地址的名称前缀,设备ID域值为空,接口域值为y1,生命周期域值为最大值,数据路由器从除了接口y1以外的所有接口转发接收到的路由消息,执行步骤203;
[0149] 步骤208:普通路由器从自己的接口y2接收到路由消息,如果存在一个路由表项,该路由表项的名称前缀等于接收到的路由消息的数据地址的名称前缀,且接口域值为y2,则执行步骤209,否则执行步骤210;
[0150] 步骤209:从自己的接口y2接收到路由消息的普通路由器查看路由表,选中名称前缀等于接收到的路由消息的数据地址的名称前缀且接口域值为y2的路由表项,将该路由表项的生命周期设置为最大值,执行步骤211;
[0151] 步骤210:从自己的接口y2接收到路由消息的普通路由器创建一个路由表项,该路由表项的名称前缀等于接收到的路由消息的数据地址的名称前缀,接口域值为y2,设备ID域值为空,生命周期域值为最大值;
[0152] 步骤211:结束。
[0153] 上述过程能够快速建立路由表从而实现数据的快速获取。
[0154] 图3为本发明所述节点创建路由表流程示意图。节点N启动后,定期执行下述操作创建或者更新路由表:
[0155] 步骤301:开始;
[0156] 步骤302:节点N构建一个数据地址,该数据地址的名称前缀为空,协议为空,节点ID为节点N的节点ID,序列号为随机数,节点N定期发送路由消息,该路由消息中的数据地址为构建的数据地址,消息类型为2,负载为空;
[0157] 步骤303:与节点N连接的普通路由器从自己的接口y3接收到路由消息后,查看路由表,如果存在一个路由表项,该路由表项的节点ID等于接收到的路由消息的数据地址的节点ID且接口ID为y3,则执行步骤304,否则执行步骤305;
[0158] 步骤304:从自己的接口y3接收到路由消息的普通路由器选中节点ID等于接收到的路由消息的数据地址的节点ID且接口域值为y3的路由表项,将该路由表项的生命周期设置为最大值,执行步骤306;
[0159] 步骤305:从自己的接口y3接收到路由消息的普通路由器创建一个路由表项,该路由表项的名称前缀为空,节点ID等于接收到的路由消息的数据地址的节点ID,接口域值为y3,生命周期域值为最大值;
[0160] 步骤306:结束;
[0161] 如果数据路由器或者普通路由器检测到一个路由表项的生命周期衰减为0,则从路由表中删除该路由表项。
[0162] 上述过程能够快速建立路由表从而实现数据的快速获取。
[0163] 图4为本发明所述数据通信流程示意图。数据网络中的节点与互联网中的节点采用协议进行通信;协议的类型定义了通信内容;在所有协议中,第一条命令为启动,最后一条命令为终止;命令是消息的负载,例如步骤402;
[0164] 每个普通路由器和数据路由器各自维护一个路径表,一个路径表项包含数据地址域,接口域和生命周期域;
[0165] 在节点N1和节点N2位于数据网络中,节点N1与普通路由器R1相连,节点N2与普通路由器R2相连,普通路由器R1的名称前缀为NP1,普通路由器R2的名称前缀为NP2的条件下,节点N1利用协议P1通过下述过程实现与节点N2的通信:
[0166] 步骤401:开始;
[0167] 步骤402:节点N1构建一个数据地址,该数据地址中,名称前缀为名称前缀NP2,节点ID为节点N1的节点ID,协议为P1,序列号为随机数,节点N1发送命令消息,该命令消息的数据地址为构建的数据地址,消息类型为3,负载为启动命令;
[0168] 步骤403:普通路由器R1从自己的接口f1接收到命令消息后,查看路径表,如果存在一个路径表项,该路径表项的数据地址域值等于接收到的命令消息中的数据地址域值,则执行步骤404,否则执行步骤405;
[0169] 步骤404:从自己的接口f1接收到命令消息的普通路由器R1选择数据地址域值等于接收到的命令消息中的数据地址域值,将该路径表项的生命周期设置为最大值,例如1s,执行步骤406;
[0170] 步骤405:普通路由器R1创建一个路径表项,该路径表项的数据地址域值等于接收到的命令消息中的数据地址域值的路径表项,接口域值等于f1,生命周期设置为最大值;
[0171] 步骤406:普通路由器R1查看路由表,选择一个路由表项,该路由表项的名称前缀域值等于接收到的命令消息数据地址中的名称前缀,然后从该路由表项的接口域转发接收到的命令消息;
[0172] 步骤407:如果普通路由器R2接收到命令消息,则执行步骤408,否则执行步骤412;
[0173] 步骤408:普通路由器R2从自己的接口f2接收到命令消息,查看路径表,如果存在一个路径表项,该路径表项的数据地址域值等于接收到的命令消息中的数据地址域值,则执行步骤409,否则执行步骤410;
[0174] 步骤409:从自己的接口f2接收到命令消息的普通路由器R2选择数据地址域值等于接收到的命令消息中的数据地址域值的路径表项,将该路径表项的生命周期设置为最大值,例如1s,执行步骤411;
[0175] 步骤410:普通路由器R2创建一个路径表项,该路径表项的数据地址域值等于接收到的命令消息中的数据地址域值的路径表项,接口域值等于f2,生命周期设置为最大值;
[0176] 步骤411:普通路由器R2查看路由表,选择一个路由表项,该路由表项的节点ID域值等于接收到的命令消息数据地址中的节点ID,然后从该路由表项的接口域转发接收到的命令消息,执行步骤416;
[0177] 步骤412:数据路由器从自己的接口f3接收到命令消息,查看路径表,如果存在一个路径表项,该路径表项的数据地址域值等于接收到的命令消息中的数据地址域值,则执行步骤413,否则执行步骤414;
[0178] 步骤413:从自己的接口f3接收到命令消息的数据路由器选择数据地址域值等于接收到的命令消息中的数据地址域值的路径表项,将该路径表项的生命周期设置为最大值,例如1s,执行步骤415;
[0179] 步骤414:从自己的接口f3接收到命令消息的数据路由器创建一个路径表项,该路径表项的数据地址域值等于接收到的命令消息中的数据地址域值的路径表项,接口域值等于f3,生命周期设置为最大值;
[0180] 步骤415:从自己的接口f3接收到命令消息的数据路由器查看路由表,选择一个路由表项,该路由表项的名称前缀域值等于接收到的命令消息数据地址中的名称前缀,然后从该路由表项的接口域转发接收到的命令消息,执行步骤407;
[0181] 步骤416:节点N2收到命令消息后,如果命令消息负载中为启动命令,则执行步骤417,否则执行步骤418;
[0182] 步骤417:节点N2执行启动命令并发送一个确认消息,该确认消息的数据名称等于接收到的命令消息中的数据名称,消息类型为4,负载为执行启动命令的响应数据,执行步骤420;
[0183] 步骤418:节点N2收到命令消息后,如果命令消息负载中为结束命令,则执行步骤425,否则执行步骤419;
[0184] 步骤419:节点N2执行接收到的命令消息中的命令并发送一个确认消息,该确认消息的数据名称等于接收到的命令消息中的数据名称,消息类型为4,负载为执行命令的响应数据;
[0185] 步骤420:普通路由器R2接收到确认消息后,查看路径表,选择数据地址等于确认消息的数据地址的路径表项,并该路径表项的接口域值转发接收到的确认消息;
[0186] 步骤421:如果普通路由器R1接收到确认消息,则执行步骤423,否则执行步骤422;
[0187] 步骤422:数据路由器接收到确认消息后,查看路径表,选择数据地址等于确认消息的数据地址的路径表项,并通过该路径表项的接口域值转发接收到的确认消息,执行步骤421;
[0188] 步骤423:普通路由器R1接收到确认消息后,查看路径表,选择数据地址等于确认消息的数据地址的路径表项,并通过该路径表项的接口域值转发接收到的确认消息;
[0189] 步骤424:节点N1接收到确认消息后,保存确认消息中的响应数据,发送一个命令消息,该命令消息的数据地址等于接收到的确认消息中的数据地址,消息类型为3,如果节点N1需要结束通信,则该命令消息的负载为终止命令,否则为节点N1需要节点N2执行的命令,执行步骤403;
[0190] 步骤425:结束;
[0191] 如果一个路径表项的生命周期衰减为0,则从路径表中删除该路径表项。
[0192] 节点通过上述过程能够快速获取数据。
[0193] 图5为本发明所述获取数据流程示意图。代理路由器维护一个服务表,每个服务表项包含数据地址域、源端口域以及目的端口域;
[0194] 在互联骨干网中,每一种服务对应一个端口号,例如收取email协议pop3的端口号为110;
[0195] 如果节点N1位于数据网络中,节点N1与普通路由器R1相连,普通路由器R1的名称前缀为NP1,节点N3位于互联骨干网中,节点N1利用协议P3与节点N3进行通信,协议P3在互联骨干网中对应的端口号为b3,节点N1通过下述过程实现与节点N3的通信:
[0196] 步骤501:开始;
[0197] 步骤502:节点N1构建一个数据地址,该数据地址中,名称前缀为空,IP地址为节点N3的IP地址,协议为P3,序列号为随机数;节点N1发送命令消息,该命令消息的数据地址为构建的数据地址,消息类型为3,负载为启动命令;
[0198] 步骤503:普通路由器R1从自己的接口x1接收到命令消息后,查看路径表,如果存在一个路径表项,该路径表项的数据地址域值等于接收到的命令消息中的数据地址域值,则执行步骤504,否则执行步骤505;
[0199] 步骤504:从自己的接口x1接收到命令消息的普通路由器R1选择数据地址域值等于接收到的命令消息中的数据地址域值,将该路径表项的生命周期设置为最大值,例如1s,执行步骤506;
[0200] 步骤505:普通路由器R1创建一个路径表项,该路径表项的数据地址域值等于接收到的命令消息中的数据地址域值的路径表项,接口域值等于x1,生命周期设置为最大值;
[0201] 步骤506:普通路由器R1查看代理路由器表,选择一个代理路由器表项,从该代理路由器表项的接口域转发接收到的命令消息;
[0202] 步骤507:如果代理路由器接收到命令消息,则执行步骤512,否则执行步骤508;
[0203] 步骤508:数据路由器从自己的接口x2接收到命令消息,查看路径表,如果存在一个路径表项,该路径表项的数据地址域值等于接收到的命令消息中的数据地址域值,则执行步骤509,否则执行步骤510;
[0204] 步骤509:从自己的接口x2接收到命令消息的数据路由器选择数据地址域值等于接收到的命令消息中的数据地址域值的路径表项,将该路径表项的生命周期设置为最大值,例如1s,执行步骤511;
[0205] 步骤510:从自己的接口x2接收到命令消息的数据路由器创建一个路径表项,该路径表项的数据地址域值等于接收到的命令消息中的数据地址域值的路径表项,接口域值等于x2,生命周期设置为最大值;
[0206] 步骤511:从自己的接口x2接收到命令消息的数据路由器查看代理路由器表,选择一个代理路由器表项,然后从该代理路由器表项的接口域转发接收到的命令消息,执行步骤507;
[0207] 步骤512:代理路由器从自己的接口x3接收到命令消息,查看路径表,如果存在一个路径表项,该路径表项的数据地址域值等于接收到的命令消息中的数据地址域值,则执行步骤513,否则执行步骤514;
[0208] 步骤513:从自己的接口x3接收到命令消息的代理路由器选择数据地址域值等于接收到的命令消息中的数据地址域值的路径表项,将该路径表项的生命周期设置为最大值,例如1s,执行步骤515;
[0209] 步骤514:代理路由器创建一个路径表项,该路径表项的数据地址域值等于接收到的命令消息中的数据地址域值,接口域值等于x3,生命周期设置为最大值;
[0210] 步骤515:代理路由器接收到命令消息后,如果命令消息负载中为启动命令,则执行步骤516,否则执行步骤517;
[0211] 步骤516:代理路由器创建一个端口s3,创建一个服务表,该服务表的数据地址为接收到的命令消息中的数据地址,源端口为s3,目的端口为b3;代理路由器通过与互联骨干网相连的接口发送一条消息,该消息的源地址为该接口的IP地址,目的地址为接收到的命令消息数据地址的IP地址,目的端口为b3,源端口为b3,负载为接收到的命令消息中的负载,执行步骤520;
[0212] 步骤517:代理路由器接收到命令消息后,如果命令消息负载中为终止命令,则执行步骤518,否则执行步骤519;
[0213] 步骤518:代理路由器查看服务表,选择一个服务表项,该服务表项的数据地址等于接收到的命令消息中的数据地址;代理路由器通过与互联骨干网相连的接口发送一条IP消息,该消息的源地址为该接口的IP地址,目的地址为接收到的命令消息数据地址的IP地址,目的端口和源端口为选中的服务表项的目的端口和源端口,负载为接收到的命令消息中的负载,删除选中的服务表项,执行步骤520;
[0214] 步骤519:代理路由器查看服务表,选择一个服务表项,该服务表项的数据地址等于接收到的命令消息中的数据地址;代理路由器通过与互联骨干网相连的接口发送一条消息,该消息的源地址为该接口的IP地址,目的地址为接收到的命令消息数据地址的IP地址,目的端口和源端口为选中的服务表项的目的端口和源端口,负载为接收到的命令消息中的负载;
[0215] 步骤520:该IP消息通过互联骨干网到达节点N3,该消息即为步骤518中代理路由器发送的消息,节点N3收到命令消息后,如果命令消息负载中为启动命令,则执行步骤521,否则执行步骤522;
[0216] 步骤521:节点N3执行启动命令并发送一个IP消息,该IP消息的源地址和源端口分别为接收到的IP消息的目的地址和目的端口,该IP消息的目的地址和目的端口分别为接收到的IP消息的源地址和源端口,负载为执行启动命令的响应数据,执行步骤524;
[0217] 步骤522:节点N3收到命令消息后,如果命令消息负载中为终止命令,则执行步骤529,否则执行步骤523;
[0218] 步骤523:节点N3执行接收到的命令消息中的命令并发送一个IP消息,该IP消息的源地址和源端口分别为接收到的IP消息的目的地址和目的端口,该IP消息的目的地址和目的端口分别为接收到的IP消息的源地址和源端口,负载为执行命令的响应数据;
[0219] 步骤524:IP消息通过互联骨干网到达代理路由器,代理路由器查看服务表,选择一个服务表项,该服务表项的源端口和目的端口分别等于接收到的IP消息的目的端口和源端口,然后代理路由器创建一个确认消息,该确认消息的数据名称等于所选的服务表项的数据名称,消息类型为4,负载为接收到的IP消息的负载;代理服务器查看路径表,选择数据地址等于创建的确认消息的数据地址的路径表项,并从该路径表项的接口域值转发该确认消息;
[0220] 步骤525:如果普通路由器R1接收到确认消息,则执行步骤527,否则执行步骤526;
[0221] 步骤526:数据路由器接收到确认消息后,查看路径表,选择数据地址等于接收到的确认消息的数据地址的路径表项,并通过该路径表项的接口域值转发接收到的确认消息,执行步骤525;
[0222] 步骤527:普通路由器R1接收到确认消息后,查看路径表,选择数据地址等于确认消息的数据地址的路径表项,并通过该路径表项的接口域值转发接收到的确认消息;
[0223] 步骤528:节点N1接收到确认消息后,保存确认消息中的响应数据,发送一个命令消息,该命令消息的数据地址等于接收到的确认消息中的数据地址,消息类型为3,如果节点N1需要结束通信,则该命令消息的负载为终止命令,否则为节点N1需要节点N3执行的命令,执行步骤503;
[0224] 步骤529:结束。
[0225] 节点通过上述过程能够快速获取数据。
[0226] 实施例1
[0227] 基于表1的仿真参数,本实施例模拟了本发明中的网络通信方法,性能分析如下:移动节点数量增加或者获取的数据量增加时,数据获取时间随之增加。数据获取平均延迟为1.2s。
[0228] 表1仿真参数
[0229]
[0230] 本发明提供了一种高效的网络通信方法的思路,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部份均可用现有技术加以实现。