本發(fā)明屬于通信技術(shù)領(lǐng)域,更進(jìn)一步涉及一種可靠組播路由方法,可應(yīng)用于無線自組織網(wǎng)絡(luò)中。
背景技術(shù):
無線自組織網(wǎng)絡(luò)不同于傳統(tǒng)的無線通信網(wǎng)絡(luò)技術(shù),它不需要固定設(shè)備來支持,并沒有基站和中心節(jié)點,每個節(jié)點即用戶終端自行組網(wǎng),當(dāng)需要進(jìn)行通信時,每個用戶節(jié)點都能進(jìn)行數(shù)據(jù)的發(fā)送或轉(zhuǎn)發(fā)。無線自組織網(wǎng)絡(luò)突破了傳統(tǒng)無線蜂窩網(wǎng)絡(luò)的地理局限性,能夠更加快速、便捷、高效地進(jìn)行部署,適用于一些緊急場合特殊的通信需要,如救災(zāi)和軍事用途等。
組播是一種一對多或者多對多的數(shù)據(jù)傳輸方式,相對于廣播和單播,組播提高了數(shù)據(jù)傳輸?shù)男?。在組播傳輸中,可靠性是一個很重要的指標(biāo),然而在無線自組網(wǎng)中,信道的不穩(wěn)定性和節(jié)點的移動性難免使得丟包率較高,這正是可靠組播需要解決的問題。
組播可靠性的含義是保證源節(jié)點發(fā)送的每一個分組均正確到達(dá)每個組播組成員。目前,無線自組網(wǎng)中的可靠組播協(xié)議大概分為基于自動請求重傳ARQ、基于前向糾錯FEC、基于閑聊Gossip和基于網(wǎng)絡(luò)編碼NC這幾種。但是這幾種可靠組播方法均有各自特定的應(yīng)用環(huán)境,且各自具有一些擴(kuò)展性、開銷、效率或者復(fù)雜性上的缺點?;谧詣诱埱笾貍鰽RQ和基于前向糾錯FEC的可靠組播協(xié)議開銷較大,基于閑聊Goss ip的可靠組播協(xié)議不能保證較高的分組投遞率,基于網(wǎng)絡(luò)編碼NC的可靠組播協(xié)議復(fù)雜性較高且分組接收延時較大。目前關(guān)于可靠組播的研究工作,很多都是將不同的可靠組播協(xié)議的特點相結(jié)合,以實現(xiàn)更好的適應(yīng)性和可靠性。
作者黃夢潔在其發(fā)表的論文“Ad Hoc網(wǎng)絡(luò)中基于協(xié)同通信的可靠組播丟失恢復(fù)技術(shù)”(《電子科技大學(xué)》,2010年)中將協(xié)同丟失恢復(fù)方法與網(wǎng)絡(luò)編碼相結(jié)合,提出了一種新的基于網(wǎng)絡(luò)編碼的協(xié)同可靠組播丟失恢復(fù)算法。協(xié)同通信的方法是通過丟失節(jié)點的所有一跳內(nèi)鄰居節(jié)點、上游節(jié)點和發(fā)送節(jié)點來協(xié)同幫助進(jìn)行丟失恢復(fù),避免了恢復(fù)期間個別節(jié)點的負(fù)荷,可將網(wǎng)絡(luò)中的丟失恢復(fù)負(fù)載分布到了整個網(wǎng)絡(luò),但是此方法效率較低,開銷較大。網(wǎng)絡(luò)編碼技術(shù)中節(jié)點將重傳的分組異或編碼然后進(jìn)行發(fā)送,可減少丟失分組的發(fā)送次數(shù),但是復(fù)雜度較高,可應(yīng)用的場景有限。
作者黃少煒在其發(fā)表的論文“Ad Hoc網(wǎng)絡(luò)下基于網(wǎng)絡(luò)編碼可靠組播技術(shù)”(《國防科學(xué)技術(shù)大學(xué)》,2011年)中提出了一種基于網(wǎng)絡(luò)編碼的可靠組播技術(shù),其不需要底層組播路由機(jī)制的支持,依靠閑聊機(jī)制完成組播分組的分發(fā)過程。該技術(shù)雖然可以很好地適應(yīng)由于節(jié)點快速移動而引起的網(wǎng)絡(luò)拓?fù)渥兓?,但是依然存在網(wǎng)絡(luò)編碼復(fù)雜度較高,應(yīng)用場景有限的不足。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于針對上述已有可靠組播技術(shù)的不足,提出一種無線自組織網(wǎng)絡(luò)中低開銷的可靠組播路由方法,以在提高可靠性的同時,降低協(xié)議的復(fù)雜度和開銷。
為了實現(xiàn)上述目的,本發(fā)明技術(shù)方案包括如下:
(1)網(wǎng)絡(luò)中的源節(jié)點將組播分組進(jìn)行緩存,并將分組封裝于可靠組播報文RM中進(jìn)行發(fā)送;
(2)對接收到的可靠組播報文RM進(jìn)行處理:
(2a)網(wǎng)絡(luò)中的其它節(jié)點接收可靠組播報文RM,并對報文中封裝的組播分組進(jìn)行緩存;
(2b)在規(guī)定的時間間隔后,接收到可靠組播報文RM的節(jié)點根據(jù)報文中的分組ID更新緩存中的丟失組播分組記錄;
(2c)接收到RM報文的節(jié)點判斷RM報文中是否有自己的丟失分組ID,若有,則執(zhí)行步驟(2d),若沒有,則執(zhí)行步驟(2e);
(2d)等待丟失分組,若在規(guī)定的時間間隔后仍未收到這些丟失分組,則將丟失分組ID封裝為組播分組恢復(fù)報文MMR并發(fā)送給發(fā)送可靠組播報文RM的節(jié)點;
(2e)判斷自己是否為可靠組播報文RM中組播分組所屬的組播組成員,若不是,則丟棄此RM報文,返回步驟(2a),否則,執(zhí)行步驟(2f);
(2f)判斷自己是否收到過此RM報文中的組播分組,若是,則丟棄此RM報文,否則,將此RM報文中的組播分組重新封裝為新的RM報文并發(fā)送,返回步驟(2a);
(3)發(fā)送組播分組恢復(fù)報文MMR:
(3a)網(wǎng)絡(luò)中的每個節(jié)點刷新緩存中的丟失組播分組記錄;
(3b)每個節(jié)點判斷自己緩存中的丟失組播分組記錄是否為空,若是,則返回步驟(3a),否則,執(zhí)行步驟(3c);
(3c)每個節(jié)點判斷自己是否長時間未與鄰居節(jié)點進(jìn)行報文的交互,若是,則執(zhí)行步驟(3d),否則,返回步驟(3a);
(3d)長時間未與鄰居節(jié)點進(jìn)行報文交互的節(jié)點在規(guī)定的時間間隔后將自己丟失的組播分組的ID封裝為組播分組恢復(fù)報文MMR進(jìn)行廣播發(fā)送,返回步驟(3a);
(4)對接收到的組播分組恢復(fù)報文MMR進(jìn)行處理:
(4a)網(wǎng)絡(luò)中的其它節(jié)點接收到組播分組恢復(fù)報文MMR,在規(guī)定的時間間隔后,根據(jù)報文中的分組ID更新緩存中的丟失組播分組記錄;
(4b)接收到組播分組恢復(fù)報文MMR的節(jié)點判斷MMR報文的接收地址是否為自己或廣播的地址,若不是,則丟棄報文,返回步驟(4a),否則,執(zhí)行步驟(4c);
(4c)接收到組播分組恢復(fù)報文MMR的節(jié)點判斷緩存中是否有發(fā)送MMR報文節(jié)點的丟失分組,若不是,則丟棄報文,返回步驟(4a),否則,執(zhí)行步驟(4d);
(4d)接收到組播分組恢復(fù)報文MMR的節(jié)點判斷MMR報文的接收地址是否為自己的地址,若不是,則執(zhí)行步驟(4e),否則,執(zhí)行步驟(4f);
(4e)接收到組播分組恢復(fù)報文MMR的節(jié)點在規(guī)定的時間間隔后,如果未檢測到鄰居節(jié)點給發(fā)送此MMR報文的節(jié)點發(fā)送了封裝其丟失組播分組的可靠組播報文RM,則將此丟失分組封裝于RM報文中進(jìn)行發(fā)送,返回步驟(4a);
(4f)接收到組播分組恢復(fù)報文MMR的節(jié)點判斷緩存中待回復(fù)組播分組記錄中是否有發(fā)送MMR報文的節(jié)點的丟失分組,若是,則丟棄此MMR報文,返回步驟(4a),否則,執(zhí)行步驟(4g);
(4g)接收到組播分組恢復(fù)報文MMR的節(jié)點在規(guī)定的時間間隔后,將發(fā)送此MMR報文節(jié)點的丟失分組封裝于可靠組播報文RM中進(jìn)行發(fā)送,返回步驟(4a)。
本發(fā)明與現(xiàn)有技術(shù)相比具有以下優(yōu)點:
第一,降低了復(fù)雜度和開銷。
本發(fā)明中只有可靠組播報文RM和組播分組恢復(fù)報文MMR這兩種報文類型,當(dāng)節(jié)點接收到鄰居節(jié)點發(fā)來的RM報文后,可根據(jù)報文中攜帶最近收到組播分組的ID知道該鄰居節(jié)點緩存中是否有自己丟失的組播分組,并可向鄰居節(jié)點請求重發(fā)分組;當(dāng)節(jié)點接收到鄰居節(jié)點發(fā)來的MMR報文后,可根據(jù)報文中攜帶丟失分組的ID知道該鄰居節(jié)點丟失了哪些組播分組,并將這些分組發(fā)送給該鄰居節(jié)點,所以節(jié)點之間不需要互相發(fā)送大量不同類型的報文來進(jìn)行丟失分組的尋找和恢復(fù),與現(xiàn)有技術(shù)相比降低了復(fù)雜度和開銷;
第二,減少了重復(fù)報文的交互次數(shù)。
本發(fā)明中的節(jié)點由于在每次發(fā)送可靠組播報文RM或組播分組恢復(fù)報文MMR之前,要經(jīng)過一段時間間隔后判斷是否可以不發(fā)送,這樣不僅避免了不必要的報文發(fā)送,而且減少了節(jié)點之間重復(fù)報文的交互次數(shù),與現(xiàn)有技術(shù)相比進(jìn)一步降低了開銷。
附圖說明
圖1是本發(fā)明的實現(xiàn)總流程圖;
圖2是本發(fā)明中組播分組ID的結(jié)構(gòu)示意圖;
圖3是本發(fā)明中可靠組播報文RM的結(jié)構(gòu)示意圖;
圖4是本發(fā)明中組播分組恢復(fù)報文MMR的結(jié)構(gòu)示意圖;
圖5是本發(fā)明中處理可靠組播報文RM的子流程圖;
圖6是本發(fā)明中發(fā)送組播分組恢復(fù)報文MMR的子流程圖;
圖7是本發(fā)明中處理組播分組恢復(fù)報文MMR的子流程圖。
具體實施方式
本發(fā)明的使用場景為無線自組織網(wǎng)絡(luò),組播組的建立和維護(hù)由按需距離矢量組播路由協(xié)議MAODV來完成,組播分組的分發(fā)和丟失組播分組的恢復(fù)由本發(fā)明來實現(xiàn)。
下面結(jié)合附圖,對本發(fā)明作進(jìn)一步的詳細(xì)描述。
參照圖1,本發(fā)明的實現(xiàn)步驟如下:
步驟1.網(wǎng)絡(luò)中的源節(jié)點將組播分組進(jìn)行緩存,并將分組封裝于可靠組播報文RM中進(jìn)行發(fā)送。
可靠組播報文RM中封裝待發(fā)送組播分組和最近收到組播分組的ID,其他節(jié)點接收到RM報文既可以緩存報文中封裝的組播分組,又可以知道發(fā)送報文的節(jié)點最近收到了哪些分組,從而利用這些組播分組的ID知道自己丟失哪些分組。
組播分組的ID用來區(qū)分不同的組播分組,其結(jié)構(gòu)如圖2所述,它包括組播分組的源節(jié)點地址、序號和組播地址。
可靠組播報文RM的結(jié)構(gòu)如圖3所述,它包括報文類型、最近收到的組播分組數(shù)n、最近收到的n個組播分組的ID、待發(fā)送組播分組的ID、報文發(fā)送節(jié)點地址、報文接收節(jié)點地址和待發(fā)送的組播分組。
步驟2.對接收到的可靠組播報文RM進(jìn)行處理:
參照圖5,本步驟的具體實現(xiàn)如下:
(2a)網(wǎng)絡(luò)中的其它節(jié)點接收可靠組播報文RM,并對報文中封裝的組播分組進(jìn)行緩存;
(2b)在規(guī)定的時間間隔后,接收到可靠組播報文RM的節(jié)點根據(jù)報文中的分組ID更新緩存中的丟失組播分組記錄;
所述的時間間隔服從均勻分布,取值區(qū)間是根據(jù)網(wǎng)絡(luò)中的平均丟包率和組播分組平均到達(dá)速率進(jìn)行設(shè)定,設(shè)定它的原因是組播分組可能不按順序到達(dá),所以不能收到RM報文就立刻更新丟失分組記錄。
接收到RM報文的節(jié)點根據(jù)報文更新緩存中的丟失組播分組記錄,按如下兩種情況進(jìn)行:
第一種情況是:接收到可靠組播報文RM的節(jié)點將攜帶發(fā)送RM報文節(jié)點最近收到組播分組的ID與自己緩存中的組播分組ID進(jìn)行對比,查看自己丟失了哪些分組,并將丟失的分組存入緩存中的丟失組播分組記錄中;
第二種情況是:若接收到可靠組播報文RM的節(jié)點為RM報文中組播分組所屬的組播組成員,則將組播分組的序號與自己記錄的發(fā)送RM報文的源節(jié)點的最大分組序號進(jìn)行對比,查看丟失了哪些分組,并將丟失的分組存入緩存中的丟失組播分組記錄中。
(2c)接收到RM報文的節(jié)點判斷RM報文中是否有自己的丟失分組ID,若有,則執(zhí)行步驟(2d),若沒有,則執(zhí)行步驟(2e);
(2d)等待丟失分組,若在規(guī)定的時間間隔后仍未收到這些丟失分組,則將丟失分組ID封裝為組播分組恢復(fù)報文MMR,并發(fā)送給發(fā)送可靠組播報文RM的節(jié)點;
所述的時間間隔服從均勻分布,取值區(qū)間是根據(jù)網(wǎng)絡(luò)中的平均丟包率和組播分組平均到達(dá)速率進(jìn)行設(shè)定,設(shè)定它的原因是分組可能不按順序到達(dá),所以等待一段時間再將丟失分組ID封裝于MMR報文進(jìn)行發(fā)送。
組播分組恢復(fù)報文MMR中封裝了丟失組播分組的ID,此時報文接收節(jié)點為發(fā)送RM報文的節(jié)點,當(dāng)此節(jié)點接收到MMR報文后,可根據(jù)報文中攜帶丟失分組的ID知道發(fā)送報文的節(jié)點丟失了哪些組播分組,并將分組發(fā)送給該節(jié)點。
組播分組恢復(fù)報文MMR的結(jié)構(gòu)如圖4所述,它包括報文類型、報文發(fā)送節(jié)點地址、報文接收節(jié)點地址、丟失的組播分組數(shù)n、丟失的n個組播分組的ID。
(2e)判斷自己是否為可靠組播報文RM中組播分組所屬的組播組成員,若不是,則丟棄此RM報文,返回步驟(2a),否則,執(zhí)行步驟(2f);
(2f)判斷自己是否收到過此RM報文中的組播分組,若有,則丟棄此RM報文,否則,將此RM報文中的組播分組重新封裝為新的RM報文并發(fā)送,返回步驟(2a);
所述將接收到的RM報文中的組播分組重新封裝為新的RM報文并發(fā)送,目的是轉(zhuǎn)發(fā)接收到的RM報文的組播分組,其轉(zhuǎn)發(fā)規(guī)則是:
若準(zhǔn)備轉(zhuǎn)發(fā)可靠組播報文RM的節(jié)點在組播組中為葉子節(jié)點,且發(fā)送RM報文的節(jié)點為自己的上游節(jié)點,則不轉(zhuǎn)發(fā);
若準(zhǔn)備轉(zhuǎn)發(fā)可靠組播報文RM的節(jié)點的下游節(jié)點數(shù)量大于2個,則在規(guī)定的時間間隔T1后檢測自己所有的上下游節(jié)點是否均轉(zhuǎn)發(fā)了接收到的RM報文中的組播分組,若是,則不轉(zhuǎn)發(fā),否則,將組播分組重新封裝為可靠組播報文RM進(jìn)行發(fā)送。時間間隔T1服從均勻分布,取值區(qū)間是根據(jù)網(wǎng)絡(luò)中的平均丟包率和組播分組平均到達(dá)速率進(jìn)行設(shè)定。
若準(zhǔn)備轉(zhuǎn)發(fā)可靠組播報文RM的節(jié)點的下游節(jié)點數(shù)量不大于2個,則在規(guī)定的時間間隔T2后檢測自己所有的上下游節(jié)點是否均轉(zhuǎn)發(fā)了接收到的RM報文中的組播分組,若是,則不轉(zhuǎn)發(fā),否則,將組播分組重新封裝為可靠組播報文RM進(jìn)行發(fā)送。時間間隔T2服從均勻分布,取值區(qū)間是根據(jù)網(wǎng)絡(luò)中的平均丟包率和組播分組平均到達(dá)速率進(jìn)行設(shè)定,且T2必須大于T1,既可使上下游節(jié)點數(shù)大于2個節(jié)點盡量優(yōu)先轉(zhuǎn)發(fā)組播分組,又可使上下游節(jié)點數(shù)不大于2個的節(jié)點晚一些轉(zhuǎn)發(fā)甚至不轉(zhuǎn)發(fā)組播分組,這樣可避免一些不必要的分組轉(zhuǎn)發(fā)。
步驟3.發(fā)送組播分組恢復(fù)報文MMR。
參照圖6,本步驟實現(xiàn)如下:
(3a)網(wǎng)絡(luò)中的每個節(jié)點刷新緩存中的丟失組播分組記錄:
網(wǎng)絡(luò)中的每個節(jié)點刷新丟失組播分組記錄,其刷新規(guī)則是:每個節(jié)點查看緩存中丟失組播分組記錄中的每一個組播分組所屬的組播組,若自己已經(jīng)退出這個分組所屬的組播組,則在丟失組播分組記錄中刪除這個組播分組;
(3b)每個節(jié)點判斷自己緩存中的丟失組播分組記錄是否為空,若是,則返回步驟(3a),否則,執(zhí)行步驟(3c);
(3c)每個節(jié)點判斷自己是否長時間未與鄰居節(jié)點進(jìn)行報文的交互,若是,則執(zhí)行步驟(3d),否則,返回步驟(3a);
(3d)長時間未與鄰居節(jié)點進(jìn)行報文交互的節(jié)點在規(guī)定的時間間隔后將自己丟失的組播分組的ID封裝為組播分組恢復(fù)報文MMR進(jìn)行廣播發(fā)送,返回步驟(3a),廣播發(fā)送MMR報文的目的是使所有鄰居節(jié)點均能收到該報文,鄰居節(jié)點接收到報文后,可根據(jù)報文中攜帶丟失分組的ID知道發(fā)送報文的節(jié)點丟失了哪些組播分組,并將分組發(fā)送給該節(jié)點。
所述的時間間隔服從均勻分布,取值區(qū)間是根據(jù)網(wǎng)絡(luò)中的平均丟包率和組播分組平均到達(dá)速率進(jìn)行設(shè)定,設(shè)定它的目的是防止多個節(jié)點在同一時間發(fā)送相同的MMR報文。
步驟4.對接收到的組播分組恢復(fù)報文MMR進(jìn)行處理:
參照圖7,本步驟實現(xiàn)方法如下:
(4a)網(wǎng)絡(luò)中的其它節(jié)點接收到組播分組恢復(fù)報文MMR,在規(guī)定的時間間隔后,根據(jù)報文中的分組ID更新緩存中的丟失組播分組記錄,即接收到MMR報文的節(jié)點將報文中攜帶丟失組播分組的ID與自己緩存中的組播分組ID進(jìn)行對比,查看自己丟失了哪些分組,并將自己丟失的分組存入緩存中的丟失組播分組記錄;該時間間隔服從均勻分布,取值區(qū)間是根據(jù)網(wǎng)絡(luò)中的平均丟包率和組播分組平均到達(dá)速率進(jìn)行設(shè)定,設(shè)定它的原因是組播分組可能不按順序到達(dá),所以不能收到MMR報文就立刻更新丟失分組記錄;
(4b)接收到組播分組恢復(fù)報文MMR的節(jié)點判斷MMR報文的接收地址是否為自己或廣播的地址,若不是,則丟棄報文,返回步驟(4a),否則,執(zhí)行步驟(4c);
(4c)接收到組播分組恢復(fù)報文MMR的節(jié)點判斷緩存中是否有發(fā)送MMR報文節(jié)點的丟失分組,若不是,則丟棄報文,返回步驟(4a),否則,執(zhí)行步驟(4d);
(4d)接收到組播分組恢復(fù)報文MMR的節(jié)點判斷MMR報文的接收地址是否為自己的地址,若不是,則執(zhí)行步驟(4e),否則,執(zhí)行步驟(4f);
(4e)接收到組播分組恢復(fù)報文MMR的節(jié)點在規(guī)定的時間間隔后,如果未檢測到鄰居節(jié)點給發(fā)送此MMR報文的節(jié)點發(fā)送了封裝其丟失組播分組的可靠組播報文RM,則將此丟失分組封裝于RM報文中進(jìn)行發(fā)送,返回步驟(4a);
所述的時間間隔服從均勻分布,取值區(qū)間是根據(jù)網(wǎng)絡(luò)中的平均丟包率和組播分組平均到達(dá)速率進(jìn)行設(shè)定,設(shè)定該時間間隔的目的是避免多個接收到MMR報文的節(jié)點在同一時間向同一節(jié)點發(fā)送封裝同一組播分組的RM報文;
(4f)接收到組播分組恢復(fù)報文MMR的節(jié)點,判斷緩存中待回復(fù)組播分組記錄中是否存放發(fā)送MMR報文的節(jié)點丟失分組,若是,則說明有鄰居節(jié)點也丟失了該分組且自己準(zhǔn)備發(fā)送封裝該丟失分組的RM報文給鄰居節(jié)點,丟棄接收到的MMR報文,返回步驟(4a),否則,執(zhí)行步驟(4g);
(4g)接收到組播分組恢復(fù)報文MMR的節(jié)點在規(guī)定的時間間隔后,將發(fā)送此MMR報文節(jié)點的丟失分組封裝于可靠組播報文RM中進(jìn)行發(fā)送,返回步驟(4a),該時間間隔服從均勻分布,取值區(qū)間是根據(jù)網(wǎng)絡(luò)中的平均丟包率和組播分組平均到達(dá)速率進(jìn)行設(shè)定,設(shè)定時間間隔的目的是避免短時間內(nèi)接收到MMR報文的節(jié)點多次發(fā)送封裝同一組播分組的可靠組播報文RM。
以上描述僅是本發(fā)明的一個具體實例,不構(gòu)成對本發(fā)明的任何限制,顯然對于本領(lǐng)域的專業(yè)人員來說,在了解了本發(fā)明內(nèi)容和原理后,都可能在不背離本發(fā)明原理、結(jié)構(gòu)的情況下,進(jìn)行形式和細(xì)節(jié)上的各種修正和改變,但是這些基于本發(fā)明思想的修正和改變?nèi)栽诒景l(fā)明的權(quán)利要求保護(hù)范圍之內(nèi)。