本發(fā)明涉及一種數(shù)據(jù)通信方法,尤其涉及的是一種基于按需機(jī)制的網(wǎng)絡(luò)數(shù)據(jù)通信方法。
背景技術(shù):
:近年來(lái),很多研究工作致力于網(wǎng)絡(luò)通信方法以便使用戶能夠快速獲取網(wǎng)絡(luò)服務(wù)。隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,網(wǎng)絡(luò)通信方法會(huì)成為未來(lái)提供服務(wù)的一種模式。目前,網(wǎng)絡(luò)通信方法的實(shí)現(xiàn)模式是通過(guò)廣播來(lái)實(shí)現(xiàn),因此延遲和代價(jià)都比較大,降低了網(wǎng)絡(luò)服務(wù)性能。因此,如何降低網(wǎng)絡(luò)通信方法提供服務(wù)的延遲和代價(jià)成為近年來(lái)研究的熱點(diǎn)問(wèn)題。技術(shù)實(shí)現(xiàn)要素:發(fā)明目的:本發(fā)明所要解決的技術(shù)問(wèn)題是針對(duì)現(xiàn)有技術(shù)的不足,提供一種基于按需機(jī)制的網(wǎng)絡(luò)數(shù)據(jù)通信方法。本發(fā)明通過(guò)單播取代廣播的方式來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)通信方法,從而降低網(wǎng)絡(luò)通信方法提供服務(wù)的延遲和代價(jià),從而有效提高網(wǎng)絡(luò)服務(wù)性能。技術(shù)方案:本發(fā)明公開(kāi)了一種基于按需機(jī)制的網(wǎng)絡(luò)數(shù)據(jù)通信方法,所述網(wǎng)絡(luò)包括兩個(gè)以上的節(jié)點(diǎn)和兩個(gè)以上的數(shù)據(jù)路由器;一種類型的數(shù)據(jù)由一個(gè)數(shù)據(jù)id唯一定義;數(shù)據(jù)消費(fèi)者為有權(quán)限獲取一種類型數(shù)據(jù)的節(jié)點(diǎn),數(shù)據(jù)提供者為有權(quán)提供一種類型數(shù)據(jù)的節(jié)點(diǎn);節(jié)點(diǎn)不具有路由轉(zhuǎn)發(fā)功能,數(shù)據(jù)路由器具有路由轉(zhuǎn)發(fā)功能;數(shù)據(jù)路由器之間通過(guò)有線接口相連,數(shù)據(jù)路由器與節(jié)點(diǎn)之間通過(guò)無(wú)線接口相連;一種消息由三個(gè)部分構(gòu)成:數(shù)據(jù)id域,消息類型域以及負(fù)載;消息類型如下表所示:數(shù)據(jù)路由器維護(hù)一個(gè)轉(zhuǎn)發(fā)表和一個(gè)聚合表,一個(gè)轉(zhuǎn)發(fā)表項(xiàng)由接口域,數(shù)據(jù)id域,隊(duì)列域,距離域以及生命周期域構(gòu)成;其中,接口域值指向到達(dá)數(shù)據(jù)提供者的下一跳,數(shù)據(jù)id域值為數(shù)據(jù)消費(fèi)者請(qǐng)求的數(shù)據(jù)的數(shù)據(jù)id,距離域值是保存轉(zhuǎn)發(fā)表的數(shù)據(jù)路由器與數(shù)據(jù)提供者之間的跳數(shù),隊(duì)列域值為當(dāng)前待處理的數(shù)據(jù)請(qǐng)求消息的個(gè)數(shù);一個(gè)聚合表項(xiàng)由接口域、數(shù)據(jù)id域和生命周期域構(gòu)成,接口域值指向到達(dá)數(shù)據(jù)消費(fèi)者的下一跳,數(shù)據(jù)id域值為數(shù)據(jù)消費(fèi)者請(qǐng)求數(shù)據(jù)的數(shù)據(jù)id;在數(shù)據(jù)c1由數(shù)據(jù)id定義,數(shù)據(jù)id為cid1,數(shù)據(jù)消費(fèi)者u1通過(guò)自己的接口f與本地?cái)?shù)據(jù)路由器r1相連的條件下,數(shù)據(jù)消費(fèi)者u1通過(guò)下述過(guò)程獲取數(shù)據(jù)c1:步驟201:開(kāi)始;步驟202:數(shù)據(jù)消費(fèi)者u1隨機(jī)產(chǎn)生一個(gè)序列號(hào)并構(gòu)建一個(gè)數(shù)據(jù)請(qǐng)求消息,數(shù)據(jù)id域值為cid1,消息類型為2,負(fù)載為序列號(hào),然后從接口f發(fā)送該數(shù)據(jù)請(qǐng)求消息;步驟203:數(shù)據(jù)路由器r1從自己的接口f1接收到數(shù)據(jù)請(qǐng)求消息后,判斷聚合表中是否存在數(shù)據(jù)id域值為cid1的表項(xiàng),如果是,執(zhí)行步驟204,否則執(zhí)行步驟206;步驟204:數(shù)據(jù)路由器r1判斷聚合表中是否存在數(shù)據(jù)id域值為cid1,接口域值為f1的表項(xiàng),如果是,執(zhí)行步驟222,否則執(zhí)行步驟205;步驟205:數(shù)據(jù)路由器r1創(chuàng)建一個(gè)聚合表項(xiàng),該聚合表項(xiàng)的數(shù)據(jù)id域值為cid1,接口域值為f1,生命周期為最大生命周期值,例如1s,執(zhí)行步驟222;步驟206:數(shù)據(jù)路由器r1創(chuàng)建一個(gè)聚合表項(xiàng),該聚合表項(xiàng)的數(shù)據(jù)id域值為cid1,接口域值為f1,生命周期為最大生命周期值;數(shù)據(jù)路由器r1查看是否存在數(shù)據(jù)id域值為cid1且隊(duì)列域值小于最大預(yù)定隊(duì)列域值,例如20,且距離域值小于最大預(yù)定距離域值的轉(zhuǎn)發(fā)表項(xiàng),例如10跳,如果存在,則執(zhí)行步驟207,否則執(zhí)行步驟208;步驟207:對(duì)于每一個(gè)數(shù)據(jù)id域值為cid1且隊(duì)列域值小于最大預(yù)定隊(duì)列域值,且距離域值小于最大預(yù)定距離域值的轉(zhuǎn)發(fā)表項(xiàng),數(shù)據(jù)路由器r1根據(jù)公式(1)計(jì)算該轉(zhuǎn)發(fā)表項(xiàng)的權(quán)值p;然后數(shù)據(jù)路由器r1選擇權(quán)值最小地轉(zhuǎn)發(fā)表項(xiàng),從該轉(zhuǎn)發(fā)表項(xiàng)的接口域值轉(zhuǎn)發(fā)該數(shù)據(jù)請(qǐng)求消息,同時(shí)將該轉(zhuǎn)發(fā)表項(xiàng)的隊(duì)列域值遞增1,執(zhí)行步驟209;p=α×q+β×h;α+β=1,α>0,β>0(1)其中,α和β為調(diào)節(jié)參數(shù),q為該表項(xiàng)的隊(duì)列域值,h為該表項(xiàng)的距離域值;α取值范圍為0.1-0.9,β取值范圍為0.1-0.9,如果用戶需要快速處理數(shù)據(jù)包,那么α的權(quán)值高一些,例如0.7,如果用戶要求低丟包率,那么β的取值高一些,例如0.7;步驟208:數(shù)據(jù)路由器r1從每個(gè)與其他數(shù)據(jù)路由器相連的接口轉(zhuǎn)發(fā)數(shù)據(jù)請(qǐng)求消息;步驟209:數(shù)據(jù)路由器或者數(shù)據(jù)提供者從自己的接口f2接收到數(shù)據(jù)請(qǐng)求消息,如果是數(shù)據(jù)提供者接收到數(shù)據(jù)請(qǐng)求消息,則執(zhí)行步驟210,否則執(zhí)行步驟214;步驟210:判斷數(shù)據(jù)提供者是否能提供數(shù)據(jù)c1,如果能,則執(zhí)行步驟211,否則執(zhí)行步驟213;步驟211:判斷數(shù)據(jù)提供者是否已經(jīng)接收到具有相同序列號(hào)的數(shù)據(jù)請(qǐng)求消息,如果是,執(zhí)行步驟213,否則執(zhí)行步驟212;步驟212:數(shù)據(jù)提供者創(chuàng)建一個(gè)數(shù)據(jù)響應(yīng)消息,該數(shù)據(jù)響應(yīng)消息的數(shù)據(jù)id域值為cid1,消息類型為3,負(fù)載為數(shù)據(jù)請(qǐng)求消息中的序列號(hào)、距離參數(shù)以及數(shù)據(jù)c1,距離參數(shù)的初始值為0,然后數(shù)據(jù)提供者從自己的接口f2發(fā)送該數(shù)據(jù)響應(yīng)消息,執(zhí)行步驟222;步驟213:數(shù)據(jù)提供者丟棄接收到的數(shù)據(jù)請(qǐng)求消息,執(zhí)行步驟222;步驟214:判斷數(shù)據(jù)路由器是否已經(jīng)接收到具有相同序列號(hào)的數(shù)據(jù)請(qǐng)求消息,如果是,執(zhí)行步驟215,否則執(zhí)行步驟216;步驟215:數(shù)據(jù)路由器丟棄接收到的數(shù)據(jù)請(qǐng)求消息,執(zhí)行步驟222;步驟216:數(shù)據(jù)路由器判斷聚合表中是否存在數(shù)據(jù)id域值為cid1的表項(xiàng),如果是,執(zhí)行步驟217,否則執(zhí)行步驟219;步驟217:數(shù)據(jù)路由器判斷聚合表中是否存在數(shù)據(jù)id域值為cid1且接口域值為f2的表項(xiàng),如果是,執(zhí)行步驟222,否則執(zhí)行步驟218;步驟218:數(shù)據(jù)路由器創(chuàng)建一個(gè)聚合表項(xiàng),該聚合表項(xiàng)的數(shù)據(jù)id域值為cid1,接口域值為f2,生命周期域值為最大生命周期值,執(zhí)行步驟222;步驟219:數(shù)據(jù)路由器創(chuàng)建一個(gè)聚合表項(xiàng),該聚合表項(xiàng)的數(shù)據(jù)id域值為cid1,接口域值為f2,生命周期域值為最大生命周期值;數(shù)據(jù)路由器查看是否存在數(shù)據(jù)id域值為cid1且隊(duì)列域值小于最大預(yù)定隊(duì)列域值,且距離域值小于最大預(yù)定距離域值的轉(zhuǎn)發(fā)表項(xiàng),如果存在,則執(zhí)行步驟220,否則執(zhí)行步驟221;步驟220:對(duì)于每一個(gè)數(shù)據(jù)id域值為cid1且隊(duì)列域值小于最大預(yù)定隊(duì)列域值,且距離域值小于最大預(yù)定距離域值的轉(zhuǎn)發(fā)表項(xiàng),數(shù)據(jù)路由器根據(jù)公式(1)計(jì)算該表項(xiàng)的權(quán)值p,然后數(shù)據(jù)路由器選擇權(quán)值最小的轉(zhuǎn)發(fā)表項(xiàng),從轉(zhuǎn)發(fā)該表項(xiàng)的接口域值轉(zhuǎn)發(fā)該數(shù)據(jù)請(qǐng)求消息,同時(shí)將該表項(xiàng)的隊(duì)列域值遞增1,執(zhí)行步驟209;步驟221:數(shù)據(jù)路由器從除了接口f2以外的每個(gè)與其他數(shù)據(jù)路由器相連的接口轉(zhuǎn)發(fā)數(shù)據(jù)請(qǐng)求消息,執(zhí)行步驟209;步驟222:數(shù)據(jù)路由器判斷數(shù)據(jù)id為cid1的聚合表項(xiàng)的生命周期是否衰減為0,如果是,執(zhí)行步驟223,否則執(zhí)行步驟224;步驟223:數(shù)據(jù)路由器刪除數(shù)據(jù)id為cid1的聚合表項(xiàng),執(zhí)行步驟232;步驟224:數(shù)據(jù)路由器或者數(shù)據(jù)消費(fèi)者從自己接口f4接收到數(shù)據(jù)響應(yīng)消息,如果是數(shù)據(jù)路由器接收到數(shù)據(jù)響應(yīng)消息,則執(zhí)行步驟225,否則執(zhí)行步驟231;步驟225:數(shù)據(jù)路由器將數(shù)據(jù)響應(yīng)消息中的距離參數(shù)遞增1,然后查看轉(zhuǎn)發(fā)表中是否存在數(shù)據(jù)id為cid1且接口域值為f4的轉(zhuǎn)發(fā)表項(xiàng),如果存在,執(zhí)行步驟227,否則執(zhí)行步驟226;步驟226:數(shù)據(jù)路由器創(chuàng)建一個(gè)轉(zhuǎn)發(fā)表項(xiàng),該轉(zhuǎn)發(fā)表項(xiàng)的數(shù)據(jù)id為cid1,接口域值為f4,隊(duì)列域值為0,距離域值為數(shù)據(jù)響應(yīng)消息中的距離參數(shù)值,生命周期設(shè)置為最大生命周期值,執(zhí)行步驟229;步驟227:數(shù)據(jù)路由器將該轉(zhuǎn)發(fā)表項(xiàng)的隊(duì)列域值遞減1,然后判斷該轉(zhuǎn)發(fā)表項(xiàng)的距離域值是否大于數(shù)據(jù)響應(yīng)消息中的距離參數(shù),如果是,執(zhí)行步驟228,否則執(zhí)行步驟229;步驟228:數(shù)據(jù)路由器將該轉(zhuǎn)發(fā)表項(xiàng)的距離域值更新為數(shù)據(jù)響應(yīng)消息中的距離參數(shù);步驟229:判斷數(shù)據(jù)路由器是否已經(jīng)接收到具有相同序列號(hào)的數(shù)據(jù)響應(yīng)消息,如果是,執(zhí)行步驟232,否則執(zhí)行步驟230;步驟230:數(shù)據(jù)路由器從聚合表中選擇所有數(shù)據(jù)id域值為cid1的表項(xiàng),針對(duì)每個(gè)選擇的表項(xiàng),數(shù)據(jù)路由器從該表項(xiàng)中的接口域發(fā)送接收到的數(shù)據(jù)響應(yīng)消息,然后數(shù)據(jù)路由器刪除所有數(shù)據(jù)id域值為cid1的表項(xiàng),執(zhí)行步驟224;步驟231:數(shù)據(jù)消費(fèi)者u1獲取并保存數(shù)據(jù)響應(yīng)消息中的數(shù)據(jù)c1;步驟232:結(jié)束;通過(guò)上述過(guò)程,數(shù)據(jù)消費(fèi)者能夠快速獲取想要的數(shù)據(jù),從而有效降低了數(shù)據(jù)通信延遲。本發(fā)明所述方法中,如果數(shù)據(jù)路由器檢測(cè)到一個(gè)轉(zhuǎn)發(fā)表項(xiàng)的生命周期衰減為0,則刪除該轉(zhuǎn)發(fā)表項(xiàng);在數(shù)據(jù)路由器每隔時(shí)間t從每個(gè)接口發(fā)送信標(biāo)消息,該信標(biāo)消息的數(shù)據(jù)id為空,類型為0,負(fù)載為空的條件下,如果數(shù)據(jù)路由器在時(shí)間2t內(nèi)沒(méi)有從自己的接口x收到信標(biāo)幀,則執(zhí)行下述操作:步驟301:開(kāi)始;步驟302:數(shù)據(jù)路由器隨機(jī)產(chǎn)生一個(gè)序列號(hào),選擇接口域值為x的所有轉(zhuǎn)發(fā)表項(xiàng),將所述轉(zhuǎn)發(fā)表項(xiàng)的隊(duì)列域值設(shè)置為大于隊(duì)列最大值的正整數(shù);數(shù)據(jù)路由器構(gòu)建一個(gè)無(wú)效消息,該無(wú)效消息的數(shù)據(jù)id為空,類型為5,負(fù)載為序列號(hào)以及接口域值為x的所有轉(zhuǎn)發(fā)表項(xiàng)的數(shù)據(jù)id的集合;數(shù)據(jù)路由器從除了接口x以外的每個(gè)與其他數(shù)據(jù)路由器相連的接口轉(zhuǎn)發(fā)該無(wú)效消息;步驟303:數(shù)據(jù)路由器從自己的接口f8接收到無(wú)效消息后,如果數(shù)據(jù)路由器已經(jīng)收到具有相同序列號(hào)的無(wú)效消息,則執(zhí)行步驟304,否則執(zhí)行步驟305;步驟304:數(shù)據(jù)路由器丟棄接收到的無(wú)效消息,執(zhí)行步驟307;步驟305:數(shù)據(jù)路由器查看轉(zhuǎn)發(fā)表判斷是否存在接口域值為f8且數(shù)據(jù)id屬于無(wú)效消息中的數(shù)據(jù)id集合的轉(zhuǎn)發(fā)表項(xiàng),如果存在,執(zhí)行步驟306,否則執(zhí)行步驟307;步驟306:數(shù)據(jù)路由器將所述轉(zhuǎn)發(fā)表項(xiàng)的隊(duì)列域值設(shè)置為大于隊(duì)列最大值的正整數(shù),數(shù)據(jù)路由器從除了自己的接口f8以外的每個(gè)與數(shù)據(jù)路由器相連的接口發(fā)送接收到的無(wú)效消息,執(zhí)行步驟303;步驟307:結(jié)束;上過(guò)過(guò)程能夠快速更新轉(zhuǎn)發(fā)表從而確保數(shù)據(jù)消費(fèi)者正確快速地獲取所需數(shù)據(jù)。本發(fā)明所述方法中,如果數(shù)據(jù)路由器從自己的接口x接收到信標(biāo)幀且接口域值為x的轉(zhuǎn)發(fā)表項(xiàng)的隊(duì)列域值大于最大隊(duì)列值,那么執(zhí)行下述操作:步驟401:開(kāi)始;步驟402:數(shù)據(jù)路由器隨機(jī)產(chǎn)生一個(gè)序列號(hào),選擇接口域值為x的所有轉(zhuǎn)發(fā)表項(xiàng),將所述轉(zhuǎn)發(fā)表項(xiàng)的隊(duì)列域值設(shè)置為0;數(shù)據(jù)路由器構(gòu)建一個(gè)有效消息,該有效消息的數(shù)據(jù)id為空,類型為6,負(fù)載為序列號(hào)以及接口域值為x的所有轉(zhuǎn)發(fā)表項(xiàng)的數(shù)據(jù)id的集合;數(shù)據(jù)路由器從除了接口x以外的每個(gè)與其他數(shù)據(jù)路由器相連的接口轉(zhuǎn)發(fā)該有效消息;步驟403:數(shù)據(jù)路由器從自己的接口f9接收到有效消息后,如果數(shù)據(jù)路由器已經(jīng)收到具有相同序列號(hào)的有效消息,則執(zhí)行步驟404,否則執(zhí)行步驟405;步驟404:數(shù)據(jù)路由器丟棄接收到的有效消息,執(zhí)行步驟407;步驟405:數(shù)據(jù)路由器查看轉(zhuǎn)發(fā)表判斷是否存在接口域值為f9且數(shù)據(jù)id屬于有效消息中的數(shù)據(jù)id集合的轉(zhuǎn)發(fā)表項(xiàng),如果存在,執(zhí)行步驟406,否則執(zhí)行步驟407;步驟406:數(shù)據(jù)路由器將這些轉(zhuǎn)發(fā)表項(xiàng)的隊(duì)列域值設(shè)置為0,數(shù)據(jù)路由器從除了接口f9以外的每個(gè)與其他數(shù)據(jù)路由器相連的接口發(fā)送接收到的有效消息,執(zhí)行步驟403;步驟407:結(jié)束。上過(guò)過(guò)程能夠快速更新轉(zhuǎn)發(fā)表從而確保數(shù)據(jù)消費(fèi)者正確快速地獲取所需數(shù)據(jù)。本發(fā)明所述方法中,數(shù)據(jù)提供者每隔時(shí)間t發(fā)送信標(biāo)消息,該信標(biāo)消息的數(shù)據(jù)id為自己所能提供的數(shù)據(jù)的數(shù)據(jù)id,類型為0,負(fù)載為空;數(shù)據(jù)路由器從自己接口f5接收到數(shù)據(jù)id域值為cid1的信標(biāo)幀后,判斷是否存在接口域值為f5且數(shù)據(jù)id域值為cid1的轉(zhuǎn)發(fā)表項(xiàng),如果存在,數(shù)據(jù)路由器則執(zhí)行下述過(guò)程:步驟501:開(kāi)始;步驟502:數(shù)據(jù)路由器將接口域值為f5且數(shù)據(jù)id域值為cid1的轉(zhuǎn)發(fā)表項(xiàng)的生命周期設(shè)置為最大生命周期值;數(shù)據(jù)路由器隨機(jī)產(chǎn)生一個(gè)序列號(hào),同時(shí)構(gòu)建一個(gè)刷新消息,該刷新消息的數(shù)據(jù)id為cid1,類型為4,負(fù)載為序列號(hào);數(shù)據(jù)路由器從每個(gè)與其他數(shù)據(jù)路由器相連的接口發(fā)送該刷新消息;步驟503:數(shù)據(jù)路由器從接口f10接收到有效消息后,如果數(shù)據(jù)路由器已經(jīng)收到具有相同序列號(hào)的刷新消息,則執(zhí)行步驟504,否則執(zhí)行步驟505;步驟504:數(shù)據(jù)路由器丟棄接收到的刷新消息,執(zhí)行步驟507;步驟505:數(shù)據(jù)路由器查看轉(zhuǎn)發(fā)表判斷是否存在接口域值為f10且數(shù)據(jù)id為cid1的轉(zhuǎn)發(fā)表項(xiàng),如果存在,執(zhí)行步驟506,否則執(zhí)行步驟507;步驟506:數(shù)據(jù)路由器將該轉(zhuǎn)發(fā)表項(xiàng)的生命周期設(shè)置為最大生命周期,數(shù)據(jù)路由器從除了接口f10以外的每個(gè)與其他數(shù)據(jù)路由器相連的接口發(fā)送接收到的刷新消息,執(zhí)行步驟503;步驟507:結(jié)束。上過(guò)過(guò)程能夠快速更新轉(zhuǎn)發(fā)表從而確保數(shù)據(jù)消費(fèi)者正確快速地獲取所需數(shù)據(jù)。本發(fā)明所述方法中,數(shù)據(jù)路由器從接口f5接收到數(shù)據(jù)id域值為cid1的信標(biāo)幀后,判斷是否存在接口域值為f5且數(shù)據(jù)id域值為cid1的轉(zhuǎn)發(fā)表項(xiàng),如果不存在,數(shù)據(jù)路由器則執(zhí)行下述過(guò)程:步驟601:開(kāi)始;步驟602:數(shù)據(jù)路由器創(chuàng)建一個(gè)轉(zhuǎn)發(fā)表項(xiàng),該轉(zhuǎn)發(fā)表項(xiàng)的數(shù)據(jù)id域值為cid1,接口域值為f5,隊(duì)列域值為0,距離域值為1,生命周期為最大生命周期值;數(shù)據(jù)路由器隨機(jī)產(chǎn)生一個(gè)序列號(hào),同時(shí)構(gòu)建數(shù)據(jù)發(fā)布消息,該數(shù)據(jù)發(fā)布消息的數(shù)據(jù)id域值為cid1,消息類型為1,負(fù)載為序列號(hào)和距離參數(shù),距離參數(shù)的初始值為1;數(shù)據(jù)路由器從每個(gè)與數(shù)據(jù)路由器相連的接口發(fā)送該數(shù)據(jù)發(fā)布消息;步驟603:數(shù)據(jù)路由器從自己的接口j接收到數(shù)據(jù)發(fā)布消息,如果數(shù)據(jù)路由器已經(jīng)收到具有相同序列號(hào)的數(shù)據(jù)發(fā)布消息,則執(zhí)行步驟604,否則執(zhí)行步驟605;步驟604:數(shù)據(jù)路由器丟棄接收到的數(shù)據(jù)發(fā)布消息消息,執(zhí)行步驟613;步驟605:數(shù)據(jù)路由器查看轉(zhuǎn)發(fā)表判斷是否存在數(shù)據(jù)id域值為cid1且接口域值為j的表項(xiàng),如果存在,執(zhí)行步驟608,否則執(zhí)行步驟606;步驟606:數(shù)據(jù)路由器將數(shù)據(jù)發(fā)布消息中的距離域值遞增1,創(chuàng)建一個(gè)轉(zhuǎn)發(fā)表項(xiàng),該轉(zhuǎn)發(fā)表項(xiàng)的數(shù)據(jù)id域值為cid1,接口域值為j,隊(duì)列域值為0,距離域值為數(shù)據(jù)發(fā)布消息中的距離域值,生命周期為最大生命周期值,例如1s;如果數(shù)據(jù)路由器除了接口j以外所有接口都不與其他數(shù)據(jù)路由器相連,那么執(zhí)行步驟613,否則執(zhí)行步驟607;步驟607:數(shù)據(jù)路由器從除了接口j以外的每個(gè)與其他數(shù)據(jù)路由器相連的接口轉(zhuǎn)發(fā)接收到的數(shù)據(jù)發(fā)布消息,執(zhí)行步驟603;步驟608:數(shù)據(jù)路由器查看轉(zhuǎn)發(fā)表判斷是否存在數(shù)據(jù)id域值為cid1,接口域值為j且距離值大于數(shù)據(jù)發(fā)布消息中的距離值的表項(xiàng),如果存在,執(zhí)行步驟609,否則執(zhí)行步驟611;步驟609:數(shù)據(jù)路由器將數(shù)據(jù)發(fā)布消息中的距離域值遞增1,更新數(shù)據(jù)id域值為cid1,接口域值為j且距離值大于數(shù)據(jù)發(fā)布消息中的距離值的轉(zhuǎn)發(fā)表項(xiàng),即用數(shù)據(jù)發(fā)布消息中的距離值更新該轉(zhuǎn)發(fā)表項(xiàng)中的距離值,同時(shí)將該轉(zhuǎn)發(fā)表項(xiàng)的生命周期設(shè)置為最大值,如果數(shù)據(jù)路由器除了接口j以外所有接口都不與其他數(shù)據(jù)路由器相連,則執(zhí)行步驟613,否則執(zhí)行步驟610;步驟610:數(shù)據(jù)路由器從除了接口j以外的每個(gè)與其他數(shù)據(jù)路由器相連的接口轉(zhuǎn)發(fā)接收到的數(shù)據(jù)發(fā)布消息,執(zhí)行步驟603;步驟611:數(shù)據(jù)路由器將數(shù)據(jù)發(fā)布消息中的距離域值遞增1,更新數(shù)據(jù)id域值為cid1,接口域值為j且距離值大于數(shù)據(jù)發(fā)布消息中的距離值的轉(zhuǎn)發(fā)表項(xiàng),即將該轉(zhuǎn)發(fā)表項(xiàng)的生命周期設(shè)置為最大值,如果數(shù)據(jù)路由器除了接口j以外所有接口都不與其他數(shù)據(jù)路由器相連,則執(zhí)行步驟613,否則執(zhí)行步驟612;步驟612:數(shù)據(jù)路由器從除了接口j以外的每個(gè)與其他數(shù)據(jù)路由器相連的接口轉(zhuǎn)發(fā)接收到的數(shù)據(jù)發(fā)布消息,執(zhí)行步驟603;步驟613:結(jié)束。上過(guò)過(guò)程能夠快速更新轉(zhuǎn)發(fā)表從而確保數(shù)據(jù)消費(fèi)者正確快速地獲取所需數(shù)據(jù)。本發(fā)明所述方法中,數(shù)據(jù)路由器存在一個(gè)數(shù)據(jù)id為cid1且接口為無(wú)線接口w的轉(zhuǎn)發(fā)表項(xiàng),如果數(shù)據(jù)路由器在時(shí)間2t范圍內(nèi)沒(méi)有接收到數(shù)據(jù)id為cid1的信標(biāo)消息,則執(zhí)行下述操作:步驟701:開(kāi)始;步驟702:數(shù)據(jù)路由器隨機(jī)產(chǎn)生一個(gè)序列號(hào),構(gòu)建一個(gè)切換消息,該切換消息的數(shù)據(jù)id為cid1,類型為7,負(fù)載為序列號(hào);數(shù)據(jù)路由器從每個(gè)與其他數(shù)據(jù)路由器相連的接口轉(zhuǎn)發(fā)該切換消息,同時(shí)刪除數(shù)據(jù)id為cid1且接口為無(wú)線接口w的轉(zhuǎn)發(fā)表項(xiàng);步驟703:數(shù)據(jù)路由器從接口f7接收到切換消息后,如果數(shù)據(jù)路由器已經(jīng)收到具有相同序列號(hào)的切換消息,則執(zhí)行步驟704,否則執(zhí)行步驟705;步驟704:數(shù)據(jù)路由器丟棄接收到的切換消息,執(zhí)行步驟708;步驟705:數(shù)據(jù)路由器查看轉(zhuǎn)發(fā)表判斷是否存在接口域值為f7且數(shù)據(jù)id為cid1的轉(zhuǎn)發(fā)表項(xiàng),如果存在,執(zhí)行步驟706,否則執(zhí)行步驟708;步驟706:數(shù)據(jù)路由器刪除接口域值為f7且數(shù)據(jù)id等于cid1的轉(zhuǎn)發(fā)表項(xiàng),數(shù)據(jù)路由器判斷是否存在數(shù)據(jù)id等于cid1的轉(zhuǎn)發(fā)表項(xiàng),如果是,執(zhí)行步驟708,否則執(zhí)行步驟707;步驟707:數(shù)據(jù)路由器從除了接口f7以外的每個(gè)與其他數(shù)據(jù)路由器相連的接口轉(zhuǎn)發(fā)接收到的切換消息,執(zhí)行步驟703;步驟708:結(jié)束。上過(guò)過(guò)程能夠快速更新轉(zhuǎn)發(fā)表從而確保數(shù)據(jù)消費(fèi)者正確快速地獲取所需數(shù)據(jù)。有益效果:本發(fā)明提供了一種基于按需機(jī)制的網(wǎng)絡(luò)數(shù)據(jù)通信方法,數(shù)據(jù)消費(fèi)者通過(guò)本發(fā)明所提供的網(wǎng)絡(luò)數(shù)據(jù)通信方法能夠從距離最近的數(shù)據(jù)提供者以單播方式快速獲取服務(wù)數(shù)據(jù),縮短了獲取服務(wù)數(shù)據(jù)的延遲和代價(jià),提高了服務(wù)質(zhì)量,本發(fā)明可應(yīng)用于道路路況監(jiān)測(cè)、數(shù)據(jù)獲取等領(lǐng)域,具有廣泛的應(yīng)用前景。附圖說(shuō)明下面結(jié)合附圖和具體實(shí)施方式對(duì)本發(fā)明做更進(jìn)一步的具體說(shuō)明,本發(fā)明的上述和/或其他方面的優(yōu)點(diǎn)將會(huì)變得更加清楚。圖1為本發(fā)明所述的數(shù)據(jù)獲取流程示意圖。圖2為本發(fā)明所述的接口無(wú)效處理流程示意圖。圖3為本發(fā)明所述的接口有效處理流程示意圖。圖4為本發(fā)明所述的更新轉(zhuǎn)發(fā)表流程示意圖。圖5為本發(fā)明所述的創(chuàng)建轉(zhuǎn)發(fā)表項(xiàng)流程示意圖。圖6為本發(fā)明所述的切換流程示意圖。具體實(shí)施方式:本發(fā)明提供了一種基于按需機(jī)制的網(wǎng)絡(luò)數(shù)據(jù)通信方法,數(shù)據(jù)消費(fèi)者通過(guò)本發(fā)明所提供的網(wǎng)絡(luò)數(shù)據(jù)通信方法能夠從距離最近的數(shù)據(jù)提供者以單播方式快速獲取服務(wù)數(shù)據(jù),縮短了獲取服務(wù)數(shù)據(jù)的延遲和代價(jià),提高了服務(wù)質(zhì)量,本發(fā)明可應(yīng)用于道路路況監(jiān)測(cè)、數(shù)據(jù)獲取等領(lǐng)域,具有廣泛的應(yīng)用前景。圖1為本發(fā)明所述的數(shù)據(jù)獲取流程示意圖。所述網(wǎng)絡(luò)包括兩個(gè)以上的節(jié)點(diǎn)和兩個(gè)以上的數(shù)據(jù)路由器;一種類型的數(shù)據(jù)由一個(gè)數(shù)據(jù)id唯一定義;數(shù)據(jù)消費(fèi)者為有權(quán)限獲取一種類型數(shù)據(jù)的節(jié)點(diǎn),數(shù)據(jù)提供者為有權(quán)提供一種類型數(shù)據(jù)的節(jié)點(diǎn);節(jié)點(diǎn)不具有路由轉(zhuǎn)發(fā)功能,數(shù)據(jù)路由器具有路由轉(zhuǎn)發(fā)功能;數(shù)據(jù)路由器之間通過(guò)有線接口相連,數(shù)據(jù)路由器與節(jié)點(diǎn)之間通過(guò)無(wú)線接口相連;一種消息由三個(gè)部分構(gòu)成:數(shù)據(jù)id域,消息類型域以及負(fù)載;消息類型如下表所示:消息類型消息類型域值信標(biāo)消息0數(shù)據(jù)發(fā)布消息1數(shù)據(jù)請(qǐng)求消息2數(shù)據(jù)響應(yīng)消息3刷新消息4無(wú)效消息5有效消息6切換消息7數(shù)據(jù)路由器維護(hù)一個(gè)轉(zhuǎn)發(fā)表和一個(gè)聚合表,一個(gè)轉(zhuǎn)發(fā)表項(xiàng)由接口域,數(shù)據(jù)id域,隊(duì)列域,距離域以及生命周期域構(gòu)成;其中,接口域值指向到達(dá)數(shù)據(jù)提供者的下一跳,數(shù)據(jù)id域值為數(shù)據(jù)消費(fèi)者請(qǐng)求的數(shù)據(jù)的數(shù)據(jù)id,距離域值是保存轉(zhuǎn)發(fā)表的數(shù)據(jù)路由器與數(shù)據(jù)提供者之間的跳數(shù),隊(duì)列域值為當(dāng)前待處理的數(shù)據(jù)請(qǐng)求消息的個(gè)數(shù);一個(gè)聚合表項(xiàng)由接口域、數(shù)據(jù)id域和生命周期域構(gòu)成,接口域值指向到達(dá)數(shù)據(jù)消費(fèi)者的下一跳,數(shù)據(jù)id域值為數(shù)據(jù)消費(fèi)者請(qǐng)求的數(shù)據(jù)的數(shù)據(jù)id;在數(shù)據(jù)c1由數(shù)據(jù)id定義,數(shù)據(jù)id為cid1,數(shù)據(jù)消費(fèi)者u1通過(guò)自己的接口f與本地?cái)?shù)據(jù)路由器r1相連的條件下,數(shù)據(jù)消費(fèi)者u1通過(guò)下述過(guò)程獲取數(shù)據(jù)c1:步驟201:開(kāi)始;步驟202:數(shù)據(jù)消費(fèi)者u1隨機(jī)產(chǎn)生一個(gè)序列號(hào)并構(gòu)建一個(gè)數(shù)據(jù)請(qǐng)求消息,數(shù)據(jù)id域值為cid1,消息類型為2,負(fù)載為序列號(hào),然后從接口f發(fā)送該數(shù)據(jù)請(qǐng)求消息;步驟203:數(shù)據(jù)路由器r1從自己的接口f1接收到數(shù)據(jù)請(qǐng)求消息后,判斷聚合表中是否存在數(shù)據(jù)id域值為cid1的表項(xiàng),如果是,執(zhí)行步驟204,否則執(zhí)行步驟206;步驟204:數(shù)據(jù)路由器r1判斷聚合表中是否存在數(shù)據(jù)id域值為cid1,接口域值為f1的表項(xiàng),如果是,執(zhí)行步驟222,否則執(zhí)行步驟205;步驟205:數(shù)據(jù)路由器r1創(chuàng)建一個(gè)聚合表項(xiàng),該聚合表項(xiàng)的數(shù)據(jù)id域值為cid1,接口域值為f1,生命周期為最大生命周期值,例如1s,執(zhí)行步驟222;步驟206:數(shù)據(jù)路由器r1創(chuàng)建一個(gè)聚合表項(xiàng),該聚合表項(xiàng)的數(shù)據(jù)id域值為cid1,接口域值為f1,生命周期為最大生命周期值;數(shù)據(jù)路由器r1查看是否存在數(shù)據(jù)id域值為cid1且隊(duì)列域值小于最大預(yù)定隊(duì)列域值,例如20,且距離域值小于最大預(yù)定距離域值的轉(zhuǎn)發(fā)表項(xiàng),例如10跳,如果存在,則執(zhí)行步驟207,否則執(zhí)行步驟208;步驟207:對(duì)于每一個(gè)數(shù)據(jù)id域值為cid1且隊(duì)列域值小于最大預(yù)定隊(duì)列域值,且距離域值小于最大預(yù)定距離域值的轉(zhuǎn)發(fā)表項(xiàng),數(shù)據(jù)路由器r1根據(jù)公式(1)計(jì)算該轉(zhuǎn)發(fā)表項(xiàng)的權(quán)值p;然后數(shù)據(jù)路由器r1選擇權(quán)值最小地轉(zhuǎn)發(fā)表項(xiàng),從該轉(zhuǎn)發(fā)表項(xiàng)的接口域值轉(zhuǎn)發(fā)該數(shù)據(jù)請(qǐng)求消息,同時(shí)將該轉(zhuǎn)發(fā)表項(xiàng)的隊(duì)列域值遞增1,執(zhí)行步驟209;p=α×q+β×h;α+β=1,α>0,β>0(1)其中,α和β為調(diào)節(jié)參數(shù),q為該表項(xiàng)的隊(duì)列域值,h為該表項(xiàng)的距離域值;α取值范圍為0.1-0.9,β取值范圍為0.1-0.9,如果用戶需要快速處理數(shù)據(jù)包,那么α的權(quán)值高一些,例如0.7,如果用戶要求低丟包率,那么β的取值高一些,例如0.7;步驟208:數(shù)據(jù)路由器r1從每個(gè)與其他數(shù)據(jù)路由器相連的接口轉(zhuǎn)發(fā)數(shù)據(jù)請(qǐng)求消息;步驟209:數(shù)據(jù)路由器或者數(shù)據(jù)提供者從自己的接口f2接收到數(shù)據(jù)請(qǐng)求消息,如果是數(shù)據(jù)提供者接收到數(shù)據(jù)請(qǐng)求消息,則執(zhí)行步驟210,否則執(zhí)行步驟214;步驟210:判斷數(shù)據(jù)提供者是否能提供數(shù)據(jù)c1,如果能,則執(zhí)行步驟211,否則執(zhí)行步驟213;步驟211:判斷數(shù)據(jù)提供者是否已經(jīng)接收到具有相同序列號(hào)的數(shù)據(jù)請(qǐng)求消息,如果是,執(zhí)行步驟213,否則執(zhí)行步驟212;步驟212:數(shù)據(jù)提供者創(chuàng)建一個(gè)數(shù)據(jù)響應(yīng)消息,該數(shù)據(jù)響應(yīng)消息的數(shù)據(jù)id域值為cid1,消息類型為3,負(fù)載為數(shù)據(jù)請(qǐng)求消息中的序列號(hào)、距離參數(shù)以及數(shù)據(jù)c1,距離參數(shù)的初始值為0,然后數(shù)據(jù)提供者從自己的接口f2發(fā)送該數(shù)據(jù)響應(yīng)消息,執(zhí)行步驟222;步驟213:數(shù)據(jù)提供者丟棄接收到的數(shù)據(jù)請(qǐng)求消息,執(zhí)行步驟222;步驟214:判斷數(shù)據(jù)路由器是否已經(jīng)接收到具有相同序列號(hào)的數(shù)據(jù)請(qǐng)求消息,如果是,執(zhí)行步驟215,否則執(zhí)行步驟216;步驟215:數(shù)據(jù)路由器丟棄接收到的數(shù)據(jù)請(qǐng)求消息,執(zhí)行步驟222;步驟216:數(shù)據(jù)路由器判斷聚合表中是否存在數(shù)據(jù)id域值為cid1的表項(xiàng),如果是,執(zhí)行步驟217,否則執(zhí)行步驟219;步驟217:數(shù)據(jù)路由器判斷聚合表中是否存在數(shù)據(jù)id域值為cid1且接口域值為f2的表項(xiàng),如果是,執(zhí)行步驟222,否則執(zhí)行步驟218;步驟218:數(shù)據(jù)路由器創(chuàng)建一個(gè)聚合表項(xiàng),該聚合表項(xiàng)的數(shù)據(jù)id域值為cid1,接口域值為f2,生命周期域值為最大生命周期值,執(zhí)行步驟222;步驟219:數(shù)據(jù)路由器創(chuàng)建一個(gè)聚合表項(xiàng),該聚合表項(xiàng)的數(shù)據(jù)id域值為cid1,接口域值為f2,生命周期域值為最大生命周期值;數(shù)據(jù)路由器查看是否存在數(shù)據(jù)id域值為cid1且隊(duì)列域值小于最大預(yù)定隊(duì)列域值,且距離域值小于最大預(yù)定距離域值的轉(zhuǎn)發(fā)表項(xiàng),如果存在,則執(zhí)行步驟220,否則執(zhí)行步驟221;步驟220:對(duì)于每一個(gè)數(shù)據(jù)id域值為cid1且隊(duì)列域值小于最大預(yù)定隊(duì)列域值,且距離域值小于最大預(yù)定距離域值的轉(zhuǎn)發(fā)表項(xiàng),數(shù)據(jù)路由器根據(jù)公式(1)計(jì)算該表項(xiàng)的權(quán)值p,然后數(shù)據(jù)路由器選擇權(quán)值最小的轉(zhuǎn)發(fā)表項(xiàng),從轉(zhuǎn)發(fā)該表項(xiàng)的接口域值轉(zhuǎn)發(fā)該數(shù)據(jù)請(qǐng)求消息,同時(shí)將該表項(xiàng)的隊(duì)列域值遞增1,執(zhí)行步驟209;步驟221:數(shù)據(jù)路由器從除了接口f2以外的每個(gè)與其他數(shù)據(jù)路由器相連的接口轉(zhuǎn)發(fā)數(shù)據(jù)請(qǐng)求消息,執(zhí)行步驟209;步驟222:數(shù)據(jù)路由器判斷數(shù)據(jù)id為cid1的聚合表項(xiàng)的生命周期是否衰減為0,如果是,執(zhí)行步驟223,否則執(zhí)行步驟224;步驟223:數(shù)據(jù)路由器刪除數(shù)據(jù)id為cid1的聚合表項(xiàng),執(zhí)行步驟232;步驟224:數(shù)據(jù)路由器或者數(shù)據(jù)消費(fèi)者從自己接口f4接收到數(shù)據(jù)響應(yīng)消息,如果是數(shù)據(jù)路由器接收到數(shù)據(jù)響應(yīng)消息,則執(zhí)行步驟225,否則執(zhí)行步驟231;步驟225:數(shù)據(jù)路由器將數(shù)據(jù)響應(yīng)消息中的距離參數(shù)遞增1,然后查看轉(zhuǎn)發(fā)表中是否存在數(shù)據(jù)id為cid1且接口域值為f4的轉(zhuǎn)發(fā)表項(xiàng),如果存在,執(zhí)行步驟227,否則執(zhí)行步驟226;步驟226:數(shù)據(jù)路由器創(chuàng)建一個(gè)轉(zhuǎn)發(fā)表項(xiàng),該轉(zhuǎn)發(fā)表項(xiàng)的數(shù)據(jù)id為cid1,接口域值為f4,隊(duì)列域值為0,距離域值為數(shù)據(jù)響應(yīng)消息中的距離參數(shù)值,生命周期設(shè)置為最大生命周期值,執(zhí)行步驟229;步驟227:數(shù)據(jù)路由器將該轉(zhuǎn)發(fā)表項(xiàng)的隊(duì)列域值遞減1,然后判斷該轉(zhuǎn)發(fā)表項(xiàng)的距離域值是否大于數(shù)據(jù)響應(yīng)消息中的距離參數(shù),如果是,執(zhí)行步驟228,否則執(zhí)行步驟229;步驟228:數(shù)據(jù)路由器將該轉(zhuǎn)發(fā)表項(xiàng)的距離域值更新為數(shù)據(jù)響應(yīng)消息中的距離參數(shù);步驟229:判斷數(shù)據(jù)路由器是否已經(jīng)接收到具有相同序列號(hào)的數(shù)據(jù)響應(yīng)消息,如果是,執(zhí)行步驟232,否則執(zhí)行步驟230;步驟230:數(shù)據(jù)路由器從聚合表中選擇所有數(shù)據(jù)id域值為cid1的表項(xiàng),針對(duì)每個(gè)選擇的表項(xiàng),數(shù)據(jù)路由器從該表項(xiàng)中的接口域發(fā)送接收到的數(shù)據(jù)響應(yīng)消息,然后數(shù)據(jù)路由器刪除所有數(shù)據(jù)id域值為cid1的表項(xiàng),執(zhí)行步驟224;步驟231:數(shù)據(jù)消費(fèi)者u1獲取并保存數(shù)據(jù)響應(yīng)消息中的數(shù)據(jù)c1;步驟232:結(jié)束;通過(guò)上述過(guò)程,數(shù)據(jù)消費(fèi)者能夠快速獲取想要的數(shù)據(jù),從而有效降低了數(shù)據(jù)通信延遲。圖2為本發(fā)明所述的接口無(wú)效處理流程示意圖。如果數(shù)據(jù)路由器檢測(cè)到一個(gè)轉(zhuǎn)發(fā)表項(xiàng)的生命周期衰減為0,則刪除該轉(zhuǎn)發(fā)表項(xiàng);在數(shù)據(jù)路由器每隔時(shí)間t從每個(gè)接口發(fā)送信標(biāo)消息,該信標(biāo)消息的數(shù)據(jù)id為空,類型為0,負(fù)載為空的條件下,如果數(shù)據(jù)路由器在時(shí)間2t內(nèi)沒(méi)有從自己的接口x收到信標(biāo)幀,則執(zhí)行下述操作:步驟301:開(kāi)始;步驟302:數(shù)據(jù)路由器隨機(jī)產(chǎn)生一個(gè)序列號(hào),選擇接口域值為x的所有轉(zhuǎn)發(fā)表項(xiàng),將所述轉(zhuǎn)發(fā)表項(xiàng)的隊(duì)列域值設(shè)置為大于隊(duì)列最大值的正整數(shù);數(shù)據(jù)路由器構(gòu)建一個(gè)無(wú)效消息,該無(wú)效消息的數(shù)據(jù)id為空,類型為5,負(fù)載為序列號(hào)以及接口域值為x的所有轉(zhuǎn)發(fā)表項(xiàng)的數(shù)據(jù)id的集合;數(shù)據(jù)路由器從除了接口x以外的每個(gè)與其他數(shù)據(jù)路由器相連的接口轉(zhuǎn)發(fā)該無(wú)效消息;步驟303:數(shù)據(jù)路由器從自己的接口f8接收到無(wú)效消息后,如果數(shù)據(jù)路由器已經(jīng)收到具有相同序列號(hào)的無(wú)效消息,則執(zhí)行步驟304,否則執(zhí)行步驟305;步驟304:數(shù)據(jù)路由器丟棄接收到的無(wú)效消息,執(zhí)行步驟307;步驟305:數(shù)據(jù)路由器查看轉(zhuǎn)發(fā)表判斷是否存在接口域值為f8且數(shù)據(jù)id屬于無(wú)效消息中的數(shù)據(jù)id集合的轉(zhuǎn)發(fā)表項(xiàng),如果存在,執(zhí)行步驟306,否則執(zhí)行步驟307;步驟306:數(shù)據(jù)路由器將所述轉(zhuǎn)發(fā)表項(xiàng)的隊(duì)列域值設(shè)置為大于隊(duì)列最大值的正整數(shù),數(shù)據(jù)路由器從除了自己的接口f8以外的每個(gè)與數(shù)據(jù)路由器相連的接口發(fā)送接收到的無(wú)效消息,執(zhí)行步驟303;步驟307:結(jié)束;上過(guò)過(guò)程能夠快速更新轉(zhuǎn)發(fā)表從而確保數(shù)據(jù)消費(fèi)者正確快速地獲取所需數(shù)據(jù)。圖3為本發(fā)明所述的接口有效處理流程示意圖。如果數(shù)據(jù)路由器從自己的接口x接收到信標(biāo)幀且接口域值為x的轉(zhuǎn)發(fā)表項(xiàng)的隊(duì)列域值大于最大隊(duì)列值,那么執(zhí)行下述操作:步驟401:開(kāi)始;步驟402:數(shù)據(jù)路由器隨機(jī)產(chǎn)生一個(gè)序列號(hào),選擇接口域值為x的所有轉(zhuǎn)發(fā)表項(xiàng),將所述轉(zhuǎn)發(fā)表項(xiàng)的隊(duì)列域值設(shè)置為0;數(shù)據(jù)路由器構(gòu)建一個(gè)有效消息,該有效消息的數(shù)據(jù)id為空,類型為6,負(fù)載為序列號(hào)以及接口域值為x的所有轉(zhuǎn)發(fā)表項(xiàng)的數(shù)據(jù)id的集合;數(shù)據(jù)路由器從除了接口x以外的每個(gè)與其他數(shù)據(jù)路由器相連的接口轉(zhuǎn)發(fā)該有效消息;步驟403:數(shù)據(jù)路由器從自己的接口f9接收到有效消息后,如果數(shù)據(jù)路由器已經(jīng)收到具有相同序列號(hào)的有效消息,則執(zhí)行步驟404,否則執(zhí)行步驟405;步驟404:數(shù)據(jù)路由器丟棄接收到的有效消息,執(zhí)行步驟407;步驟405:數(shù)據(jù)路由器查看轉(zhuǎn)發(fā)表判斷是否存在接口域值為f9且數(shù)據(jù)id屬于有效消息中的數(shù)據(jù)id集合的轉(zhuǎn)發(fā)表項(xiàng),如果存在,執(zhí)行步驟406,否則執(zhí)行步驟407;步驟406:數(shù)據(jù)路由器將這些轉(zhuǎn)發(fā)表項(xiàng)的隊(duì)列域值設(shè)置為0,數(shù)據(jù)路由器從除了接口f9以外的每個(gè)與其他數(shù)據(jù)路由器相連的接口發(fā)送接收到的有效消息,執(zhí)行步驟403;步驟407:結(jié)束。上過(guò)過(guò)程能夠快速更新轉(zhuǎn)發(fā)表從而確保數(shù)據(jù)消費(fèi)者正確快速地獲取所需數(shù)據(jù)。圖4為本發(fā)明所述的更新轉(zhuǎn)發(fā)表流程示意圖。數(shù)據(jù)提供者每隔時(shí)間t發(fā)送信標(biāo)消息,該信標(biāo)消息的數(shù)據(jù)id為自己所能提供的數(shù)據(jù)的數(shù)據(jù)id,類型為0,負(fù)載為空;數(shù)據(jù)路由器從自己接口f5接收到數(shù)據(jù)id域值為cid1的信標(biāo)幀后,判斷是否存在接口域值為f5且數(shù)據(jù)id域值為cid1的轉(zhuǎn)發(fā)表項(xiàng),如果存在,數(shù)據(jù)路由器則執(zhí)行下述過(guò)程:步驟501:開(kāi)始;步驟502:數(shù)據(jù)路由器將接口域值為f5且數(shù)據(jù)id域值為cid1的轉(zhuǎn)發(fā)表項(xiàng)的生命周期設(shè)置為最大生命周期值;數(shù)據(jù)路由器隨機(jī)產(chǎn)生一個(gè)序列號(hào),同時(shí)構(gòu)建一個(gè)刷新消息,該刷新消息的數(shù)據(jù)id為cid1,類型為4,負(fù)載為序列號(hào);數(shù)據(jù)路由器從每個(gè)與其他數(shù)據(jù)路由器相連的接口發(fā)送該刷新消息;步驟503:數(shù)據(jù)路由器從接口f10接收到有效消息后,如果數(shù)據(jù)路由器已經(jīng)收到具有相同序列號(hào)的刷新消息,則執(zhí)行步驟504,否則執(zhí)行步驟505;步驟504:數(shù)據(jù)路由器丟棄接收到的刷新消息,執(zhí)行步驟507;步驟505:數(shù)據(jù)路由器查看轉(zhuǎn)發(fā)表判斷是否存在接口域值為f10且數(shù)據(jù)id為cid1的轉(zhuǎn)發(fā)表項(xiàng),如果存在,執(zhí)行步驟506,否則執(zhí)行步驟507;步驟506:數(shù)據(jù)路由器將該轉(zhuǎn)發(fā)表項(xiàng)的生命周期設(shè)置為最大生命周期,數(shù)據(jù)路由器從除了接口f10以外的每個(gè)與其他數(shù)據(jù)路由器相連的接口發(fā)送接收到的刷新消息,執(zhí)行步驟503;步驟507:結(jié)束。上過(guò)過(guò)程能夠快速更新轉(zhuǎn)發(fā)表從而確保數(shù)據(jù)消費(fèi)者正確快速地獲取所需數(shù)據(jù)。圖5為本發(fā)明所述的創(chuàng)建轉(zhuǎn)發(fā)表項(xiàng)流程示意圖。數(shù)據(jù)路由器從接口f5接收到數(shù)據(jù)id域值為cid1的信標(biāo)幀后,判斷是否存在接口域值為f5且數(shù)據(jù)id域值為cid1的轉(zhuǎn)發(fā)表項(xiàng),如果不存在,數(shù)據(jù)路由器則執(zhí)行下述過(guò)程:步驟601:開(kāi)始;步驟602:數(shù)據(jù)路由器創(chuàng)建一個(gè)轉(zhuǎn)發(fā)表項(xiàng),該轉(zhuǎn)發(fā)表項(xiàng)的數(shù)據(jù)id域值為cid1,接口域值為f5,隊(duì)列域值為0,距離域值為1,生命周期為最大生命周期值;數(shù)據(jù)路由器隨機(jī)產(chǎn)生一個(gè)序列號(hào),同時(shí)構(gòu)建數(shù)據(jù)發(fā)布消息,該數(shù)據(jù)發(fā)布消息的數(shù)據(jù)id域值為cid1,消息類型為1,負(fù)載為序列號(hào)和距離參數(shù),距離參數(shù)的初始值為1;數(shù)據(jù)路由器從每個(gè)與數(shù)據(jù)路由器相連的接口發(fā)送該數(shù)據(jù)發(fā)布消息;步驟603:數(shù)據(jù)路由器從自己的接口j接收到數(shù)據(jù)發(fā)布消息,如果數(shù)據(jù)路由器已經(jīng)收到具有相同序列號(hào)的數(shù)據(jù)發(fā)布消息,則執(zhí)行步驟604,否則執(zhí)行步驟605;步驟604:數(shù)據(jù)路由器丟棄接收到的刷新消息,執(zhí)行步驟613;步驟605:數(shù)據(jù)路由器查看轉(zhuǎn)發(fā)表判斷是否存在數(shù)據(jù)id域值為cid1且接口域值為j的表項(xiàng),如果存在,執(zhí)行步驟608,否則執(zhí)行步驟606;步驟606:數(shù)據(jù)路由器將數(shù)據(jù)發(fā)布消息中的距離域值遞增1,創(chuàng)建一個(gè)轉(zhuǎn)發(fā)表項(xiàng),該轉(zhuǎn)發(fā)表項(xiàng)的數(shù)據(jù)id域值為cid1,接口域值為j,隊(duì)列域值為0,距離域值為數(shù)據(jù)發(fā)布消息中的距離域值,生命周期為最大生命周期值,例如1s;如果數(shù)據(jù)路由器除了接口j以外所有接口都不與其他數(shù)據(jù)路由器相連,那么執(zhí)行步驟613,否則執(zhí)行步驟607;步驟607:數(shù)據(jù)路由器從除了接口j以外的每個(gè)與其他數(shù)據(jù)路由器相連的接口轉(zhuǎn)發(fā)接收到的數(shù)據(jù)發(fā)布消息,執(zhí)行步驟603;步驟608:數(shù)據(jù)路由器查看轉(zhuǎn)發(fā)表判斷是否存在數(shù)據(jù)id域值為cid1,接口域值為j且距離值大于數(shù)據(jù)發(fā)布消息中的距離值的表項(xiàng),如果存在,執(zhí)行步驟609,否則執(zhí)行步驟611;步驟609:數(shù)據(jù)路由器將數(shù)據(jù)發(fā)布消息中的距離域值遞增1,更新數(shù)據(jù)id域值為cid1,接口域值為j且距離值大于數(shù)據(jù)發(fā)布消息中的距離值的轉(zhuǎn)發(fā)表項(xiàng),即用數(shù)據(jù)發(fā)布消息中的距離值更新該轉(zhuǎn)發(fā)表項(xiàng)中的距離值,同時(shí)將該轉(zhuǎn)發(fā)表項(xiàng)的生命周期設(shè)置為最大值,如果數(shù)據(jù)路由器除了接口j以外所有接口都不與其他數(shù)據(jù)路由器相連,則執(zhí)行步驟613,否則執(zhí)行步驟610;步驟610:數(shù)據(jù)路由器從除了接口j以外的每個(gè)與其他數(shù)據(jù)路由器相連的接口轉(zhuǎn)發(fā)接收到的數(shù)據(jù)發(fā)布消息,執(zhí)行步驟603;步驟611:數(shù)據(jù)路由器將數(shù)據(jù)發(fā)布消息中的距離域值遞增1,更新數(shù)據(jù)id域值為cid1,接口域值為j且距離值大于數(shù)據(jù)發(fā)布消息中的距離值的轉(zhuǎn)發(fā)表項(xiàng),即將該轉(zhuǎn)發(fā)表項(xiàng)的生命周期設(shè)置為最大值,如果數(shù)據(jù)路由器除了接口j以外所有接口都不與其他數(shù)據(jù)路由器相連,則執(zhí)行步驟613,否則執(zhí)行步驟612;步驟612:數(shù)據(jù)路由器從除了接口j以外的每個(gè)與其他數(shù)據(jù)路由器相連的接口轉(zhuǎn)發(fā)接收到的數(shù)據(jù)發(fā)布消息,執(zhí)行步驟603;步驟613:結(jié)束。上過(guò)過(guò)程能夠快速更新轉(zhuǎn)發(fā)表從而確保數(shù)據(jù)消費(fèi)者正確快速地獲取所需數(shù)據(jù)。圖6為本發(fā)明所述的切換流程示意圖。數(shù)據(jù)路由器存在一個(gè)數(shù)據(jù)id為cid1且接口為無(wú)線接口w的轉(zhuǎn)發(fā)表項(xiàng),如果數(shù)據(jù)路由器在時(shí)間2t范圍內(nèi)沒(méi)有接收到數(shù)據(jù)id為cid1的信標(biāo)消息,則執(zhí)行下述操作:步驟701:開(kāi)始;步驟702:數(shù)據(jù)路由器隨機(jī)產(chǎn)生一個(gè)序列號(hào),構(gòu)建一個(gè)切換消息,該切換消息的數(shù)據(jù)id為cid1,類型為7,負(fù)載為序列號(hào);數(shù)據(jù)路由器從每個(gè)與其他數(shù)據(jù)路由器相連的接口轉(zhuǎn)發(fā)該切換消息,同時(shí)刪除數(shù)據(jù)id為cid1且接口為無(wú)線接口w的轉(zhuǎn)發(fā)表項(xiàng);步驟703:數(shù)據(jù)路由器從接口f7接收到切換消息后,如果數(shù)據(jù)路由器已經(jīng)收到具有相同序列號(hào)的切換消息,則執(zhí)行步驟704,否則執(zhí)行步驟705;步驟704:數(shù)據(jù)路由器丟棄接收到的切換消息,執(zhí)行步驟708;步驟705:數(shù)據(jù)路由器查看轉(zhuǎn)發(fā)表判斷是否存在接口域值為f7且數(shù)據(jù)id為cid1的轉(zhuǎn)發(fā)表項(xiàng),如果存在,執(zhí)行步驟706,否則執(zhí)行步驟708;步驟706:數(shù)據(jù)路由器刪除接口域值為f7且數(shù)據(jù)id等于cid1的轉(zhuǎn)發(fā)表項(xiàng),數(shù)據(jù)路由器判斷是否存在數(shù)據(jù)id等于cid1的轉(zhuǎn)發(fā)表項(xiàng),如果是,執(zhí)行步驟708,否則執(zhí)行步驟707;步驟707:數(shù)據(jù)路由器從除了接口f7以外的每個(gè)與其他數(shù)據(jù)路由器相連的接口轉(zhuǎn)發(fā)接收到的切換消息,執(zhí)行步驟703;步驟708:結(jié)束。上過(guò)過(guò)程能夠快速更新轉(zhuǎn)發(fā)表從而確保數(shù)據(jù)消費(fèi)者正確快速地獲取所需數(shù)據(jù)。實(shí)施例1基于表1的仿真參數(shù),本實(shí)施例模擬了本發(fā)明中的一種基于按需機(jī)制的網(wǎng)絡(luò)數(shù)據(jù)通信方法,性能分析如下:當(dāng)數(shù)據(jù)提供者增加時(shí),數(shù)據(jù)提供者分布面積更廣泛,因此獲取服務(wù)數(shù)據(jù)的延遲和代價(jià)都隨之下降。數(shù)據(jù)消費(fèi)者獲取服務(wù)數(shù)據(jù)的平均延遲為40ms,平均代價(jià)為10。表1仿真參數(shù)本發(fā)明提供了一種基于按需機(jī)制的網(wǎng)絡(luò)數(shù)據(jù)通信方法的思路,具體實(shí)現(xiàn)該技術(shù)方案的方法和途徑很多,以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本
技術(shù)領(lǐng)域:
的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。本實(shí)施例中未明確的各組成部份均可用現(xiàn)有技術(shù)加以實(shí)現(xiàn)。當(dāng)前第1頁(yè)12