1.一种基于云的数据获取方法,其特征在于,包括一个由移动节点构成的网络,网络中一个数据ID定义一种类型的数据,网络中能够提供同一种类型数据的移动节点构建成一个k-anycast组,该k-anycast组由定义该种类型数据的数据ID唯一标识,一个k-anycast组里的移动节点称为骨干节点;
在一个包含X个骨干节点且能提供数据C的k-anycast组中,X≥2,骨干节点Bx由唯一网络前缀Mx标识,X≥x≥1;k-anycast组由网络前缀集合G定义,如公式(1)所示;
骨干节点或者移动节点的地址包括两个部分:i比特的网络前缀和j比特的节点ID;网络前缀包括k比特的数据ID和(i-k)比特的骨干ID,节点ID包括k比特的数据ID和(j-k)比特的内部ID,i,j和k为小于64的正整数;
骨干节点Bx启动后,创建一个临时地址,该临时地址的网络前缀为i比特的随机数,节点ID为j比特的随机数;骨干节点Bx广播一个地址创建消息,消息源地址为临时地址,负载为一个随机数和数据ID c;骨干节点Bx等待一定时间,在接收到同一个k-anycast组里的其他X-1个骨干节点广播的地址创建消息后,通过下述算法判断骨干节点By1和骨干节点By2的优先级,y1≠y2:步骤101:开始;
步骤102:骨干节点Bx判断骨干节点By1的网络前缀是否等于骨干节点By2的网路前缀,如果是,则执行步骤104,否则执行步骤103;
步骤103:如果骨干节点By1的网络前缀大于骨干节点By2的网络前缀,骨干节点Bx则判断骨干节点By1的优先级大于骨干节点By2,如果骨干节点By1的网络前缀小于骨干节点By2的网络前缀,骨干节点Bx则判断骨干节点By1的优先级小于骨干节点By2,执行步骤107;
步骤104:骨干节点Bx判断骨干节点By1的节点ID是否等于骨干节点By2的节点ID,如果是,则执行步骤106,否则执行步骤105;
步骤105:如果骨干节点By1的节点ID大于骨干节点By2的节点ID,骨干节点Bx则判断骨干节点By1的优先级大于骨干节点By2,如果骨干节点By1的节点ID小于骨干节点By2的节点ID,骨干节点Bx则判断骨干节点By1的优先级小于骨干节点By2,执行步骤107;
步骤106:如果骨干节点By1广播的地址创建消息中的随机数大于骨干节点By2广播的地址创建消息中的随机数,骨干节点Bx则判断骨干节点By1的优先级大于骨干节点By2,如果骨干节点By1广播的地址创建消息中的随机数小于骨干节点By2广播的地址创建消息中的随机数,骨干节点Bx则判断骨干节点By1的优先级小于骨干节点By2;
步骤107:结束;
骨干节点Bx将同一个k-anycast组中的X个骨干节点按照优先级递增排序,如果骨干节点Bx的优先级在X骨干节点中的排序值为px,X≥px≥1,骨干节点Bx则将自己的骨干ID设置为px,同时构建一个地址,该地址的网络前缀中的数据ID为c,节点ID为零,同时根据公式(2)构建网络前缀集合G;
网络前缀为y的骨干节点根据公式(3-4)获取内部ID空间[L(y),U(y)],X≥y≥1:
2.根据权利要求1所述的一种基于云的数据获取方法,其特征在于,移动节点和骨干节点配置地址后在一跳范围内广播信标消息,没有配置地址的移动节点M收到一个信标消息后,如果该信标消息的源地址的网络前缀与骨干节点Bx的网络前缀相同,那么移动节点M根据下述过程从骨干节点Bx获取节点ID:步骤201:开始;
步骤202:移动节点M构建一个临时地址,该临时地址的网络前缀为i比特的随机数,节点ID为j比特的随机数,移动节点M发送一个地址请求消息,该消息的源地址为临时地址,目的地址为骨干节点Bx的地址;
步骤203:骨干节点Bx收到地址请求消息后,从内部ID空间中选择一个未分配的内部ID,然后向移动节点M返回一个地址响应消息,地址响应消息负载为骨干节点Bx所在k-anycast组的网络前缀集合G和分配的内部ID,同时将分配的内部ID标记为已分配状态;
步骤204:移动节点M将地址响应消息中的内部ID与骨干节点Bx的网络前缀中的数据ID c相结合构建成具有唯一性的节点ID,同时保存网络前缀集合G;移动节点M将节点ID与骨干节点Bx的网络前缀相结合构建成一个地址,并开始在一跳范围内广播信标消息,消息的源地址为新获取的地址;
步骤205:结束。
3.根据权利要求2所述的一种基于云的数据获取方法,其特征在于,由数据ID c标识的k-anycast组由X个骨干节点构成,X个骨干节点的网络前缀集合为G,X个骨干节点能够提供数据ID c定义的数据C;数据C被划分为Z个部分,每个数据部分cz由数据部分ID dz唯一标识,Z≥z≥1,如公式(4)所示;
移动节点通过数据地址获取数据,一个数据地址的长度为(i+j)比特,由四个部分构成,第一个部分为k比特的数据ID,第二部分为(i-k)比特的保留域,其值为0,第三部分为k比特的数据部分ID集合域,第四部分为(i-k)比特的保留域,其值为0;其中第一部分的数据ID表明移动节点请求数据的数据ID,第三部分的数据部分ID集合域表明该数据的部分数据;i,j和k为小于64的正整数;
移动节点M通过下述过程获取数据C:
步骤301:开始;
步骤302:移动节点M利用网络前缀集合G构建X个骨干节点的地址,并通过定位功能获取所有X个骨干节点的地理信息,然后选取g个距离最近的骨干节点,2≤g≤|G|,g≤Z,并利用这g个骨干节点的网络前缀和自己的节点ID构建g个地址,记做Sx,1≤x≤g,然后构建g个数据地址,记做Dx.在数据地址Dx中,数据ID为c,数据部分ID集合为Px,其中数据部分ID集合Px定义了数据部分Cx,如公式(5)所示,其中数据部分ID集合Px中任一个元素dx-e定义了数据部分cx-e,1≤e≤|Px|,数据部分Cx满足公式(5)~(7);
步骤303:移动节点M发送g个数据请求消息Qx,在数据请求消息Qx中,目的地址为数据地址Dx,源地址为地址Sx;
步骤304:根据地址Sx中的网络前缀,数据请求消息Qx向网络前缀与地址Sx的网络前缀相同的骨干节点Bx进行路由;
步骤305:骨干节点Bx收到数据请求消息Qx后判断自己是否能提供数据部分Cx,如果能,执行步骤307,否则执行步骤306;
步骤306:骨干节点Bx执行步骤401~414创建Cx;
步骤307:骨干节点Bx向移动节点M返回数据响应消息Rx,数据响应消息Rx中的负载为数据部分Cx,目的地址为地址Sx,源地址为数据地址Dx,步骤308:数据响应消息Rx向移动节点M进行路由,如果在路由过程中,中间节点也需要数据部分Cx,则保存数据响应消息Rx从而获取数据部分Cx;
步骤309:移动节点M在收到g个数据响应消息后,获取了数据C;
步骤310:结束;
骨干节点Bx如果不能提供数据部分Cx,则根据下述过程创建数据部分Cx,其中,参数h初始值设置为0,网络直径最大值为H:步骤401:开始;
步骤402:骨干节点Bx在h跳范围内广播一个资源请求消息,该消息的负载为参数h和以及能够创建数据部分Cx的资源列表;
步骤403:判断收到资源请求消息的节点是否能提供资源请求消息中资源列表中的资源,如果能提供,则进行步骤404,否则进行步骤405;
步骤404:收到资源请求消息的节点向骨干节点Bx发送一个资源响应消息,该消息的负载为自己能提供的资源列表;
步骤405:收到资源请求消息的节点将h递减1,判断h是否大于0,如果是,进行步骤406,否则进行步骤407;
步骤406:收到资源请求消息的节点转发资源请求消息,执行步骤403;
步骤407:骨干节点Bx判断所有返回的资源响应消息中的资源是否能构建数据部分Cx,如果能,进行步骤410,否则进行步骤408;
步骤408:骨干节点Bx判断参数h是否等于H,如果是,进行步骤414,否则执行步骤409;
步骤409:骨干节点Bx将h递增1,执行步骤402;
步骤410:骨干节点Bx向每个返回资源响应消息的节点发送一个数据创建消息,该消息的负载为创建数据部分Cx的子任务列表;
步骤411:骨干节点Bx收到数据创建消息后,执行消息中的子任务以获取数据,然后向骨干节点Bx返回一个数据创建响应消息,消息负载为执行子任务获取的数据;
步骤412:骨干节点Bx收到所有的数据创建响应消息后,构建数据部分Cx,同时向同一个k-anycast组中的其他骨干节点发送一条数据分享消息,消息负载为数据部分Cx;
步骤413:其他骨干节点收到骨干节点Bx发送的数据分享消息后,保存数据部分Cx;
步骤414:结束;
通过上述过程,与骨干节点Bx同一个k-anycast组的骨干成员在收到所有的数据分享消息后,根据公式(6)创建数据C并保存数据C。