專利名稱:無(wú)線傳感器網(wǎng)絡(luò)中基于機(jī)會(huì)網(wǎng)絡(luò)編碼的數(shù)據(jù)重傳方法
技術(shù)領(lǐng)域:
本發(fā)明屬于無(wú)線通信技術(shù),特別涉及無(wú)線傳感器網(wǎng)絡(luò)的數(shù)據(jù)重傳技術(shù)。
背景技術(shù):
大量移動(dòng)或靜止的傳感器以自組織方式構(gòu)成的無(wú)線網(wǎng)絡(luò)稱為無(wú)線傳感器網(wǎng)絡(luò),其作用是協(xié)作地感知、采集、處理和傳輸網(wǎng)絡(luò)覆蓋區(qū)域內(nèi)監(jiān)測(cè)對(duì)象的信息,并報(bào)告給用戶。隨著相關(guān)技術(shù)的發(fā)展,無(wú)線傳感器網(wǎng)絡(luò)得到了越來(lái)越多的應(yīng)用,并逐漸滲透到軍事探測(cè)、資源保護(hù)等數(shù)據(jù)敏感領(lǐng)域。多播傳輸是無(wú)線傳感器網(wǎng)絡(luò)中的一種普遍通信方式。由于無(wú)線信道的不可靠性,使得在無(wú)線多播通信中通常會(huì)有多個(gè)接收節(jié)點(diǎn)丟失數(shù)據(jù)。因此,發(fā)送節(jié)點(diǎn)需要通過(guò)重傳丟失的數(shù)據(jù)包來(lái)保證通信的可靠性。但是,由于接收節(jié)點(diǎn)數(shù)量較多、數(shù)據(jù)包丟失較分散、重傳數(shù)據(jù)包可能再次丟失等因素,使得常規(guī)的重傳技術(shù)通常具有較高的系統(tǒng)開(kāi)銷。·為了改善無(wú)線多播傳輸?shù)男阅?,出現(xiàn)了一種結(jié)合機(jī)會(huì)網(wǎng)絡(luò)編碼的重傳技術(shù)。該技術(shù)通過(guò)使用機(jī)會(huì)網(wǎng)絡(luò)編碼將對(duì)應(yīng)于不同接收節(jié)點(diǎn)的多個(gè)丟包編碼成一個(gè)重傳包,然后通過(guò)一次傳輸發(fā)送該重傳包。接收節(jié)點(diǎn)將重傳包和自己接收到的某些原始數(shù)據(jù)包進(jìn)行合并,得到自己丟失的數(shù)據(jù)包。這樣發(fā)送節(jié)點(diǎn)可以在一次重傳中恢復(fù)不同接收節(jié)點(diǎn)的數(shù)據(jù)包,從而顯著減少的重傳次數(shù)。無(wú)線傳感器網(wǎng)絡(luò)的節(jié)點(diǎn)通常采用電池供電,能夠使用的能量是有限的。特別是當(dāng)傳感器節(jié)點(diǎn)被撒播在惡劣環(huán)境中時(shí),電池的更換將是非常困難甚至是不可能的。因此無(wú)線傳感器網(wǎng)絡(luò)存在著嚴(yán)重的能量約束問(wèn)題。在進(jìn)行數(shù)據(jù)重傳的同時(shí),延長(zhǎng)整個(gè)網(wǎng)絡(luò)的生命周期變得十分重要。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題是,提供在無(wú)線傳感器網(wǎng)絡(luò)中,能夠提高節(jié)點(diǎn)能量利用率,延長(zhǎng)網(wǎng)絡(luò)系統(tǒng)的生存期的基于機(jī)會(huì)網(wǎng)絡(luò)編碼數(shù)據(jù)重傳方法。本發(fā)明為解決上述技術(shù)問(wèn)題所采用的技術(shù)方案是,無(wú)線傳感器網(wǎng)絡(luò)中基于機(jī)會(huì)網(wǎng)絡(luò)編碼的數(shù)據(jù)重傳方法,包括步驟原始數(shù)據(jù)包發(fā)送步驟發(fā)送節(jié)點(diǎn)向各接收節(jié)點(diǎn)廣播原始數(shù)據(jù)包,依照發(fā)送順序?yàn)樗鲈紨?shù)據(jù)包添加序號(hào);原始數(shù)據(jù)包接收步驟各接收節(jié)點(diǎn)接收來(lái)自發(fā)送節(jié)點(diǎn)的原始數(shù)據(jù)包并向發(fā)送節(jié)點(diǎn)反饋信息,所述反饋信息包括各接收節(jié)點(diǎn)的當(dāng)前能量和已接收到的原始數(shù)據(jù)包序號(hào);當(dāng)接收節(jié)點(diǎn)接收到所有原始數(shù)據(jù)包時(shí)進(jìn)入休眠;數(shù)據(jù)包接收統(tǒng)計(jì)步驟發(fā)送節(jié)點(diǎn)根據(jù)接收節(jié)點(diǎn)的反饋信息統(tǒng)計(jì)接收情況,將丟失的原始數(shù)據(jù)包放入重傳隊(duì)列中,發(fā)送節(jié)點(diǎn)根據(jù)各接收節(jié)點(diǎn)接收到的原始數(shù)據(jù)包序號(hào)得到各接收節(jié)點(diǎn)對(duì)應(yīng)的丟包率;重傳調(diào)度步驟發(fā)送節(jié)點(diǎn)根據(jù)反饋的信息對(duì)重傳隊(duì)列中的原始數(shù)據(jù)包進(jìn)行排序,排序的規(guī)則為將丟包率越低的接收節(jié)點(diǎn)所需要的原始數(shù)據(jù)包排在重傳隊(duì)列越前面;當(dāng)一個(gè)原始數(shù)據(jù)包被多個(gè)接收節(jié)點(diǎn)所需要,則根據(jù)丟包率最小的那個(gè)接收節(jié)點(diǎn)對(duì)所述原始數(shù)據(jù)包進(jìn)行排序;在相同丟包率下,當(dāng)前能量越少的接收節(jié)點(diǎn)所需要的原始數(shù)據(jù)包排在重傳隊(duì)列越前面;在相同丟包率和相同當(dāng)前能量條件下,序號(hào)越小的原始數(shù)據(jù)包排在重傳隊(duì)列越前面;重傳發(fā)送步驟發(fā)送節(jié)點(diǎn)從重傳隊(duì)列取出一個(gè)原始數(shù)據(jù)包,搜索重傳隊(duì)列中所有數(shù)據(jù)包進(jìn)行編碼規(guī)則判斷生成重傳數(shù)據(jù)包并向各接收節(jié)點(diǎn)廣播該重傳數(shù)據(jù)包,所述重傳數(shù)據(jù)包可以是編碼包,也可以是原始數(shù)據(jù)包;重傳接收步驟當(dāng)接收節(jié)點(diǎn)接收到不含有自己需要的原始數(shù)據(jù)包的重傳數(shù)據(jù)包時(shí),丟棄該重傳數(shù)據(jù)包;當(dāng)接收節(jié)點(diǎn)接收到含有自己需要的原始數(shù)據(jù)包的重傳數(shù)據(jù)包時(shí),從該重傳數(shù)據(jù)包中獲取自己需要的原始數(shù)據(jù)包并存儲(chǔ),向發(fā)送節(jié)點(diǎn)反饋信息;當(dāng)接收節(jié)點(diǎn)接收到所有原始數(shù)據(jù)包時(shí)則進(jìn)入休眠;重傳更新步驟發(fā)送節(jié)點(diǎn)每接收到一個(gè)接收節(jié)點(diǎn)反饋的信息后,就更新相應(yīng)的原·始數(shù)據(jù)包的接收情況,判斷該原始數(shù)據(jù)包是否已經(jīng)被所有接收節(jié)點(diǎn)接收到,如否,則返回重傳調(diào)度步驟,如是,從重傳隊(duì)列中刪除該原始數(shù)據(jù)包,并判斷重傳隊(duì)列中是否還有需要重傳的原始數(shù)據(jù)包,如還有需要重傳的原始數(shù)據(jù)包,則返回重傳調(diào)度步驟;否則沒(méi)有需要重傳的原始數(shù)據(jù)包,數(shù)據(jù)重傳結(jié)束。現(xiàn)有的基于機(jī)會(huì)網(wǎng)絡(luò)編碼的重傳在恢復(fù)數(shù)據(jù)時(shí)并沒(méi)有考慮能量消耗問(wèn)題,使得部分節(jié)點(diǎn)參與了不必要的通信,消耗了多余的能量,從而縮短了整個(gè)網(wǎng)絡(luò)的生命周期。本發(fā)明的數(shù)據(jù)重傳優(yōu)先恢復(fù)丟包率較小的接收節(jié)點(diǎn)丟失的數(shù)據(jù)包。實(shí)際應(yīng)用中,丟包率較小接收節(jié)點(diǎn)丟失的數(shù)據(jù)包有較大概率同時(shí)也沒(méi)有被丟包率較大接收節(jié)點(diǎn)接收到。因此,發(fā)送節(jié)點(diǎn)在重傳丟包率較小接收節(jié)點(diǎn)需要的數(shù)據(jù)包時(shí),也是在恢復(fù)丟包率較大接收節(jié)點(diǎn)丟失的數(shù)據(jù)包。此外,丟包率較小接收節(jié)點(diǎn)所對(duì)應(yīng)的鏈路質(zhì)量較好,且其丟失的數(shù)據(jù)包也較少,這些都使得發(fā)送節(jié)點(diǎn)用來(lái)恢復(fù)所述節(jié)點(diǎn)丟失數(shù)據(jù)包所需的重傳次數(shù)較少。同時(shí),在對(duì)原始數(shù)據(jù)包的調(diào)度還兼顧了接收點(diǎn)當(dāng)前的能量。所以,本發(fā)明通過(guò)合理安排數(shù)據(jù)包的恢復(fù)順序,能在不降低重傳效率的前提下,使丟包率較小接收節(jié)點(diǎn)以及能量較少的接收節(jié)點(diǎn)更快地進(jìn)入休眠狀態(tài),從而減少不必要的能量開(kāi)銷,延長(zhǎng)整個(gè)網(wǎng)絡(luò)的生命周期。本發(fā)明把機(jī)會(huì)網(wǎng)絡(luò)編碼應(yīng)用在無(wú)線傳感器網(wǎng)絡(luò)數(shù)據(jù)恢復(fù)過(guò)程。本發(fā)明的數(shù)據(jù)恢復(fù)方法是發(fā)送節(jié)點(diǎn)將需要重傳的數(shù)據(jù)包先進(jìn)行編碼后再發(fā)送,接收節(jié)點(diǎn)根據(jù)之前接收到的原始數(shù)據(jù)包從編碼數(shù)據(jù)包中解碼出需要的丟包。該數(shù)據(jù)重傳方法將機(jī)會(huì)網(wǎng)絡(luò)編碼與無(wú)線廣播特性相結(jié)合,通過(guò)編碼對(duì)多個(gè)數(shù)據(jù)包進(jìn)行信息融合,增加單次傳輸?shù)男畔⒘?,從而減少數(shù)據(jù)包的重傳次數(shù),降低數(shù)據(jù)恢復(fù)過(guò)程的能量消耗,以達(dá)到進(jìn)一步延長(zhǎng)整個(gè)網(wǎng)絡(luò)生命周期的目的。本發(fā)明的有益效果是,能有效提高節(jié)點(diǎn)能量利用率,延長(zhǎng)網(wǎng)絡(luò)系統(tǒng)的生存期。
圖I為實(shí)施例流程圖;圖2為實(shí)施例提出的編碼步驟的流程圖;圖3本實(shí)施例中重傳數(shù)據(jù)包接收步驟的流程圖。
具體實(shí)施例方式本發(fā)明的無(wú)線傳感器網(wǎng)絡(luò)中基于機(jī)會(huì)網(wǎng)絡(luò)編碼的數(shù)據(jù)重傳方法,包括步驟原始數(shù)據(jù)包發(fā)送步驟發(fā)送節(jié)點(diǎn)向各接收節(jié)點(diǎn)廣播原始數(shù)據(jù)包,依照發(fā)送順序?yàn)樗鲈紨?shù)據(jù)包添加序號(hào);原始數(shù)據(jù)包接收步驟各接收節(jié)點(diǎn)接收來(lái)自發(fā)送節(jié)點(diǎn)的原始數(shù)據(jù)包并向發(fā)送節(jié)點(diǎn)反饋信息,所述反饋的信息包括各接收節(jié)點(diǎn)的當(dāng)前能量和接收到的原始數(shù)據(jù)包序號(hào);當(dāng)接收節(jié)點(diǎn)接收到所有原始數(shù)據(jù)包時(shí)進(jìn)入休眠;數(shù)據(jù)包接收統(tǒng)計(jì)步驟發(fā)送節(jié)點(diǎn)根據(jù)接收節(jié)點(diǎn)的反饋信息統(tǒng)計(jì)接收情況,將丟失的原始數(shù)據(jù)包放入重傳隊(duì)列中,發(fā)送節(jié)點(diǎn)根據(jù)各接收節(jié)點(diǎn)接收到的原始數(shù)據(jù)包序號(hào)得到各接收節(jié)點(diǎn)對(duì)應(yīng)的丟包率;重傳調(diào)度步驟發(fā)送節(jié)點(diǎn)根據(jù)反饋的信息對(duì)重傳隊(duì)列中的原始數(shù)據(jù)包進(jìn)行排序,排序的規(guī)則為將丟包率越低的接收節(jié)點(diǎn)所需要的原始數(shù)據(jù)包排在重傳隊(duì)列越前面;當(dāng)一個(gè)原始數(shù)據(jù)包被多個(gè)接收節(jié)點(diǎn)所需要,則根據(jù)丟包率最小的那個(gè)接收節(jié)點(diǎn)對(duì)所述原始數(shù)據(jù)包進(jìn)行排序;在相同丟包率下,當(dāng)前能量越少的接收節(jié)點(diǎn)所需要的原始數(shù)據(jù)包排在重傳隊(duì)列越前面;在相同丟包率和相同當(dāng)前能量條件下,序號(hào)越小的原始數(shù)據(jù)包排在重傳隊(duì)列越前面;重傳發(fā)送步驟發(fā)送節(jié)點(diǎn)從重傳隊(duì)列取出一個(gè)原始數(shù)據(jù)包,搜索重傳隊(duì)列中所有數(shù)據(jù)包進(jìn)行編碼規(guī)則判斷生成重傳數(shù)據(jù)包并向各接收節(jié)點(diǎn)廣播該重傳數(shù)據(jù)包;優(yōu)化的,為了更合理得、靈活地設(shè)置接收節(jié)點(diǎn)的休眠時(shí)間長(zhǎng)度,針對(duì)每一次的重傳情況,發(fā)送節(jié)點(diǎn)在所述重傳數(shù)據(jù)包中還包括有重傳時(shí)間I;;當(dāng)然,不在重傳數(shù)據(jù)包中攜帶重傳時(shí)間并不影響接收節(jié)點(diǎn)在休眠與喚醒之間切換狀態(tài),接收節(jié)點(diǎn)可以根據(jù)本地設(shè)置或網(wǎng)絡(luò)設(shè)置來(lái)切換狀態(tài);重傳接收步驟當(dāng)接收節(jié)點(diǎn)接收到不含有自己需要的原始數(shù)據(jù)包的重傳數(shù)據(jù)包時(shí),丟失該重傳數(shù)據(jù)包;當(dāng)接收節(jié)點(diǎn)接收到含有自己需要的原始數(shù)據(jù)包的重傳數(shù)據(jù)包時(shí),從重傳數(shù)據(jù)包中獲取自己需要的原始數(shù)據(jù)包并存儲(chǔ),向發(fā)送節(jié)點(diǎn)反饋信息;當(dāng)接收節(jié)點(diǎn)接收到所有原始數(shù)據(jù)包時(shí)則進(jìn)入休眠;針對(duì)重傳數(shù)據(jù)包中攜帶了重傳時(shí)間I;的優(yōu)選方案,當(dāng)接收節(jié)點(diǎn)接收到所有原始數(shù)據(jù)包時(shí)則進(jìn)入休眠的具體設(shè)置方法是當(dāng)接收節(jié)點(diǎn)接收完畢所有原始數(shù)據(jù)包后,接收節(jié)點(diǎn)從其接收到的最后一個(gè)重傳數(shù)據(jù)包中提取出重傳時(shí)間信息 ;,再然后判斷Tr是否大于系統(tǒng)預(yù)設(shè)休眠時(shí)間Ta,如是,則設(shè)置喚醒時(shí)間Ts=Ta+T ;如否,設(shè)置喚醒時(shí)間TS=I;+T,其中T為系統(tǒng)當(dāng)前時(shí)間;最后,接收節(jié)點(diǎn)進(jìn)入休眠狀態(tài);這樣,當(dāng)?shù)竭_(dá)喚醒時(shí)間Ts,該接收節(jié)點(diǎn)從休眠狀態(tài)回到工作狀態(tài);為了更進(jìn)一步節(jié)省能源,當(dāng)接收節(jié)點(diǎn)從休眠狀態(tài)回到工作狀態(tài)時(shí),檢測(cè)到本次重傳還未結(jié)束,則重新設(shè)置喚醒時(shí)間,再次進(jìn)入休眠狀態(tài);重傳更新步驟發(fā)送節(jié)點(diǎn)每接收到一個(gè)接收節(jié)點(diǎn)反饋的信息之后,更新相應(yīng)的原始數(shù)據(jù)包的接收情況,判斷該原始數(shù)據(jù)包是否已經(jīng)被所有接收節(jié)點(diǎn)接收到,如否,則返回重傳調(diào)度步驟,如是,從重傳隊(duì)列中刪除該原始數(shù)據(jù)包,并判斷重傳隊(duì)列中是否還有需要重傳的原始數(shù)據(jù)包,如還有需要重傳的原始數(shù)據(jù)包,則返回重傳調(diào)度步驟;否則沒(méi)有需要重傳的原始數(shù)據(jù)包,數(shù)據(jù)重傳結(jié)束。具體的,重傳發(fā)送步驟中,發(fā)送節(jié)點(diǎn)從重傳隊(duì)列取出一個(gè)原始數(shù)據(jù)包,搜索重傳隊(duì)列中所有數(shù)據(jù)包進(jìn)行編碼規(guī)則判斷生成重傳數(shù)據(jù)包的具體方法是發(fā)送節(jié)點(diǎn)從重傳隊(duì)列中取出第一個(gè)原始數(shù)據(jù)包P,然后以從前到后的順序,依次在重傳隊(duì)列中尋找滿足編碼規(guī)則的原始數(shù)據(jù)包;在發(fā)送節(jié)點(diǎn)搜索完重傳隊(duì)列中所有數(shù)據(jù)包時(shí),如果存在滿足編碼規(guī)則的原始數(shù)據(jù)包,則發(fā)送節(jié)點(diǎn)將原始數(shù)據(jù)包P與滿足編碼規(guī)定的原始數(shù)據(jù)包進(jìn)行逐位異或運(yùn)算生成編碼數(shù)據(jù)包,并在所述編碼數(shù)據(jù)包中加入編碼信息生成重傳數(shù)據(jù)包,所述編碼信息為組成該重傳數(shù)據(jù)包的原始數(shù)據(jù)包序號(hào);如果不存在滿足編碼規(guī)則的原始數(shù)據(jù)包,則發(fā)送節(jié)點(diǎn)則將原始數(shù)據(jù)包P作為重傳數(shù)據(jù) 包;所述編碼規(guī)則是生成的編碼數(shù)據(jù)包中最多只能含有各接收節(jié)點(diǎn)丟失的一個(gè)原始數(shù)據(jù)包。具體的重傳接收步驟中,當(dāng)接收節(jié)點(diǎn)接收到含有自己需要的原始數(shù)據(jù)包的重傳數(shù)據(jù)包時(shí),判斷重傳數(shù)據(jù)包是否是編碼數(shù)據(jù)包,如是,根據(jù)重傳數(shù)據(jù)包中的編碼信息,接收節(jié)點(diǎn)從本地存儲(chǔ)的原始數(shù)據(jù)包中查找相應(yīng)數(shù)據(jù)包與編碼數(shù)據(jù)包進(jìn)行逐位異或運(yùn)算得到需要的原始數(shù)據(jù)包,如否,直接存儲(chǔ)作為重傳數(shù)據(jù)包的原始數(shù)據(jù)包。本領(lǐng)域技術(shù)人員也可以根據(jù)現(xiàn)有的機(jī)會(huì)網(wǎng)絡(luò)編碼方法來(lái)實(shí)現(xiàn)對(duì)搜索重傳隊(duì)列中所有原始數(shù)據(jù)包進(jìn)行其它方式的編碼來(lái)生成編碼數(shù)據(jù)包,接收節(jié)點(diǎn)也能根據(jù)相應(yīng)的方式根據(jù)重傳數(shù)據(jù)包恢復(fù)出需要的原始數(shù)據(jù)包。實(shí)施例一種無(wú)線傳感器網(wǎng)絡(luò)中基于網(wǎng)絡(luò)編碼的數(shù)據(jù)重傳方案。無(wú)線傳感器網(wǎng)絡(luò)是由一個(gè)發(fā)送節(jié)點(diǎn)和N (N彡2)個(gè)接收節(jié)點(diǎn)i(l Si SN)組成,N為正整數(shù)。無(wú)線傳感器網(wǎng)絡(luò)中,發(fā)送節(jié)點(diǎn)和每個(gè)接收節(jié)點(diǎn)之間都能雙向通信。圖I是本實(shí)施例數(shù)據(jù)重傳方案的流程圖,重傳方法包括以下步驟步驟101、原始數(shù)據(jù)傳輸步驟發(fā)送節(jié)點(diǎn)依次發(fā)送M個(gè)原始數(shù)據(jù)包,并以從小到大的順序?yàn)樗鲈紨?shù)據(jù)包添加序號(hào),M為自然數(shù);一個(gè)接收節(jié)點(diǎn)在成功接收到數(shù)據(jù)包后向發(fā)送節(jié)點(diǎn)回復(fù)反饋信息,所述反饋信息包括該節(jié)點(diǎn)接收到的原始數(shù)據(jù)包序號(hào)和該節(jié)點(diǎn)的能量信息;步驟102、統(tǒng)計(jì)步驟在傳輸原始數(shù)據(jù)包的過(guò)程中,發(fā)送節(jié)點(diǎn)根據(jù)接收節(jié)點(diǎn)反饋的信息統(tǒng)計(jì)數(shù)據(jù)包的接收情況,并將丟失的數(shù)據(jù)包放入重傳隊(duì)列中;在傳輸完原始數(shù)據(jù)包后,發(fā)送節(jié)點(diǎn)根據(jù)接收節(jié)點(diǎn)i (I < i < N)的反饋信息統(tǒng)計(jì)接收節(jié)點(diǎn)的能量Wi和丟包率Y i ;步驟103、調(diào)度步驟發(fā)送節(jié)點(diǎn)按照一定順序?qū)χ貍麝?duì)列中的數(shù)據(jù)包進(jìn)行排序,所述順序包括丟包率越低的接收節(jié)點(diǎn)所需要的數(shù)據(jù)包排在越前面;如果一個(gè)數(shù)據(jù)包被多個(gè)接收節(jié)點(diǎn)所需要,則根據(jù)丟包率最小的那個(gè)接收節(jié)點(diǎn)來(lái)對(duì)所述數(shù)據(jù)包進(jìn)行排序;在相同丟包率條件下,能量越少的接收節(jié)點(diǎn)所需要的數(shù)據(jù)包排在越前面;在相同丟包率和能量條件下,序號(hào)越小的數(shù)據(jù)包排在越前面。步驟104、編碼步驟
本實(shí)施例采用2元域上的加法運(yùn)算對(duì)η個(gè)數(shù)據(jù)包進(jìn)行編碼。根據(jù)高斯定理,接收節(jié)點(diǎn)當(dāng)且僅當(dāng)已知其中的η-I個(gè)數(shù)據(jù)包,才可以根據(jù)所述線性變換從η個(gè)數(shù)據(jù)包形成的編碼數(shù)據(jù)包中解出自己丟失的數(shù)據(jù)包,得到全部的η個(gè)數(shù)據(jù)包。因此,本實(shí)施例采用的編碼規(guī)則是生成的編碼數(shù)據(jù)包能夠被所有接收節(jié)點(diǎn)成功解碼,即編碼數(shù)據(jù)包中最多只能含有各接收節(jié)點(diǎn)丟失的一個(gè)原始數(shù)據(jù)包。圖2是本實(shí)施例提出的編碼算法的流程圖,具體包括步驟201、從重傳隊(duì)列中取出第一個(gè)原始數(shù)據(jù)包P,并設(shè)置變量i = 1,然后進(jìn)入步驟 202 ;步驟202、從重傳隊(duì)列中依次取出第i個(gè)原始數(shù)據(jù)包Pi,并設(shè)置i = i+Ι,然后進(jìn)入步驟203 ;步驟203、判斷編碼數(shù)據(jù)包P 乃是否滿足編碼規(guī)則,如果是,則執(zhí)行步驟204 ;否 貝U,執(zhí)行步驟205 ;步驟204、Ρ = ΡΦΡ ,然后進(jìn)入步驟205 ;步驟205、判斷是否已檢查完重傳隊(duì)列中的所有數(shù)據(jù)包,如果是,則執(zhí)行步驟206 ;否則,執(zhí)行步驟202;步驟206、判斷當(dāng)前P是否是編碼數(shù)據(jù)包,如果是,則執(zhí)行步驟207 ;否則,執(zhí)行步驟208 ;步騾207、在數(shù)據(jù)包P中加入編碼信息生成重傳數(shù)據(jù)包,然后進(jìn)入步驟208。所述編碼信息包括所有被編碼在一起的原始數(shù)據(jù)包的序號(hào);步驟208、在數(shù)據(jù)包P中加入重傳時(shí)間信息,然后進(jìn)入步驟209。所述重傳時(shí)間信息包括重傳階段的持續(xù)時(shí)間Tr=RT · L/(I- Ymax)。其中,RT是發(fā)送節(jié)點(diǎn)傳輸一個(gè)數(shù)據(jù)包的平均時(shí)間,Ymax=max{ Y J , i = 1,…,N, Y i表示需要進(jìn)行重傳的N個(gè)接收節(jié)點(diǎn)分別對(duì)應(yīng)的丟包率,L是重傳隊(duì)列中丟包率為Ymax的接收節(jié)點(diǎn)所需要發(fā)送節(jié)點(diǎn)重傳的原始數(shù)據(jù)包個(gè)數(shù);步驟209、重傳數(shù)據(jù)包P。步驟105、接收步驟圖3是本實(shí)施例提出的接收節(jié)點(diǎn)對(duì)接收到的數(shù)據(jù)包P進(jìn)行處理的流程圖,具體包括步驟301、判斷P中是否有自己需要的數(shù)據(jù)包,如果有,則進(jìn)入步驟302 ;否則,丟棄P ;步驟302、判斷P是否是編碼數(shù)據(jù)包,如果是,則進(jìn)入步驟303 ;否則進(jìn)入步驟304 ;步驟303、根據(jù)P的編碼信息,接收節(jié)點(diǎn)從其存儲(chǔ)的原始數(shù)據(jù)包中查找相應(yīng)數(shù)據(jù)包,然后將找出的數(shù)據(jù)包與P進(jìn)行逐位異或運(yùn)算得到自己需要的原始數(shù)據(jù)包,最后進(jìn)入步驟 304 ;步驟304、存儲(chǔ)獲得的原始數(shù)據(jù)包,然后向發(fā)送節(jié)點(diǎn)回復(fù)反饋信息,最后進(jìn)入步驟305 ;步驟305、判斷自己是否已經(jīng)收到所有數(shù)據(jù)包,如果是,則進(jìn)入步驟106 ;否則,該接收節(jié)點(diǎn)保持工作狀態(tài)。步驟106、休眠步驟首先,接收節(jié)點(diǎn)從其接收到的最后一個(gè)數(shù)據(jù)包中提取出重傳時(shí)間信息I;;然后判斷Tr是否大于系統(tǒng)預(yù)設(shè)休眠時(shí)間Ta,如果是,則設(shè)置喚醒時(shí)間Ts=Ta+T ;否則設(shè)置喚醒時(shí)間TS=I;+T,其中T為系統(tǒng)當(dāng)前時(shí)間;最后,該接收節(jié)點(diǎn)進(jìn)入休眠狀態(tài)。在Ts時(shí)刻,接收節(jié)點(diǎn)從休眠狀態(tài)回到工作狀態(tài)。然后,該接收節(jié)點(diǎn)檢測(cè)網(wǎng)絡(luò)中是否有數(shù)據(jù)傳輸,如果沒(méi)有,則所述接收節(jié)點(diǎn)根據(jù)系統(tǒng)預(yù)設(shè)任務(wù)進(jìn)行工作;否則,所述接收節(jié)點(diǎn)判斷本次重傳過(guò)程是否結(jié)束。如果本 次重傳過(guò)程結(jié)束,則所述接收節(jié)點(diǎn)根據(jù)系統(tǒng)預(yù)設(shè)任務(wù)進(jìn)行工作。如果本次重傳過(guò)程沒(méi)有結(jié)束,則所述接收節(jié)點(diǎn)執(zhí)行步驟106。所述系統(tǒng)預(yù)設(shè)休眠時(shí)間和系統(tǒng)預(yù)設(shè)任務(wù)由用戶自行定義。步驟107、更新步驟發(fā)送節(jié)點(diǎn)每接收到一個(gè)節(jié)點(diǎn)回復(fù)的反饋信息之后,更新相應(yīng)數(shù)據(jù)包的接收情況,然后判斷該數(shù)據(jù)包是否已經(jīng)被所有接收節(jié)點(diǎn)接收到。如果否,則執(zhí)行步驟103 ;否則,從重傳隊(duì)列中刪除所述數(shù)據(jù)包,再判斷重傳隊(duì)列中是否還有數(shù)據(jù)包。如果有,則執(zhí)行步驟103 ;否則,結(jié)束數(shù)據(jù)重傳階段,進(jìn)入下一個(gè)原始數(shù)據(jù)發(fā)送階段。需要說(shuō)明的是,實(shí)施例中的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行,并且,本發(fā)明的實(shí)施例并非用于限定本發(fā)明的保護(hù)范圍,對(duì)于本領(lǐng)域的技術(shù)人員來(lái)說(shuō),具體的實(shí)施方式可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.無(wú)線傳感器網(wǎng)絡(luò)中基于機(jī)會(huì)網(wǎng)絡(luò)編碼的數(shù)據(jù)重傳方法,其特征在于,包括步驟 原始數(shù)據(jù)包發(fā)送步驟發(fā)送節(jié)點(diǎn)向各接收節(jié)點(diǎn)廣播原始數(shù)據(jù)包,依照發(fā)送順序?yàn)樗鲈紨?shù)據(jù)包添加序號(hào); 原始數(shù)據(jù)包接收步驟各接收節(jié)點(diǎn)接收來(lái)自發(fā)送節(jié)點(diǎn)的原始數(shù)據(jù)包并向發(fā)送節(jié)點(diǎn)反饋信息,所述反饋信息包括各接收節(jié)點(diǎn)的當(dāng)前能量和已接收到的原始數(shù)據(jù)包序號(hào);當(dāng)接收節(jié)點(diǎn)接收到所有原始數(shù)據(jù)包時(shí)進(jìn)入休眠; 數(shù)據(jù)包接收統(tǒng)計(jì)步驟發(fā)送節(jié)點(diǎn)根據(jù)接收節(jié)點(diǎn)的反饋信息統(tǒng)計(jì)接收情況,將丟失的原始數(shù)據(jù)包放入重傳隊(duì)列中,發(fā)送節(jié)點(diǎn)根據(jù)各接收節(jié)點(diǎn)接收到的原始數(shù)據(jù)包序號(hào)得到各接收節(jié)點(diǎn)對(duì)應(yīng)的丟包率; 重傳調(diào)度步驟發(fā)送節(jié)點(diǎn)根據(jù)反饋的信息對(duì)重傳隊(duì)列中的原始數(shù)據(jù)包進(jìn)行排序,排序 的規(guī)則為將丟包率越低的接收節(jié)點(diǎn)所需要的原始數(shù)據(jù)包排在重傳隊(duì)列越前面;當(dāng)一個(gè)原始數(shù)據(jù)包被多個(gè)接收節(jié)點(diǎn)所需要,則根據(jù)丟包率最小的那個(gè)接收節(jié)點(diǎn)對(duì)所述原始數(shù)據(jù)包進(jìn)行排序;在相同丟包率下,當(dāng)前能量越少的接收節(jié)點(diǎn)所需要的原始數(shù)據(jù)包排在重傳隊(duì)列越前面;在相同丟包率和相同當(dāng)前能量條件下,序號(hào)越小的原始數(shù)據(jù)包排在重傳隊(duì)列越前面; 重傳發(fā)送步驟發(fā)送節(jié)點(diǎn)從重傳隊(duì)列取出一個(gè)原始數(shù)據(jù)包,搜索重傳隊(duì)列中所有數(shù)據(jù)包進(jìn)行編碼規(guī)則判斷生成重傳數(shù)據(jù)包并向各接收節(jié)點(diǎn)廣播該重傳數(shù)據(jù)包,所述重傳數(shù)據(jù)包可以是編碼包,也可以是原始數(shù)據(jù)包; 重傳接收步驟當(dāng)接收節(jié)點(diǎn)接收到不含有自己需要的原始數(shù)據(jù)包的重傳數(shù)據(jù)包時(shí),丟棄該重傳數(shù)據(jù)包;當(dāng)接收節(jié)點(diǎn)接收到含有自己需要的原始數(shù)據(jù)包的重傳數(shù)據(jù)包時(shí),從該重傳數(shù)據(jù)包中獲取自己需要的原始數(shù)據(jù)包并存儲(chǔ),向發(fā)送節(jié)點(diǎn)反饋信息;當(dāng)接收節(jié)點(diǎn)接收到所有原始數(shù)據(jù)包時(shí)則進(jìn)入休眠; 重傳更新步驟發(fā)送節(jié)點(diǎn)每接收到一個(gè)接收節(jié)點(diǎn)反饋的信息后,就更新相應(yīng)的原始數(shù)據(jù)包的接收情況,判斷該原始數(shù)據(jù)包是否已經(jīng)被所有接收節(jié)點(diǎn)接收到,如否,則返回重傳調(diào)度步驟,如是,從重傳隊(duì)列中刪除該原始數(shù)據(jù)包,并判斷重傳隊(duì)列中是否還有需要重傳的原始數(shù)據(jù)包,如還有需要重傳的原始數(shù)據(jù)包,則返回重傳調(diào)度步驟;否則沒(méi)有需要重傳的原始數(shù)據(jù)包,數(shù)據(jù)重傳結(jié)束。
2.如權(quán)利要求I所述無(wú)線傳感器網(wǎng)絡(luò)中基于機(jī)會(huì)網(wǎng)絡(luò)編碼的數(shù)據(jù)重傳方法,其特征在于,所述重傳數(shù)據(jù)包中還包括有重傳時(shí)間I;; 所述重傳接收步驟中,當(dāng)接收節(jié)點(diǎn)接收到所有原始數(shù)據(jù)包時(shí)進(jìn)入休眠的具體設(shè)置方法是當(dāng)接收節(jié)點(diǎn)接收完畢所有原始數(shù)據(jù)包后,接收節(jié)點(diǎn)從其接收到的最后一個(gè)重傳數(shù)據(jù)包中提取出重傳時(shí)間信息 ;,再然后判斷I;是否大于系統(tǒng)預(yù)設(shè)休眠時(shí)間Ta,如是,則設(shè)置喚醒時(shí)間Ts=Ta+T ;如否,設(shè)置喚醒時(shí)間TS=T,+T,其中T為系統(tǒng)當(dāng)前時(shí)間;最后,接收節(jié)點(diǎn)進(jìn)入休眠狀態(tài);當(dāng)?shù)竭_(dá)喚醒時(shí)間,該接收節(jié)點(diǎn)從休眠狀態(tài)回到工作狀態(tài)。
3.如權(quán)利要求2所述無(wú)線傳感器網(wǎng)絡(luò)中基于機(jī)會(huì)網(wǎng)絡(luò)編碼的數(shù)據(jù)重傳方法,其特征在于,當(dāng)接收節(jié)點(diǎn)從休眠狀態(tài)回到工作狀態(tài)時(shí),檢測(cè)到本次重傳還未結(jié)束,則重新設(shè)置喚醒時(shí)間,再次進(jìn)入休眠狀態(tài)。
4.如權(quán)利要求2或3所述無(wú)線傳感器網(wǎng)絡(luò)中基于機(jī)會(huì)網(wǎng)絡(luò)編碼的數(shù)據(jù)重傳方法,其特征在于,重傳時(shí)間信息I;的取值為Tr=RT*L/(l-ymax); 其中,RT是發(fā)送節(jié)點(diǎn)傳輸一個(gè)數(shù)據(jù)包的平均時(shí)間,Ymax=max{ Y J , i = I, ···, N, Yi表示需要獲得重傳數(shù)據(jù)包的N個(gè)接收節(jié)點(diǎn)分別對(duì)應(yīng)的丟包率,L是重傳隊(duì)列中丟包率為Ymax的接收節(jié)點(diǎn)所需要發(fā)送節(jié)點(diǎn)重傳的原始數(shù)據(jù)包個(gè)數(shù)。
5.如權(quán)利要求I所述無(wú)線傳感器網(wǎng)絡(luò)中基于機(jī)會(huì)網(wǎng)絡(luò)編碼的數(shù)據(jù)重傳方法,其特征在于,重傳發(fā)送步驟中,發(fā)送節(jié)點(diǎn)從重傳隊(duì)列取出一個(gè)原始數(shù)據(jù)包,搜索重傳隊(duì)列中所有數(shù)據(jù)包進(jìn)行編碼規(guī)則判斷生成重傳數(shù)據(jù)包的具體方法是 發(fā)送節(jié)點(diǎn)從重傳隊(duì)列中取出第一個(gè)原始數(shù)據(jù)包P,然后以從前到后的順序,依次在重傳隊(duì)列中尋找滿足編碼規(guī)則的原始數(shù)據(jù)包;在發(fā)送節(jié)點(diǎn)搜索完重傳隊(duì)列中所有數(shù)據(jù)包時(shí),如果存在滿足編碼規(guī)則的原始數(shù)據(jù)包,則發(fā)送節(jié)點(diǎn)將原始數(shù)據(jù)包P與滿足編碼規(guī)定的原始數(shù)據(jù)包進(jìn)行逐位異或運(yùn)算生成編碼數(shù)據(jù)包,并在所述編碼數(shù)據(jù)包中加入編碼信息生成重傳數(shù)據(jù)包,所述編碼信息為組成該重傳數(shù)據(jù)包的原始數(shù)據(jù)包序號(hào);如果不存在滿足編碼規(guī)則的原始數(shù)據(jù)包,則發(fā)送節(jié)點(diǎn)則將原始數(shù)據(jù)包P作為重傳數(shù)據(jù)包; 所述編碼規(guī)則是生成的編碼數(shù)據(jù)包中最多只能含有各接收節(jié)點(diǎn)丟失的一個(gè)原始數(shù)據(jù)包。
6.如權(quán)利要求5所述無(wú)線傳感器網(wǎng)絡(luò)中基于機(jī)會(huì)網(wǎng)絡(luò)編碼的數(shù)據(jù)重傳方法,其特征在于,重傳接收步驟中,當(dāng)接收節(jié)點(diǎn)接收到含有自己需要的原始數(shù)據(jù)包的重傳數(shù)據(jù)包時(shí),判斷重傳數(shù)據(jù)包是否是編碼數(shù)據(jù)包,如是,根據(jù)重傳數(shù)據(jù)包中的編碼信息,接收節(jié)點(diǎn)從本地存儲(chǔ)的原始數(shù)據(jù)包中查找相應(yīng)數(shù)據(jù)包與編碼數(shù)據(jù)包進(jìn)行逐位異或運(yùn)算得到需要的原始數(shù)據(jù)包,如否,直接存儲(chǔ)作為原始數(shù)據(jù)包。
全文摘要
本發(fā)明提供一種無(wú)線傳感器網(wǎng)絡(luò)中基于機(jī)會(huì)網(wǎng)絡(luò)編碼的數(shù)據(jù)重傳方法,把機(jī)會(huì)網(wǎng)絡(luò)編碼應(yīng)用在無(wú)線傳感器網(wǎng)絡(luò)數(shù)據(jù)恢復(fù)過(guò)程。本發(fā)明的數(shù)據(jù)重傳優(yōu)先恢復(fù)丟包率較小的接收節(jié)點(diǎn)丟失的數(shù)據(jù)包。發(fā)送節(jié)點(diǎn)在重傳丟包率較小接收節(jié)點(diǎn)需要的數(shù)據(jù)包時(shí),也是在恢復(fù)丟包率較大接收節(jié)點(diǎn)丟失的數(shù)據(jù)包。丟包率較小接收節(jié)點(diǎn)所對(duì)應(yīng)的鏈路質(zhì)量較好,且其丟失的數(shù)據(jù)包也較少,這些都使得發(fā)送節(jié)點(diǎn)用來(lái)恢復(fù)所述節(jié)點(diǎn)丟失數(shù)據(jù)包所需的重傳次數(shù)較少。同時(shí),在對(duì)原始數(shù)據(jù)包的調(diào)度還兼顧了接收點(diǎn)當(dāng)前的能量。本發(fā)明通過(guò)合理安排數(shù)據(jù)包的恢復(fù)順序,能在不降低重傳效率的前提下,使丟包率較小接收節(jié)點(diǎn)以及能量較少的接收節(jié)點(diǎn)更快地進(jìn)入休眠狀態(tài),從而減少不必要的能量開(kāi)銷。
文檔編號(hào)H04L1/00GK102946298SQ20121047940
公開(kāi)日2013年2月27日 申請(qǐng)日期2012年11月23日 優(yōu)先權(quán)日2012年11月23日
發(fā)明者周志恒, 周亮, 王興, 譚源泉 申請(qǐng)人:電子科技大學(xué)