一種可靠有效的無線傳感器網(wǎng)絡(luò)重啟方法
【專利摘要】本發(fā)明公開了一種可靠有效的無線傳感器網(wǎng)絡(luò)重啟方法。當(dāng)網(wǎng)絡(luò)擁有者重啟整個(gè)無線傳感器網(wǎng)絡(luò)時(shí),SINK節(jié)點(diǎn)將其廣播包中的ADV信息的版本字段的內(nèi)容修改為更新版本;各節(jié)點(diǎn)各自等時(shí)間間隔地廣播含有ADV字段的廣播包,若廣播包中的版本字段的內(nèi)容比接收到廣播包的節(jié)點(diǎn)的版本更新,則接收到廣播包的節(jié)點(diǎn)向廣播包的源地址對(duì)應(yīng)的節(jié)點(diǎn)發(fā)送請(qǐng)求信息,接收到請(qǐng)求信息的節(jié)點(diǎn)返回重啟命令及相關(guān)數(shù)據(jù)作為回應(yīng),收到回應(yīng)的節(jié)點(diǎn)將易失性關(guān)鍵數(shù)據(jù)存入“持久RAM”后開始重啟;完成重啟的節(jié)點(diǎn)從“持久RAM”中讀入易失性關(guān)鍵數(shù)據(jù)并設(shè)置節(jié)點(diǎn)的相應(yīng)參數(shù),完成重啟的節(jié)點(diǎn)將自身的版本信息和自身廣播包中的ADV信息的版本字段的內(nèi)容修改為更新的版本,之后節(jié)點(diǎn)進(jìn)入正常工作狀態(tài)。
【專利說明】一種可靠有效的無線傳感器網(wǎng)絡(luò)重啟方法【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于無線通信【技術(shù)領(lǐng)域】,涉及一種無線傳感器網(wǎng)絡(luò)可靠有效的重啟方法?!颈尘凹夹g(shù)】
[0002]隨著無線傳感器網(wǎng)絡(luò)在諸如生態(tài)監(jiān)管,行為習(xí)性監(jiān)控和基建設(shè)施保護(hù)等領(lǐng)域的應(yīng)用越來越廣泛,對(duì)無線傳感器網(wǎng)絡(luò)在無人值守情況下連續(xù)正常工作的要求越來越高。因而,無線傳感器網(wǎng)絡(luò)中軟件的可靠性也越發(fā)吸引研究人員的關(guān)注。
[0003]在現(xiàn)實(shí)應(yīng)用中,無線傳感器網(wǎng)絡(luò)會(huì)因?yàn)楦鞣N意想不到的原因而失效,這些原因包括:不可預(yù)測(cè)的環(huán)境因素,鏈路連接的動(dòng)態(tài)性,復(fù)雜的網(wǎng)絡(luò)交互等。在解決無線傳感器網(wǎng)絡(luò)失效的所有方法中,網(wǎng)絡(luò)重啟是一種有效的方法。然而,現(xiàn)有的網(wǎng)絡(luò)重啟方法并不能保證無線傳感器網(wǎng)絡(luò)可靠有效的重啟?,F(xiàn)實(shí)應(yīng)用中的大多數(shù)無線傳感器網(wǎng)絡(luò)依靠網(wǎng)絡(luò)泛洪來實(shí)施重啟,而這樣的泛洪方法很難保證整個(gè)網(wǎng)絡(luò)百分之百的可靠重啟。還有一些網(wǎng)絡(luò)重啟方法使用了分發(fā)協(xié)議。但是采用分發(fā)協(xié)議的方法在實(shí)際使用中并不是很有效。因?yàn)楣?jié)點(diǎn)在重啟后會(huì)丟失狀態(tài)信息,所以重啟后的節(jié)點(diǎn)不會(huì)繼續(xù)傳播重啟命令,也就很難保證整個(gè)無線傳感器網(wǎng)絡(luò)所有節(jié)點(diǎn)全部重啟。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的目的是提供一種可靠有效的無線傳感器網(wǎng)絡(luò)重啟方法。
[0005]為了達(dá)到上述目的,本發(fā)明采取的技術(shù)方案是:本發(fā)明無線傳感器網(wǎng)絡(luò)重啟方法如下:
當(dāng)網(wǎng)絡(luò)擁有者重啟整個(gè)無線傳感器網(wǎng)絡(luò)時(shí),發(fā)送重啟命令給SINK節(jié)點(diǎn)讓SINK節(jié)點(diǎn)將其維護(hù)的版本信息和廣播包中的ADV信息的版本字段的內(nèi)容修改為更新版本;
包括SINK節(jié)點(diǎn)在內(nèi)的 各節(jié)點(diǎn)各自等時(shí)間間隔地廣播含有ADV字段的廣播包,接收到廣播包的節(jié)點(diǎn)將廣播包中的版本字段的內(nèi)容與自身維護(hù)的版本信息進(jìn)行比較:如果廣播包中的版本字段的內(nèi)容比接收到廣播包的節(jié)點(diǎn)的版本更新,則接收到廣播包的節(jié)點(diǎn)向廣播包的源地址對(duì)應(yīng)的節(jié)點(diǎn)發(fā)送請(qǐng)求信息,接收到請(qǐng)求信息的節(jié)點(diǎn)返回重啟命令及相關(guān)數(shù)據(jù)作為回應(yīng),收到回應(yīng)的節(jié)點(diǎn)將易失性關(guān)鍵數(shù)據(jù)存入“持久RAM”后開始重啟;
完成重啟的節(jié)點(diǎn)從“持久RAM”中讀入之前存入的易失性關(guān)鍵數(shù)據(jù),根據(jù)讀入的易失性關(guān)鍵數(shù)據(jù)設(shè)置節(jié)點(diǎn)的相應(yīng)參數(shù),完成重啟的節(jié)點(diǎn)將自身的版本信息和自身廣播包中的ADV信息的版本字段的內(nèi)容修改為更新的版本,之后節(jié)點(diǎn)進(jìn)入正常工作狀態(tài)。
[0006]進(jìn)一步地,本發(fā)明所述“持久RAM”是指在RAM中緊鄰.bss塊的內(nèi)存上劃分出的重啟前后不會(huì)丟失數(shù)據(jù)的內(nèi)存區(qū)塊。
[0007]在現(xiàn)有技術(shù)中,實(shí)現(xiàn)網(wǎng)絡(luò)重啟主要是靠網(wǎng)絡(luò)泛洪的方式,但是網(wǎng)絡(luò)泛洪的方法不能保證網(wǎng)絡(luò)中所有節(jié)點(diǎn)全部重啟。這些泛洪方法多采用通過三次握手來建立連接的分發(fā)協(xié)議,僅僅依靠這些協(xié)議來實(shí)現(xiàn)重啟容易丟失節(jié)點(diǎn)重啟前的狀態(tài)信息等易失性關(guān)鍵數(shù)據(jù),使得重啟后的節(jié)點(diǎn)不會(huì)廣播新的重啟命令,從而導(dǎo)致整個(gè)網(wǎng)絡(luò)的重啟中斷??蛇x的存儲(chǔ)易失性關(guān)鍵數(shù)據(jù)的方案是將節(jié)點(diǎn)的狀態(tài)存儲(chǔ)在FLASH閃存上。但在FLASH閃存上進(jìn)行讀寫操作需要工作在相對(duì)較高的電壓下,否則不能保證讀寫結(jié)果的正確性。例如,TelosB節(jié)點(diǎn)的正常工作電壓是1.8伏,而進(jìn)行FLASH閃存讀寫的時(shí)候最低電壓要求是2.7伏。因此在能量比較寶貴的傳感器網(wǎng)絡(luò)節(jié)點(diǎn)上使用這項(xiàng)技術(shù)的實(shí)際可行性不高。
[0008]與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:本發(fā)明提供了一種可靠有效的無線傳感器網(wǎng)絡(luò)重啟方法。首先,本發(fā)明采用了一致的分發(fā)協(xié)議來可靠地傳播重啟命令,保證所有的節(jié)點(diǎn)在SINK節(jié)點(diǎn)發(fā)送重啟命令后都能收到這個(gè)命令。其次,本發(fā)明提供了一種在RAM上進(jìn)行非易失性存儲(chǔ)的方法,通過在RAM上開辟一塊內(nèi)存區(qū)域存儲(chǔ)易失性關(guān)鍵數(shù)據(jù),該內(nèi)存區(qū)域的特點(diǎn)是:只要節(jié)點(diǎn)不斷電,存儲(chǔ)于該區(qū)域的數(shù)據(jù)就不會(huì)丟失。此外,在工作狀態(tài)下內(nèi)存都是處于使用狀態(tài),所以使用開辟的這塊內(nèi)存區(qū)域不會(huì)額外消耗能量,而進(jìn)行FLASH閃存讀寫需要消耗額外的能量。
【專利附圖】
【附圖說明】
[0009]圖1是本發(fā)明涉及的內(nèi)存區(qū)域的基本結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0010]首先說明以下【具體實(shí)施方式】所涉及的各符號(hào)的含義。
[0011]SINK -無線傳感器網(wǎng)絡(luò)根節(jié)點(diǎn) N1-編號(hào)為i的節(jié)點(diǎn)
Nj -編號(hào)為j的節(jié)點(diǎn)
ADV -數(shù)據(jù)包中包含版本字段等信息的特定數(shù)據(jù)結(jié)構(gòu) 下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明做進(jìn)一步說明。
[0012]在無線傳感器網(wǎng)絡(luò)進(jìn)行重啟前,每個(gè)節(jié)點(diǎn)都處于正常工作狀態(tài)。處于正常工作狀態(tài)的每個(gè)節(jié)點(diǎn)除了會(huì)點(diǎn)對(duì)點(diǎn)的傳送數(shù)據(jù),還會(huì)周期性地廣播含有ADV信息的數(shù)據(jù)包來傳遞SINK節(jié)點(diǎn)的命令或者交換信息。每個(gè)節(jié)點(diǎn)會(huì)在自己的內(nèi)存中維護(hù)一個(gè)版本信息。每個(gè)節(jié)點(diǎn)發(fā)送的廣播包中ADV信息中的版本字段與自己維護(hù)的版本信息一致。每個(gè)節(jié)點(diǎn)通過接收到的廣播包中的相關(guān)信息(例如,新鏡像標(biāo)志位為真、修改廣播包間隔標(biāo)志位為真)來判斷是否有新的命令到達(dá),根據(jù)廣播包中的信息更改自己的狀態(tài)。節(jié)點(diǎn)發(fā)送廣播包的頻率可以根據(jù)需要來設(shè)定。廣播含有ADV字段的數(shù)據(jù)包的規(guī)則是:每個(gè)節(jié)點(diǎn)設(shè)置固定的時(shí)間間隔來廣播數(shù)據(jù)包。在兩次廣播的間隙,如果任意的某一節(jié)點(diǎn)Ni偵聽到其他節(jié)點(diǎn)Nj或者SINK廣播的含有ADV字段的數(shù)據(jù)包,并且節(jié)點(diǎn)Ni即將廣播的數(shù)據(jù)包的ADV字段的內(nèi)容與偵聽到的相同,則節(jié)點(diǎn)Ni取消該周期內(nèi)接下來的廣播數(shù)據(jù)包的發(fā)送,由此可以避免發(fā)送相同的廣播包,減少信道中數(shù)據(jù)包的數(shù)量。節(jié)點(diǎn)Ni繼而以取消發(fā)送的時(shí)間為起點(diǎn),以前述設(shè)置的時(shí)間間隔為周期,周期性地發(fā)送含有ADV字段的廣播包。
[0013]當(dāng)網(wǎng)絡(luò)擁有者重啟整個(gè)無線傳感器網(wǎng)絡(luò)時(shí),SINK節(jié)點(diǎn)在人工干預(yù)或者自主控制下更新自己的版本信息,并修改SINK的廣播包中的ADV信息的版本字段使其與版本信息保持—致。
[0014]在節(jié)點(diǎn)Ni接收到SINK節(jié)點(diǎn)發(fā)送的含有ADV字段的廣播包后,若節(jié)點(diǎn)Ni發(fā)現(xiàn)該廣播包的ADV信息中的版本字段比節(jié)點(diǎn)Ni自己維護(hù)的版本信息更新,則節(jié)點(diǎn)Ni準(zhǔn)備向SINK節(jié)點(diǎn)發(fā)送請(qǐng)求信息。此處“更新”的定義是:若網(wǎng)絡(luò)擁有者設(shè)定數(shù)字越大表明越新,則SINK節(jié)點(diǎn)廣播包的ADV信息中的版本字段中的數(shù)字比節(jié)點(diǎn)Ni維護(hù)的版本信息內(nèi)的數(shù)字更大表明SINK節(jié)點(diǎn)廣播包的ADV信息中的版本字段更新;若網(wǎng)絡(luò)擁有者設(shè)定數(shù)字越小表明越新,則SINK節(jié)點(diǎn)廣播包的ADV信息中的版本字段中的數(shù)字比節(jié)點(diǎn)Ni維護(hù)的版本信息內(nèi)的數(shù)字更小表明SINK節(jié)點(diǎn)廣播包的ADV信息中的版本字段更新。在節(jié)點(diǎn)Ni接收到SINK節(jié)點(diǎn)發(fā)送的含有ADV字段的廣播包后,若節(jié)點(diǎn)Ni發(fā)現(xiàn)該廣播包的ADV信息中的版本字段與節(jié)點(diǎn)Ni自己維護(hù)的版本信息相同。則節(jié)點(diǎn)Ni按照原來的工作方式繼續(xù)工作,不進(jìn)行重啟。需要說明的是,節(jié)點(diǎn)處于正常工作狀態(tài)時(shí)會(huì)周期性的發(fā)送含有ADV字段的廣播包。
[0015]節(jié)點(diǎn)Ni在向SINK節(jié)點(diǎn)發(fā)送請(qǐng)求信息之前偵聽到有鄰居節(jié)點(diǎn)發(fā)送了請(qǐng)求信息,則延遲自己的請(qǐng)求信息的發(fā)送,以免產(chǎn)生沖突;若沒有鄰居節(jié)點(diǎn)發(fā)送請(qǐng)求信息,則節(jié)點(diǎn)Ni向SINK節(jié)點(diǎn)發(fā)送請(qǐng)求信息。
[0016]接收到請(qǐng)求信息的SINK節(jié)點(diǎn),將重啟命令及相關(guān)數(shù)據(jù)放入數(shù)據(jù)包中作為回應(yīng)返回給節(jié)點(diǎn)Ni。此處的“相關(guān)數(shù)據(jù)”包括節(jié)點(diǎn)重啟后要使用的新的程序鏡像、節(jié)點(diǎn)重啟后要設(shè)置的狀態(tài)數(shù)據(jù)等,但不限于以上內(nèi)容,具體由網(wǎng)絡(luò)擁有者決定。節(jié)點(diǎn)Ni接收并緩存收到的數(shù)據(jù)。
[0017]圖1顯示了一個(gè)典型的程序的內(nèi)存結(jié)構(gòu)。RAM中包括.data區(qū)塊和.bss區(qū)塊。在程序開始執(zhí)行時(shí),會(huì)先執(zhí)行一個(gè)初始化器。初始化器會(huì)將.data區(qū)塊和.bss區(qū)塊的內(nèi)容初始化,而其他RAM區(qū)域的內(nèi)容則保持不變。在緊鄰.bss區(qū)塊的RAM中開辟一塊名為.pram的區(qū)塊,并在數(shù)據(jù)存儲(chǔ)階段將狀態(tài)數(shù)據(jù)存入.pram區(qū)塊,從而保證了節(jié)點(diǎn)重啟后,程序開始執(zhí)行時(shí),能得到重啟前的狀態(tài)數(shù)據(jù)。
[0018]參照?qǐng)D1,節(jié)點(diǎn)Ni在RAM中緊鄰.bss區(qū)塊的部分劃分一塊內(nèi)存區(qū)域,本實(shí)施例中取名為.pram,.pram即為“持久RAM”,由于RAM中此區(qū)域的數(shù)據(jù)在保證供電的情況下不會(huì)因節(jié)點(diǎn)重啟而改變,從而保證了重啟前后信息不丟失。然后節(jié)點(diǎn)Ni將易失性關(guān)鍵數(shù)據(jù)放入.pram,此處“易失性關(guān)鍵數(shù)據(jù)”包括但不限于節(jié)點(diǎn)重啟前后需要維持不變的狀態(tài)信息、節(jié)點(diǎn)Ni維護(hù)的版本信息、節(jié)點(diǎn)重啟后新的配置參數(shù)、表示節(jié)點(diǎn)本身已發(fā)包數(shù)目的包序列號(hào)、鄰節(jié)點(diǎn)表等。然后節(jié)點(diǎn)Ni重啟。
[0019]重啟完畢的節(jié)點(diǎn)Ni從.pram中讀入之前存入的易失性關(guān)鍵數(shù)據(jù),根據(jù)讀入的易失性關(guān)鍵數(shù)據(jù)設(shè)置相應(yīng)參數(shù),“相應(yīng)參數(shù)”包括表示節(jié)點(diǎn)本身已發(fā)包數(shù)目的包序列號(hào)、鄰節(jié)點(diǎn)表等信息。進(jìn)而節(jié)點(diǎn)Ni恢復(fù)維護(hù)的版本信息,將自己維護(hù)的版本信息修改成與接收到的SINK節(jié)點(diǎn)廣播包的ADV信息中的版本字段相一致的數(shù)字,從而將自身的版本信息和自身廣播包中的ADV信息的版本字段的內(nèi)容修改為更新的版本。之后節(jié)點(diǎn)Ni進(jìn)入正常工作狀態(tài)。
[0020]節(jié)點(diǎn)Nj接收到節(jié)點(diǎn)Ni發(fā)送的含有ADV字段的廣播包后,若節(jié)點(diǎn)Nj發(fā)現(xiàn)該廣播包的ADV信息中的版本字段比節(jié)點(diǎn)Nj自己維護(hù)的版本信息更新,則節(jié)點(diǎn)Nj準(zhǔn)備向SINK節(jié)點(diǎn)發(fā)送請(qǐng)求信息,接下來Nj與Ni的交互過程與前述Ni與SINK的交互過程相同,不再贅述;若節(jié)點(diǎn)Nj發(fā)現(xiàn)該廣播包的ADV信息中的版本字段與節(jié)點(diǎn)Nj自己維護(hù)的版本信息相同或者比Nj自己維護(hù)的版本信息更舊,則節(jié)點(diǎn)Nj按照原來的工作方式繼續(xù)工作,不進(jìn)行重啟。
【權(quán)利要求】
1.一種無線傳感器網(wǎng)絡(luò)重啟方法,其特征是: 當(dāng)網(wǎng)絡(luò)擁有者重啟整個(gè)無線傳感器網(wǎng)絡(luò)時(shí),發(fā)送重啟命令給SINK節(jié)點(diǎn)讓SINK節(jié)點(diǎn)將其維護(hù)的版本信息和廣播包中的ADV信息的版本字段的內(nèi)容修改為更新版本; 包括SINK節(jié)點(diǎn)在內(nèi)的各節(jié)點(diǎn)各自等時(shí)間間隔地廣播含有ADV字段的廣播包,接收到廣播包的節(jié)點(diǎn)將廣播包中的版本字段的內(nèi)容與自身維護(hù)的版本信息進(jìn)行比較:如果廣播包中的版本字段的內(nèi)容比接收到廣播包的節(jié)點(diǎn)的版本更新,則接收到廣播包的節(jié)點(diǎn)向廣播包的源地址對(duì)應(yīng)的節(jié)點(diǎn)發(fā)送請(qǐng)求信息,接收到請(qǐng)求信息的節(jié)點(diǎn)返回重啟命令及相關(guān)數(shù)據(jù)作為回應(yīng),收到回應(yīng)的節(jié)點(diǎn)將易失性關(guān)鍵數(shù)據(jù)存入“持久RAM”后開始重啟; 完成重啟的節(jié)點(diǎn)從“持久RAM”中讀入之前存入的易失性關(guān)鍵數(shù)據(jù),根據(jù)讀入的易失性關(guān)鍵數(shù)據(jù)設(shè)置節(jié)點(diǎn)的相應(yīng)參數(shù),完成重啟的節(jié)點(diǎn)將自身的版本信息和自身廣播包中的ADV信息的版本字段的內(nèi)容修改為更新的版本,之后節(jié)點(diǎn)進(jìn)入正常工作狀態(tài)。
2.根據(jù)權(quán)利要求1所述的無線傳感器網(wǎng)絡(luò)重啟方法,其特征在于:所述“持久RAM”是指在RAM中緊鄰.bss塊的內(nèi)存上劃分出的重啟前后不會(huì)丟失數(shù)據(jù)的內(nèi)存區(qū)塊。
【文檔編號(hào)】H04W24/04GK103428740SQ201310305267
【公開日】2013年12月4日 申請(qǐng)日期:2013年7月21日 優(yōu)先權(quán)日:2013年7月21日
【發(fā)明者】陳純, 卜佳俊, 董瑋, 張學(xué)鋒, 黃超 申請(qǐng)人:浙江大學(xué)