1.一种基于簇的网络路由通信方法,其特征在于,所述网络包括两个以上的节点,所述网络划分为两个以上的簇;节点分为新节点、簇首节点、成员节点以及关联节点;一个簇由一个簇首节点和两个以上的成员节点构成,没有加入簇的节点称为新节点;如果一个成员节点属于两个以上的簇,该成员节点称为关联节点;
每个节点具有唯一的坐标;一种类型的数据由一个数据名称唯一标识;一个消息由消息类型标识,消息名称分别为发布消息、邻居消息、启动消息、簇首节点消息、信标消息、创建消息、转发消息、请求消息以及响应消息,分别对应消息类型值为1、2、3、4、5、6、7、8和9;
网络启动后,所有节点均为新节点;每个节点保存一个最小坐标(xmin, ymin)和最大坐标(xmax, ymax);一个节点的最小坐标(xmin, ymin)和最大坐标(xmax, ymax)的初始值为该节点的坐标;
节点发送的发布消息包含消息类型、最小坐标域和最大坐标域;新节点NN1通过下述过程更新最小坐标(xmin, ymin)和最大坐标(xmax, ymax):步骤101:开始;
步骤102:新节点NN1发送一个发布消息,该发布消息的消息类型值为1,最小坐标和最大坐标分别为新节点NN1保存的最小坐标和最大坐标;
步骤103:其他新节点接收到该发布消息后,设置一个时钟,并判断自己的最小坐标和最大坐标是否等于该发布消息的最小坐标和最大坐标,如果是,则执行步骤112,否则执行步骤104;
步骤104:步骤103中接收到该发布消息的新节点判断发布消息中的最小坐标的横坐标是否小于自己的最小坐标的横坐标,如果是,执行步骤105,否则执行步骤106;
步骤105:接收到该发布消息的新节点将自己的最小坐标的横坐标更新为发布消息中的最小坐标的横坐标;
步骤106:接收到该发布消息的新节点判断自己的最小坐标的纵坐标是否大于发布消息中的最小坐标的纵坐标,如果是,执行步骤107,否则执行步骤108;
步骤107:接收到该发布消息的新节点将自己的最小坐标的纵坐标更新为发布消息中的最小坐标的纵坐标;
步骤108:接收到该发布消息的新节点判断自己的最大坐标的横坐标是否小于发布消息中的最大坐标的横坐标,如果是,执行步骤109,否则执行步骤110;
步骤109:接收到该发布消息的新节点将自己的最大坐标的横坐标更新为发布消息中的最大坐标的横坐标;
步骤110:接收到该发布消息的新节点判断自己的最大坐标的纵坐标是否小于发布消息中的最大坐标的纵坐标,如果是,执行步骤111,否则执行步骤112;
步骤111:接收到该发布消息的新节点将自己的最大坐标的纵坐标更新为发布消息中的最大坐标的纵坐标;该新节点发送一个发布消息,该发布消息的消息类型值为1,最小坐标和最大坐标分别为该新节点保存的最小坐标和最大坐标;
步骤112:如果新节点在时钟范围内没有接收到发布消息,则执行步骤113,否则执行步骤103;
步骤113:结束;
网络中任一个节点获取最小坐标(xmin, ymin)和最大坐标(xmax, ymax)后,利用公式(1)和公式(2)计算中间坐标(xmid, ymid);
xmid =(xmax+xmin)/2 (1)
ymid =(ymax+ymin)/2 (2);
坐标(x1,y1)和坐标(x2,y2)的优先级根据下述算法判定:
如果x1大于x2,则坐标(x1,y1)的优先级大于坐标(x2,y2);
如果x1小于x2,则坐标(x1,y1)的优先级小于坐标(x2,y2);
如果x1等于x2且y1大于y2,则坐标(x1,y1)的优先级大于坐标(x2,y2);
如果x1等于x2且y1小于y2,则坐标(x1,y1)的优先级小于坐标(x2,y2);
一个邻居消息包含消息类型和坐标;一个启动消息包含消息类型、坐标和距离域;一个簇首节点消息包含消息类型和坐标;每个新节点保存一个坐标参数CP1,参数CP1的值等于该节点的坐标;如果一个新节点的坐标与中间坐标的距离小于新节点的通信半径,新节点则执行下述操作:步骤201:开始;
步骤202:新节点发送一个邻居消息,该邻居消息的消息类型值为2,坐标等于该新节点的坐标,启动时钟TM1;时钟TM1到期后,该新节点查看所有接收到的邻居消息并设置时钟TM2;如果所有邻居消息的坐标与中间坐标的距离大于或者等于该新节点的坐标与中间坐标的距离,则执行步骤203,否则执行步骤204;
步骤203:新节点发送一个启动消息,该启动消息的消息类型值为3,坐标等于新节点的坐标,距离等于该新节点的坐标与中间坐标的距离;
步骤204:时钟TM2到期后,新节点查看所有接收到的启动消息,如果所接收到的所有启动消息的坐标域值都相等且等于该新节点的坐标参数CP1的值,则执行步骤208,否则执行步骤205;
步骤205:时钟TM2到期后,新节点查看所有接收到的启动消息,如果所接收到的所有启动消息的坐标域值都相等,则执行步骤206,否则执行步骤207;
步骤206:时钟TM2到期后,新节点查看所有接收到的启动消息,选择一个启动消息,该启动消息的坐标具有最高权限,将坐标参数CP1的值设置为该启动消息的坐标域值,发送该启动消息,设置时钟TM2,执行步骤204;
步骤207:时钟TM2到期后,新节点查看所有接收到的启动消息,选择一个启动消息,该启动消息的距离值最小,将坐标参数CP1的值设置为该启动消息的坐标域值,发送该启动消息,设置时钟TM2,执行步骤204;
步骤208:如果一个新节点坐标值等于自己坐标参数CP1,该新节点将自己标记为簇首节点,发送一个簇首节点消息,该簇首节点消息的消息类型值为4,坐标等于该新节点的坐标值;新节点接收到簇首节点消息后,将自己标记为成员节点并保存簇首节点消息中的坐标;
步骤209:结束。
2.根据权利要求1所述的一种基于簇的网络路由通信方法,其特征在于,每个节点保存一个邻居表,一个邻居表项包含坐标、名称集合、节点类型值和生命周期域;如果节点类型值为1,则表明该邻居表项标识的节点为关联节点;如果节点类型值为0,则表明该邻居表项标识的节点为成员节点;如果节点类型值为2,则表明该邻居表项标识的节点为簇首节点;
如果节点类型值为3,则表明该邻居表项标识的节点为新节点;
一个信标消息包含消息类型、节点类型、名称集合和坐标域;一个节点定期执行下述操作:步骤301:开始;
步骤302:节点发送信标消息,该信标消息的消息类型值为5,名称集合由该节点所能提供的数据的名称构成,坐标等于该节点的坐标;如果该节点为新节点,则节点类型值为3,如果该节点为成员节点,则节点类型值为0,如果该节点为关联节点,则节点类型值为1,如果该节点为簇首节点,则节点类型值为2;
步骤303:邻居节点接收到该信标消息后查看邻居表;如果存在一个邻居表项,该邻居表项的坐标等于该信标消息中的坐标,则将该邻居表项的名称集合和类型值更新为该信标消息的名称集合和节点类型值,将生命周期设置为最大值;否则该邻居节点创建一个邻居表项,该邻居表项的坐标等于该信标消息中的坐标,名称集合和节点类型值分别等于该信标消息的名称集合和节点类型值,生命周期设置为最大值;
步骤304:结束。
3.根据权利要求2所述的一种基于簇的网络路由通信方法,其特征在于,如果节点A1和节点A2的纵坐标相同且节点A1的横坐标小于节点A2的横坐标,则节点A1和节点A2的角度为
0度,节点A2和节点A1的角度为180度;如果节点A1和节点A2的横坐标相同且节点A1的纵坐标小于节点A2的纵坐标,则节点A1和节点A2的角度为90度,节点A2和节点A1的角度为270度;创建消息由消息类型、类型、角度和坐标构成;
节点执行下述操作构建簇:
步骤401:开始;
步骤402:节点变成簇首节点后,从邻居表中选择所有符合条件1的邻居表项,从符合条件1的邻居表项中选择一个与簇首节点距离最远的邻居表项,发送一个创建消息,该创建消息的消息类型值为6,节点类型值为2,坐标等于该邻居表项的坐标,角度值等于0;该节点从邻居表中选择所有符合条件2的邻居表项,从符合条件2的邻居表项中选择一个与簇首节点距离最远的邻居表项,发送一个创建消息,该创建消息的消息类型值为6,节点类型值为2,坐标等于该邻居表项的坐标,角度值等于90;该节点从邻居表中选择所有符合条件3的邻居表项,从符合条件3的邻居表项中选择一个与簇首节点距离最远的邻居表项,发送一个创建消息,该创建消息的消息类型值为6,节点类型值为2,坐标等于该邻居表项的坐标,角度值等于180;该节点从邻居表中选择所有符合条件4的邻居表项,从符合条件4的邻居表项中选择一个与簇首节点距离最远的邻居表项,发送一个创建消息,该创建消息的消息类型值为
6,节点类型值为2,坐标等于该邻居表项的坐标,角度值等于270;
条件1:簇首节点与该邻居表项的坐标所标识的节点的角度为0度;
条件2:簇首节点与该邻居表项的坐标所标识的节点的角度为90度;
条件3:簇首节点与该邻居表项的坐标所标识的节点的角度为180度;
条件4:簇首节点与该邻居表项的坐标所标识的节点的角度为270度;
步骤403:节点接收到创建消息后,如果消息中的节点类型值为2且坐标等于该节点的坐标,则执行步骤404,否则执行步骤406;
步骤404:接收到创建消息的节点查看邻居表,如果所有邻居表项的节点类型值均不等于3,则执行步骤408,否则执行步骤405;
步骤405:接收到创建消息的节点选择所有符合条件5的邻居表项,从符合条件5的邻居表项中选择一个邻居表项,该邻居表项的坐标与该节点的坐标距离最大,接收到创建消息的节点发送一个创建消息,该创建消息的消息类型值为6,节点类型值为1,坐标等于该邻居表项的坐标,角度值等于接收到的创建消息中的角度,执行步骤403;
条件5:该邻居表项的节点类型值等于3,该节点与该邻居表项的坐标所标识的节点的角度等于该创建消息的角度;
步骤406:节点接收到创建消息后,如果消息中的节点类型值为1且坐标等于该节点的坐标,则执行步骤407,否则执行步骤408;
步骤407:接收到创建消息的节点将自己标记为簇首节点,发送一个簇首节点消息,该簇首节点消息的消息类型值为4,坐标等于该簇首节点的坐标值;新节点接收到簇首节点消息后,将自己标记为成员节点并保存簇首节点消息中的坐标;执行步骤402;
步骤408:结束;
如果一个成员节点能够接收到两个以上的簇首节点的信标消息,则将自己标记为关联节点。
4.根据权利要求3所述的一种基于簇的网络路由通信方法,其特征在于,簇首节点和关联节点保存一个转发表,一个转发表项包含坐标、节点类型、名称和生命周期域;转发消息包含消息类型、节点类型、名称、源坐标和目的坐标;簇首节点CH1选择所有类型值为0的邻居表项,针对每个选中的邻居表项E1,簇首节点CH1定期执行下述操作:步骤501:开始;
步骤502:针对邻居表项E1中名称集合中的每个名称NA1,簇首节点CH1判断是否存在一个转发表项,该转发表项的名称等于NA1,坐标等于邻居表项E1的坐标且生命周期大于阈值TH1,如果存在,则执行步骤519,否则执行步骤503;
步骤503:簇首节点CH1判断是否存在一个转发表项,该转发表项的名称等于NA1且坐标等于邻居表项E1的坐标,如果存在,则执行步骤504,否则执行步骤505;
步骤504:簇首节点CH1选择一个转发表项,该转发表项的名称等于NA1且坐标等于邻居表项E1的坐标,将该转发表项的生命周期设置为最大值,执行步骤506;
步骤505:簇首节点CH1创建一个转发表项,该转发表项的名称等于NA1,节点类型值为
0,坐标等于邻居表项E1的坐标,生命周期设置为最大值;
步骤506:簇首节点CH1选择所有节点类型值等于1的邻居表项,针对每个选中的邻居表项E2,簇首节点CH1发送一个转发消息,该转发消息的消息类型值为7,节点类型值为2,名称为NA1,源坐标等于簇首节点CH1的坐标,目的坐标等于邻居表项E2的坐标;
步骤507:节点接收到转发消息,如果节点的坐标等于该转发消息的目的坐标,则执行步骤508,否则执行步骤519;
步骤508:接收到转发消息的节点查看转发表,如果存在一个转发表项,该转发表项的名称等于该转发消息的名称,坐标等于该转发消息的源坐标且生命周期大于阈值TH1,则执行步骤519,否则执行步骤509;
步骤509:接收到转发消息的节点查看转发表,如果存在一个转发表项,该转发表项的名称等于该转发消息的名称且坐标等于该转发消息的源坐标,则执行步骤510,否则执行步骤511;
步骤510:接收到转发消息的节点查看转发表,选择一个转发表项,该转发表项的名称等于该转发消息的名称且坐标等于该转发消息的源坐标,将该转发表项的生命周期设置为最大值,执行步骤512;
步骤511:接收到转发消息的节点创建一个转发表项,该转发表项的名称等于该转发消息的名称,坐标等于该转发消息的源坐标,节点类型值等于该转发消息的节点类型值,生命周期设置为最大值;
步骤512:接收到转发消息的节点选择所有节点类型值为2的邻居表项,针对每个选中的邻居表项E3,该节点将该转发消息的源坐标更新为自己的坐标,目的坐标更新为邻居表项E3的坐标,节点类型值设置为1,发送该转发消息;
步骤513:节点接收到转发消息,如果节点的坐标等于该转发消息的目的坐标,则执行步骤514,否则执行步骤519;
步骤514:接收到转发消息的节点查看转发表,如果存在一个转发表项,该转发表项的名称等于该转发消息的名称,坐标等于该转发消息的源坐标且生命周期大于阈值TH1,则执行步骤519,否则执行步骤515;
步骤515:接收到转发消息的节点查看转发表,如果存在一个转发表项,该转发表项的名称等于该转发消息的名称且坐标等于该转发消息的源坐标,则执行步骤516,否则执行步骤517;
步骤516:接收到转发消息的节点查看转发表,选择一个转发表项,该转发表项的名称等于该转发消息的名称且坐标等于该转发消息的源坐标,将该转发表项的生命周期设置为最大值,执行步骤518;
步骤517:接收到转发消息的节点创建一个转发表项,该转发表项的名称等于该转发消息的名称,坐标等于该转发消息的源坐标,节点类型值等于该转发消息的节点类型值,生命周期设置为最大值;
步骤518:接收到转发消息的节点选择所有节点类型值为1的邻居表项,针对每个选中的邻居表项E4,该节点将该转发消息的源坐标更新为自己的坐标,目的坐标更新为邻居表项E4的坐标,节点类型值设置为2,发送该转发消息,执行步骤507;
步骤519:结束。
5.根据权利要求4所述的一种基于簇的网络路由通信方法,其特征在于,簇首节点和关联节点保存一个汇聚表,一个汇聚表项包含名称域和坐标域;
请求消息包含消息类型、名称、源坐标和目的坐标;响应消息包含消息类型、名称、坐标和负载;数据DA1由名称NA1标识,成员节点CM2的簇首节点为CH2,通过下述过程获取数据DA1:步骤601:开始;
步骤602:成员节点CM2发送一个请求消息,该请求消息的消息类型值为8,名称为NA1,源坐标为成员节点CM2的坐标,目的坐标为簇首节点CH2的坐标;
步骤603:目的节点接收到请求消息,目的节点的坐标等于请求消息的目的坐标;如果目的节点为成员节点,则执行步骤608,否则执行步骤604;
步骤604:目的簇首节点或者关联节点接收到请求消息后查看聚合表,如果存在一个聚合表项,该聚合表项的名称等于该请求消息的名称,坐标等于该请求消息的源坐标,则执行步骤609,否则执行步骤605;
步骤605:接收到请求消息的目的簇首节点或者关联节点查看聚合表,如果存在一个聚合表项,该聚合表项的名称等于该请求消息的名称,则执行步骤606,否则执行步骤607;
步骤606:接收到请求消息的目的簇首节点或者关联节点创建一个聚合表项,该聚合表项的名称等于该请求消息的名称,坐标等于该请求消息的源坐标,执行步骤609;
步骤607:接收到请求消息的目的簇首节点或者关联节点创建一个聚合表项,该聚合表项的名称等于该请求消息的名称,坐标等于该请求消息的源坐标;目的簇首节点或者关联节点查看转发表,如果存在一个转发表项,该转发表项的名称等于该请求消息的名称且消息类型等于0,则将该请求消息的源坐标更新为该簇首节点或者关联节点的坐标,目的坐标更新为该转发表项的坐标,发送该请求消息;否则目的簇首节点或者关联节点选择一个转发表项,该转发表项的名称等于该请求消息的名称,则将该请求消息的源坐标更新为该簇首节点或者关联节点的坐标,目的坐标更新为该转发表项的坐标,发送该请求消息,执行步骤603;
步骤608:目的节点接收到请求消息后,发送一个响应消息,该响应消息的消息类型值为9,名称等于该请求消息的名称,坐标等于该请求消息的源坐标,负载为该请求消息名称定义的数据;
步骤609:目的节点接收到响应消息,如果目的节点为成员节点,则执行步骤611,否则执行步骤610;
步骤610:目的簇首节点或者关联节点接收到响应消息后,选择所有名称域值等于该响应消息名称的汇聚表项,针对每个选中的汇聚表项,目的簇首节点或者关联节点将响应消息的坐标更新为该汇聚表项的坐标,发送响应消息,删除该汇聚表项,执行步骤609;
步骤611:目的节点接收到该响应消息,保存该响应消息中的数据;
步骤612:结束。