本發(fā)明涉及無線傳感器網(wǎng)絡(luò)領(lǐng)域,尤其涉及一種dsr協(xié)議的改進(jìn)算法。
背景技術(shù):
第一個(gè)小型網(wǎng)絡(luò)arpanet誕生以來,人類一直在享受著網(wǎng)絡(luò)技術(shù)帶來的各種便利。由于有線通信方式限制了應(yīng)用的范圍,使得無線網(wǎng)絡(luò)成為了信息技術(shù)科學(xué)較為活躍的研究領(lǐng)域。移動(dòng)自組網(wǎng)(mobileadhocnetworks,manet)是由若干無線移動(dòng)終端自組織起來的一種無中心的多跳無線通信網(wǎng)絡(luò),能夠在沒有基礎(chǔ)設(shè)施的區(qū)域內(nèi)幫助移動(dòng)用戶實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù),拓寬了移動(dòng)通信網(wǎng)絡(luò)的應(yīng)用范圍。對(duì)于不便部署通信設(shè)施的軍事戰(zhàn)場(chǎng)、緊急救災(zāi)、野外考察等應(yīng)急或臨時(shí)場(chǎng)合,移動(dòng)自組織網(wǎng)發(fā)揮著重要作用,因?yàn)樗俏ㄒ豢蛇x的通信支持方式。移動(dòng)自組網(wǎng)支持無線終端自由組網(wǎng),基本實(shí)現(xiàn)了人們隨時(shí)隨地自由通信的美好愿望,在軍事領(lǐng)域和民用領(lǐng)域都具有十分廣闊的應(yīng)用場(chǎng)景和技術(shù)優(yōu)勢(shì),這些都使移動(dòng)自組網(wǎng)成為了未來無線通信領(lǐng)域中極具吸引力的選擇。
但是,移動(dòng)自組網(wǎng)在獲得優(yōu)良特性的同時(shí),也增加了其網(wǎng)絡(luò)相關(guān)設(shè)計(jì)的復(fù)雜性。移動(dòng)自組網(wǎng)存在的移動(dòng)性強(qiáng)、無固定拓?fù)?、資源有限等問題有待研究和解決。其中,網(wǎng)絡(luò)層的路由協(xié)議問題最為關(guān)鍵。dsr是一種典型的按需自適應(yīng)路由協(xié)議,它的主要特點(diǎn)是采用了源路由方式,需要發(fā)送的數(shù)據(jù)分組會(huì)都包含源路由,并嚴(yán)格沿著源路由制定的路徑信息(節(jié)點(diǎn)地址序列),逐跳轉(zhuǎn)發(fā)至信宿。dsr協(xié)議還使用路由緩存技術(shù),節(jié)點(diǎn)通過旁聽或轉(zhuǎn)發(fā)等方式獲取最新的路由信息以備將來所需,提高了路由發(fā)現(xiàn)效率。
盡管dsr協(xié)議已經(jīng)具有比較好的性能,并且得到了廣泛的應(yīng)用和認(rèn)可,但依然存在不足之處,比如:dsr協(xié)議使用泛洪方式來搜索路由,每個(gè)節(jié)點(diǎn)都要參與路由請(qǐng)求分組的轉(zhuǎn)發(fā),引入了較大的控制開銷和資源浪費(fèi);每個(gè)數(shù)據(jù)分組都必須嵌入完整的路由信息,造成了額外的路由開銷;節(jié)點(diǎn)的任意移動(dòng)導(dǎo)致緩存中的過期路由影響源路由的準(zhǔn)確性,造成頻繁的路由失效。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題在于針對(duì)現(xiàn)有技術(shù)中每個(gè)節(jié)點(diǎn)都參與路由請(qǐng)求分組的轉(zhuǎn)發(fā),控制開銷和資源浪費(fèi)較大的缺陷,提供一種dsr協(xié)議的改進(jìn)算法。
本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:
本發(fā)明提供一種dsr協(xié)議的改進(jìn)算法,包括以下步驟:
s1、通過分簇算法將網(wǎng)絡(luò)節(jié)點(diǎn)分別劃分到互不相關(guān)的若干簇中,并引入標(biāo)識(shí)機(jī)制,每個(gè)簇在形成時(shí)分配一個(gè)唯一的標(biāo)識(shí);簇標(biāo)識(shí)由簇首節(jié)點(diǎn)id構(gòu)成,由簇首節(jié)點(diǎn)產(chǎn)生,并通過廣播消息在簇內(nèi)傳遞,同一簇中的所有節(jié)點(diǎn)具有相同的簇標(biāo)識(shí);
s2、當(dāng)網(wǎng)絡(luò)節(jié)點(diǎn)中的源節(jié)點(diǎn)與目標(biāo)節(jié)點(diǎn)進(jìn)行通信時(shí),在源節(jié)點(diǎn)自身的路由緩存中檢查是否有到達(dá)該目標(biāo)節(jié)點(diǎn)的路由,若路由緩存中存在到達(dá)該目標(biāo)節(jié)點(diǎn)的有效路由,則建立路由進(jìn)行數(shù)據(jù)傳輸;否則向源節(jié)點(diǎn)的所有鄰居節(jié)點(diǎn)廣播rreq分組,啟動(dòng)路由發(fā)現(xiàn)過程;
s3、節(jié)點(diǎn)接收到rreq分組后,檢查rreq分組中包含的<scraddr,reqid>序列對(duì)是否存在于該節(jié)點(diǎn)所在的路由請(qǐng)求列表中,若存在,表明該節(jié)點(diǎn)已經(jīng)處理過該rreq分組,則直接丟棄;再檢查節(jié)點(diǎn)的簇標(biāo)識(shí)是否在rreq分組中路由列表記錄的其他簇標(biāo)識(shí)之前出現(xiàn)過,若出現(xiàn)過,則直接丟棄;否則啟動(dòng)目的節(jié)點(diǎn)檢查過程;
s4、檢查該節(jié)點(diǎn)是否為目的節(jié)點(diǎn),若是目的節(jié)點(diǎn),則路由請(qǐng)求成功,該節(jié)點(diǎn)產(chǎn)生一個(gè)rreq分組,包含從原rreq分組中拷貝的路由表,并刪除原rreq分組,然后沿著路由表中的反向路由到達(dá)源節(jié)點(diǎn),根據(jù)建立的路由進(jìn)行數(shù)據(jù)傳輸,同一簇中的多個(gè)節(jié)點(diǎn)協(xié)調(diào)工作將數(shù)據(jù)分組發(fā)送至路由指定的下一簇內(nèi)。
進(jìn)一步地,本發(fā)明的步驟s4中檢查節(jié)點(diǎn)是否為目的節(jié)點(diǎn)的方法還包括:若該節(jié)點(diǎn)不是目的節(jié)點(diǎn),判斷該節(jié)點(diǎn)是否為簇首或具有網(wǎng)關(guān)功能,若不是簇首且不具有網(wǎng)關(guān)功能,則直接丟棄該節(jié)點(diǎn);若是簇首或具有網(wǎng)關(guān)功能,則將節(jié)點(diǎn)簇標(biāo)識(shí)記錄到rreq分組中的路由列表中,并繼續(xù)廣播更新后的路由請(qǐng)求分組。
進(jìn)一步地,本發(fā)明的步驟s2中的路由發(fā)現(xiàn)過程只在骨干網(wǎng)絡(luò)中進(jìn)行,獲取的源路由由簇標(biāo)識(shí)序列組成,同一簇中的節(jié)點(diǎn)能夠協(xié)同將數(shù)據(jù)分組發(fā)送至源路由指定的下一個(gè)簇內(nèi)。
進(jìn)一步地,本發(fā)明的算法還包括對(duì)簇成員節(jié)點(diǎn)進(jìn)行維護(hù)的方法:
節(jié)點(diǎn)通過交互周期性的hello消息,利用從中提取的信息來更新和維護(hù)簇成員節(jié)點(diǎn):
節(jié)點(diǎn)在連續(xù)兩個(gè)hello-interval期間內(nèi)沒有收到鄰居節(jié)點(diǎn)發(fā)送的hello消息就認(rèn)為它們之間已經(jīng)中斷連接并刪除鄰居列表中對(duì)應(yīng)節(jié)點(diǎn)的相關(guān)信息,鄰居列表記錄了鄰居節(jié)點(diǎn)id、狀態(tài)和簇標(biāo)識(shí)的數(shù)據(jù)結(jié)構(gòu);
當(dāng)簇成員在規(guī)定時(shí)間內(nèi)接收不到簇首發(fā)來的消息時(shí),則其狀態(tài)轉(zhuǎn)換為未定狀態(tài)繼而重新對(duì)其進(jìn)行分配;
簇首在移動(dòng)過程中,當(dāng)它檢測(cè)到與某個(gè)鄰簇完全失去連接后,就會(huì)發(fā)送狀態(tài)更新列表給其簇成員以試圖放棄簇首角色,然后等待簇成員回復(fù)以確認(rèn)角色的替換,并由合適的簇成員替代其簇首角色,否則保持當(dāng)前狀態(tài)不變;
在簇首變更成功的情況下,新簇首保持原有簇標(biāo)識(shí)不變,進(jìn)而保持分簇網(wǎng)絡(luò)的穩(wěn)定性。
進(jìn)一步地,本發(fā)明的選取新簇首過程中使用的標(biāo)準(zhǔn)具體為:
標(biāo)準(zhǔn)一:從簇成員節(jié)點(diǎn)中選取可連接的鄰簇個(gè)數(shù)最多的節(jié)點(diǎn),并且被選取的節(jié)點(diǎn)所能連接到的鄰簇的數(shù)目應(yīng)該多于當(dāng)前的簇首;
標(biāo)準(zhǔn)二:如果有多個(gè)滿足標(biāo)準(zhǔn)一的簇成員節(jié)點(diǎn),則從中選擇一個(gè)鄰節(jié)點(diǎn)數(shù)目最多的節(jié)點(diǎn)。
進(jìn)一步地,本發(fā)明的算法還包括對(duì)網(wǎng)關(guān)列表進(jìn)行更新的方法,具體為:
節(jié)點(diǎn)通過交互周期性的hello消息,利用從中提取的信息來更新和維護(hù)網(wǎng)關(guān)列表;
節(jié)點(diǎn)x接收到hello消息后,首先檢查鄰居列表中是否已經(jīng)記錄了hello消息中攜帶的鄰節(jié)點(diǎn)信息;其次,根據(jù)鄰節(jié)點(diǎn)簇標(biāo)識(shí)來確定是否更新節(jié)點(diǎn)的簇鄰接列表x.ccl和網(wǎng)關(guān)列表x.gwl;最后,通過hello消息查詢鄰節(jié)點(diǎn)的簇鄰接列表hello.ccl表來確定是否更新節(jié)點(diǎn)的網(wǎng)關(guān)列表x.gwl;
其中,網(wǎng)關(guān)包括屬于不同簇卻彼此位于通信范圍之內(nèi)的節(jié)點(diǎn),用于相鄰簇之間的通信;網(wǎng)關(guān)列表記錄了節(jié)點(diǎn)可以連接到的鄰簇的簇標(biāo)識(shí)、連接指定領(lǐng)簇所要經(jīng)過的網(wǎng)關(guān)節(jié)點(diǎn)的id及其標(biāo)識(shí)的數(shù)據(jù)結(jié)構(gòu),且每個(gè)節(jié)點(diǎn)都維護(hù)著一個(gè)網(wǎng)關(guān)列表。
進(jìn)一步地,本發(fā)明的算法還包括對(duì)網(wǎng)關(guān)列表進(jìn)行更新的方法,具體為:
節(jié)點(diǎn)通過交互周期性的hello消息,利用從中提取的信息來更新和維護(hù)網(wǎng)關(guān)列表;節(jié)點(diǎn)x接收到hello消息后,首先檢查鄰居列表中是否已經(jīng)記錄了hello消息中攜帶的鄰節(jié)點(diǎn)信息;其次,根據(jù)鄰節(jié)點(diǎn)簇標(biāo)識(shí)來確定是否更新節(jié)點(diǎn)的簇鄰接列表x.ccl和網(wǎng)關(guān)列表x.gwl;最后,通過hello消息查詢鄰節(jié)點(diǎn)的簇鄰接列表hello.ccl表來確定是否更新節(jié)點(diǎn)的網(wǎng)關(guān)列表x.gwl。
進(jìn)一步地,本發(fā)明的步驟s4中數(shù)據(jù)傳輸?shù)姆椒ň唧w為:
每個(gè)數(shù)據(jù)分組都攜帶簇標(biāo)識(shí)序列構(gòu)成的源路由來引導(dǎo)數(shù)據(jù)分組的傳輸,簇標(biāo)識(shí)路由用于確定數(shù)據(jù)分組從源節(jié)點(diǎn)到達(dá)目的節(jié)點(diǎn)所需依次經(jīng)過的簇,節(jié)點(diǎn)先根據(jù)其網(wǎng)關(guān)列表和分組攜帶的標(biāo)識(shí)路由來確定下一個(gè)合適的轉(zhuǎn)發(fā)節(jié)點(diǎn),數(shù)據(jù)傳輸時(shí),若節(jié)點(diǎn)網(wǎng)關(guān)列表中有多個(gè)到達(dá)鄰簇的轉(zhuǎn)發(fā)節(jié)點(diǎn)時(shí),根據(jù)以下優(yōu)先級(jí)進(jìn)行選擇:
優(yōu)先級(jí)一:優(yōu)先選擇簇標(biāo)識(shí)指定鄰簇中的節(jié)點(diǎn)作為下一跳節(jié)點(diǎn);
優(yōu)先級(jí)二:若網(wǎng)關(guān)列表中仍有至少兩個(gè)滿足優(yōu)先級(jí)一的節(jié)點(diǎn),則從中選擇id最小的節(jié)點(diǎn)作為下一跳節(jié)點(diǎn)。
進(jìn)一步地,本發(fā)明的算法還包括對(duì)路由進(jìn)行維護(hù)的方法,具體為:
節(jié)點(diǎn)根據(jù)本地網(wǎng)關(guān)列表和數(shù)據(jù)分組中的簇標(biāo)識(shí)序列,重新確定另外一個(gè)合適的轉(zhuǎn)發(fā)節(jié)點(diǎn),即找到一條新的鏈路進(jìn)行替代;
若不存在符合條件的其他節(jié)點(diǎn),且當(dāng)前節(jié)點(diǎn)不為簇成員,則將數(shù)據(jù)分組發(fā)送其簇首,并由簇首尋找其他滿足要求的節(jié)點(diǎn),負(fù)責(zé)將數(shù)據(jù)分組傳輸?shù)较乱淮兀?/p>
否則,說明相鄰簇之間的鏈接全部斷開,并發(fā)送路由錯(cuò)誤分組rerr給源節(jié)點(diǎn)以通知其路由失效情況;源節(jié)點(diǎn)收到后,從其路由緩存中刪除相應(yīng)的路由,并通過查詢其路由緩存來確定是否需要重啟路由發(fā)現(xiàn)過程。
本發(fā)明產(chǎn)生的有益效果是:本發(fā)明的dsr協(xié)議的改進(jìn)算法,通過將網(wǎng)絡(luò)劃分為簇,路由發(fā)現(xiàn)僅在虛擬骨干網(wǎng)中進(jìn)行,減少了不必要節(jié)點(diǎn)對(duì)路由請(qǐng)求分組轉(zhuǎn)發(fā),提高了泛洪效率;同時(shí),路由發(fā)現(xiàn)所獲取的源路由只記錄簇標(biāo)識(shí)序列,減少了路由尺寸,提高了協(xié)議的擴(kuò)展性;能夠間接地提供多條節(jié)點(diǎn)路徑,提高了路由的可靠性;分簇結(jié)構(gòu)提高了網(wǎng)絡(luò)的聯(lián)通性,相鄰簇之間存在多條連接,當(dāng)檢測(cè)到某一條鏈路斷開時(shí),可以利用冗余鏈路進(jìn)行局部修補(bǔ),提高了數(shù)據(jù)分組投遞率,減少了重新調(diào)用路由發(fā)現(xiàn)過程的次數(shù)。
附圖說明
下面將結(jié)合附圖及實(shí)施例對(duì)本發(fā)明作進(jìn)一步說明,附圖中:
圖1是本發(fā)明實(shí)施例的路由過程流程圖;
圖2是本發(fā)明實(shí)施例的網(wǎng)關(guān)列表更新算法流程圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
如圖1所示,本發(fā)明實(shí)施例的dsr協(xié)議的改進(jìn)算法,包括以下步驟:
s1、通過分簇算法將網(wǎng)絡(luò)節(jié)點(diǎn)分別劃分到互不相關(guān)的若干簇中,并引入標(biāo)識(shí)機(jī)制,每個(gè)簇在形成時(shí)分配一個(gè)唯一的標(biāo)識(shí);
s2、當(dāng)網(wǎng)絡(luò)節(jié)點(diǎn)中的源節(jié)點(diǎn)與目標(biāo)節(jié)點(diǎn)進(jìn)行通信時(shí),在源節(jié)點(diǎn)自身的路由緩存中檢查是否有到達(dá)該目標(biāo)節(jié)點(diǎn)的路由,若路由緩存中存在到達(dá)該目標(biāo)節(jié)點(diǎn)的有效路由,則建立路由進(jìn)行數(shù)據(jù)傳輸;否則向源節(jié)點(diǎn)的所有鄰居節(jié)點(diǎn)廣播rreq分組,啟動(dòng)路由發(fā)現(xiàn)過程;
s3、節(jié)點(diǎn)接收到rreq分組后,檢查rreq分組中包含的<scraddr,reqid>序列對(duì)是否存在于該節(jié)點(diǎn)所在的路由請(qǐng)求列表中,若存在,表明該節(jié)點(diǎn)已經(jīng)處理過該rreq分組,則直接丟棄;再檢查節(jié)點(diǎn)的簇標(biāo)識(shí)是否在rreq分組中路由列表記錄的其他簇標(biāo)識(shí)之前出現(xiàn)過,若出現(xiàn)過,則直接丟棄;否則啟動(dòng)目的節(jié)點(diǎn)檢查過程;
s4、檢查該節(jié)點(diǎn)是否為目的節(jié)點(diǎn),若是目的節(jié)點(diǎn),則路由請(qǐng)求成功,該節(jié)點(diǎn)產(chǎn)生一個(gè)rreq分組,包含從原rreq分組中拷貝的路由表,并刪除原rreq分組,然后沿著路由表中的反向路由到達(dá)源節(jié)點(diǎn),根據(jù)建立的路由進(jìn)行數(shù)據(jù)傳輸,同一簇中的多個(gè)節(jié)點(diǎn)協(xié)調(diào)工作將數(shù)據(jù)分組發(fā)送至路由指定的下一簇內(nèi)。
本發(fā)明實(shí)施例針對(duì)dsr協(xié)議存在的問題,結(jié)合分簇思想提出了一種改進(jìn)方案:在dsr協(xié)議基礎(chǔ)上,使用分簇算法將網(wǎng)絡(luò)節(jié)點(diǎn)分別劃分到互不相交的若干簇中,并且引入標(biāo)識(shí)機(jī)制,每個(gè)簇在形成時(shí)被分配一個(gè)唯一的標(biāo)識(shí),路由發(fā)現(xiàn)過程只在骨干網(wǎng)絡(luò)中進(jìn)行,獲取的源路由由簇標(biāo)識(shí)序列組成,同一簇中的節(jié)點(diǎn)能夠協(xié)同將數(shù)據(jù)分組發(fā)送至源路由指定的下一個(gè)簇內(nèi)。
每個(gè)簇在創(chuàng)建時(shí)被賦予了唯一的標(biāo)識(shí),簇標(biāo)識(shí)由簇首節(jié)點(diǎn)id構(gòu)成,由簇首節(jié)點(diǎn)產(chǎn)生,并通過廣播消息在簇內(nèi)傳遞,同一簇中的所有節(jié)點(diǎn)具有相同的簇標(biāo)識(shí)。網(wǎng)關(guān)為屬于不同簇卻彼此位于通信范圍之內(nèi)的節(jié)點(diǎn),用于相鄰簇之間的通信。
gatewaylist,gwl記錄了節(jié)點(diǎn)可以連接到的鄰簇的簇標(biāo)識(shí)、連接指定領(lǐng)簇所要經(jīng)過的網(wǎng)關(guān)節(jié)點(diǎn)的id及其標(biāo)識(shí)的數(shù)據(jù)結(jié)構(gòu),且每個(gè)節(jié)點(diǎn)i都維護(hù)著一個(gè)網(wǎng)關(guān)列表i.gwl。
在簇的維護(hù)方面:使用新的標(biāo)準(zhǔn)
標(biāo)準(zhǔn)一:從簇成員節(jié)點(diǎn)中選取可連接的鄰簇個(gè)數(shù)最多的節(jié)點(diǎn),并且被選取的節(jié)點(diǎn)所能連接到的鄰簇個(gè)數(shù)最多的節(jié)點(diǎn),并且被選取的節(jié)點(diǎn)所能連接到的鄰簇的數(shù)目應(yīng)該多于當(dāng)前的簇首。
標(biāo)準(zhǔn)二:如果有多個(gè)滿足標(biāo)準(zhǔn)標(biāo)準(zhǔn)一的簇成員節(jié)點(diǎn),則從中選擇一個(gè)鄰節(jié)點(diǎn)數(shù)目最多的節(jié)點(diǎn)。
改進(jìn)方案規(guī)定,節(jié)點(diǎn)在連續(xù)兩個(gè)hello-interval期間內(nèi)沒有收到鄰居節(jié)點(diǎn)發(fā)送的hello消息就認(rèn)為它們之間已經(jīng)中斷連接并刪除鄰居列表(neighborlist,nl記錄了鄰居節(jié)點(diǎn)id、狀態(tài)和簇標(biāo)識(shí)的數(shù)據(jù)結(jié)構(gòu))中對(duì)應(yīng)節(jié)點(diǎn)的相關(guān)信息。當(dāng)簇成員在規(guī)定時(shí)間內(nèi)接收不到簇首發(fā)來的消息時(shí),則其狀態(tài)轉(zhuǎn)換為未定狀態(tài)繼而重新對(duì)其進(jìn)行分配。簇首在移動(dòng)過程中,當(dāng)它檢測(cè)到與某個(gè)鄰簇完全失去連接后,就會(huì)發(fā)送狀態(tài)更新列表(包括簇鄰接列表和網(wǎng)絡(luò)列表)給其簇成員以試圖放棄簇首角色然后等待簇成員回復(fù)以確認(rèn)角色的替換,并由合適的簇成員替代其簇首角色,否則保持當(dāng)前狀態(tài)不變。在簇首變更成功的情況下,新簇首保持原有簇標(biāo)識(shí)不變,進(jìn)而保持分簇網(wǎng)絡(luò)的穩(wěn)定性。
在網(wǎng)關(guān)列表更新方面:
如圖2所示,節(jié)點(diǎn)通過交互周期性的hello消息,利用從中提取的信息來更新和維護(hù)網(wǎng)關(guān)列表。節(jié)點(diǎn)x接收到hello消息后,首先檢查鄰居列表中是否已經(jīng)記錄了hello消息中攜帶的鄰節(jié)點(diǎn)信息。其次,根據(jù)鄰節(jié)點(diǎn)簇標(biāo)識(shí)來確定是否更新節(jié)點(diǎn)的簇鄰接列表x.ccl和網(wǎng)關(guān)列表x.gwl。最后,通過hello消息查詢鄰節(jié)點(diǎn)的簇鄰接列表hello.ccl表來確定是否更新節(jié)點(diǎn)的網(wǎng)關(guān)列表x.gwl。
在路由發(fā)現(xiàn)過程方面:
節(jié)點(diǎn)在接收到rreq分組后,首先檢查rreq分組中包含的<scraddr,reqid>序列對(duì)是否存在于該節(jié)點(diǎn)所在的路由請(qǐng)求列表中,如果存在,表明該節(jié)點(diǎn)已經(jīng)處理過該rreq分組,則直接丟棄,不做任何處理。其次,再檢查節(jié)點(diǎn)的簇標(biāo)識(shí)是否在rreq分組中路由列表記錄的其他簇標(biāo)識(shí)之前出現(xiàn)過,如果出現(xiàn)過,則直接丟棄。然后檢查自己是否為目的節(jié)點(diǎn),如果是,則路由請(qǐng)求成功,節(jié)點(diǎn)產(chǎn)生一個(gè)rreq分組,它包含從rreq拷貝的路由表,并刪除rreq分組,然后沿著路由表中的反向路由到達(dá)源節(jié)點(diǎn);否則,如果該節(jié)點(diǎn)是簇首或具有網(wǎng)關(guān)功能,將節(jié)點(diǎn)簇標(biāo)識(shí)記錄到rreq分組中的路由列表中,并繼續(xù)廣播更新后的路由請(qǐng)求分組。
在數(shù)據(jù)傳輸方面:
每個(gè)數(shù)據(jù)分組都會(huì)攜帶簇標(biāo)識(shí)序列構(gòu)成的源路由來引導(dǎo)數(shù)據(jù)分組的傳輸。由于簇標(biāo)識(shí)路由只能確定數(shù)據(jù)分組從源節(jié)點(diǎn)到達(dá)目的節(jié)點(diǎn)所需依次經(jīng)過的簇,節(jié)點(diǎn)必須先根據(jù)其網(wǎng)關(guān)列表和分組攜帶的標(biāo)識(shí)路由來確定下一個(gè)合適的轉(zhuǎn)發(fā)節(jié)點(diǎn)。數(shù)據(jù)傳輸時(shí),若節(jié)點(diǎn)網(wǎng)關(guān)列表中有多個(gè)到達(dá)鄰簇的轉(zhuǎn)發(fā)節(jié)點(diǎn)時(shí),根據(jù)下述優(yōu)先級(jí)進(jìn)行選擇:
優(yōu)先級(jí)一:優(yōu)先選擇簇標(biāo)識(shí)指定鄰簇中的節(jié)點(diǎn)作為下一跳節(jié)點(diǎn);
優(yōu)先級(jí)二:若網(wǎng)關(guān)列表中仍有至少兩個(gè)滿足優(yōu)先級(jí)一的節(jié)點(diǎn),則從中選擇id最小的節(jié)點(diǎn)作為下一跳節(jié)點(diǎn)。
在路由維護(hù)方面:
1、節(jié)點(diǎn)根據(jù)本地網(wǎng)關(guān)列表和數(shù)據(jù)分組中的簇標(biāo)識(shí)序列,重新確定另外一個(gè)合適的轉(zhuǎn)發(fā)節(jié)點(diǎn),即找到一條新的鏈路進(jìn)行替代。
2、若不存在符合條件的其他節(jié)點(diǎn),且當(dāng)前節(jié)點(diǎn)不為簇成員,則將數(shù)據(jù)分組發(fā)送其簇首,并由簇首尋找其他滿足要求的節(jié)點(diǎn),負(fù)責(zé)將數(shù)據(jù)分組傳輸?shù)较乱淮亍?/p>
3、否則,說明相鄰簇之間的鏈接全部斷開,并發(fā)送路由錯(cuò)誤分組rerr給源節(jié)點(diǎn)以通知其路由失效情況。源節(jié)點(diǎn)收到后,從其路由緩存中刪除相應(yīng)的路由,并通過查詢其路由緩存來確定是否需要重啟路由發(fā)現(xiàn)過程。
在本發(fā)明的另一個(gè)具體實(shí)施例中,實(shí)現(xiàn)該算法的步驟為:
step1、編寫otel腳本。通過otel腳本來完成網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)和業(yè)務(wù)模型參數(shù)的配置以及其他的輔助過程,建立協(xié)議代理(包括通信業(yè)務(wù)量模型的建立和節(jié)點(diǎn)的協(xié)議綁定),設(shè)置trace對(duì)象,以便保存整個(gè)模擬過程中每個(gè)步驟的數(shù)據(jù),并設(shè)定模擬仿真運(yùn)行的時(shí)間。
step2、對(duì)step1中編寫好的otel腳本,使用ns2解釋和執(zhí)行,并得到記錄了大量數(shù)據(jù)的trace文件。
step3、對(duì)step2中得到的trace文件,使用ns2中的gawk工具進(jìn)行處理分析,并得出有用的數(shù)據(jù)。
step4、對(duì)step3中得到的數(shù)據(jù),使用圖形繪制工具進(jìn)行繪圖處理,得出網(wǎng)絡(luò)的性能。
本發(fā)明相比傳統(tǒng)的dsr協(xié)議具有以下優(yōu)勢(shì):
路由發(fā)現(xiàn)過程:通過將網(wǎng)絡(luò)劃分為簇,路由發(fā)現(xiàn)僅在虛擬骨干網(wǎng)中進(jìn)行,減少了不必要節(jié)點(diǎn)對(duì)路由請(qǐng)求分組轉(zhuǎn)發(fā),提高了泛洪效率;同時(shí),路由發(fā)現(xiàn)所獲取的源路由只記錄簇標(biāo)識(shí)序列,減少了路由尺寸,提高了協(xié)議的擴(kuò)展性;能夠間接地提供多條節(jié)點(diǎn)路徑,提高了路由的可靠性。
路由維護(hù)過程:分簇結(jié)構(gòu)提高了網(wǎng)絡(luò)的聯(lián)通性,相鄰簇之間存在多條連接,當(dāng)檢測(cè)到某一條鏈路斷開時(shí),可以利用冗余鏈路進(jìn)行局部修補(bǔ),提高了數(shù)據(jù)分組投遞率,減少了重新調(diào)用路由發(fā)現(xiàn)過程的次數(shù)。
應(yīng)當(dāng)理解的是,對(duì)本領(lǐng)域普通技術(shù)人員來說,可以根據(jù)上述說明加以改進(jìn)或變換,而所有這些改進(jìn)和變換都應(yīng)屬于本發(fā)明所附權(quán)利要求的保護(hù)范圍。