本發(fā)明涉及無線傳感器網絡技術領域,尤其涉及一種層次拓撲結構圖上的基于內容中心網絡的路由方法。
背景技術:
在現有的大規(guī)模無線傳感器自主網絡上的路由技術,主要有Zigbee,和RPL這兩種主流的標準和協(xié)議。Zigbee能組成的網絡雖然靈活,但是組網相對簡單,而且協(xié)議過于復雜,很難達到輕量級的實現,因為此原因,Zigbee在小規(guī)模網絡應用相對較多,而在大規(guī)模網絡中鮮有蹤跡。RPL是面向6LowPAN的路由組網協(xié)議,是目前收到廣泛接受的物聯(lián)網中的路由協(xié)議,其基本思想是通過構造以終端為根節(jié)點,構造樹形結構。根節(jié)點擁有整個網絡拓路結構。樹形網絡中的兩個節(jié)點的訪問依賴于根節(jié)點指導,在數據包中攜帶路由分發(fā)信息,以指導信息的轉發(fā)。
RPL路由思想針對傳感器網絡中的數據收集特點,充分利用了終端的強大計算能力,是一種比較實用的路由方法。但是在下行路由,即消息從根節(jié)點到分支中的目的節(jié)點,路由信息必須攜帶在消息中,當目的節(jié)點離終端較遠時,路由信息會很大,從而占據大量的協(xié)議負載空間,耗費大量能耗和計算資源,尤其在網絡內容訪問頻繁,消息數目較多,網絡規(guī)模較大時,該缺陷更為顯著。
此外,RPL中的消息通信是基于6LowPAN協(xié)議,即IPv6在物聯(lián)網中的延伸。該協(xié)議因為是繼承IP網絡的思路,相對與物聯(lián)網的輕量級要求,該協(xié)議特別復雜,其實現占用大量的空間資源,其運行更是耗費大量計算資源,從而在低能耗上有較大的缺陷,這也是6LowPAN協(xié)議目前也只是在小規(guī)模網絡,尤其是局限在家庭網絡中應用較多的原因。此外,因為下行路由中,消息必須要攜帶路由消息,則更會給應用6LowPAN協(xié)議來攜帶路由消息的方法帶來更多的負擔和消耗。
例如,中國專利103607412A公開了一種基于樹的內容中心網絡多個興趣包處理方法,具體步驟包括:(1)讀取興趣包內容名字:(2)建立內容名字樹:(3)合并內容名字樹中的單分支結點:(4)存儲內容名字樹中的結點:(5)發(fā)送壓縮興趣包:(6)解壓縮壓縮興趣包。該技術方案主要解決現有技術在內容中心網絡中發(fā)送多個興趣包的情形下,網絡資源利用率低,不適用于公共前綴較短或無公共前綴的情況,完全依賴代理服務器處理,導致網絡傳輸效率低、網絡負荷大的不足的問題,是可以在一定程度上,減輕網絡的負荷。
再例如,中國專利103179037A公開了基于內容的數據中心網絡的數據傳輸方法,其特征在于,是一種以內容數據網絡為基礎、以內容與位置混合式的路由策略、主機提供數據緩存的離線緩存策略、通過路由轉發(fā)表自學習來保證以路徑長短作為轉發(fā)依據的轉發(fā)策略的基于內容的數據中心網絡Content-CentricDatacenter Network,簡稱CCDN的數據傳輸方法,該技術方案使用以NDN(Named Data Network)為基礎的基于內容的路由和轉發(fā)策略??紤]到數據中心交換機的有限存儲資源和數據中心網絡拓撲結構的特點,我們采用Hybrid Content and Location路由策略,只需要存儲完整的PIT(Pending Interest Table)和部分FIB,保證了CCDN的組播特性和可擴展性。但是占用了大量的網絡資源,在低能耗上有較大的缺陷。
因此,物聯(lián)網中設備仍然受到能量和計算資源的約束限制,從而要求物聯(lián)網中的技術解決方案必須具備輕量級、低能耗等要求。然而,進一步如何組織傳感器網絡,并將網絡中感應到的數據高效的傳送到基站是一個急需解決的基本問題。
技術實現要素:
為克服現有技術中存在的物聯(lián)網中設備受到能量和計算資源的約束限制,且組織傳感器網絡,并將網絡中感應到的數據高效的傳送到基站的問題,本發(fā)明提供了一種在層次拓撲結構圖上的基于內容中心網絡的路由方法。
本發(fā)明采用的技術方案為:一種在層次拓撲結構圖上的基于內容中心網絡的路由方法,其創(chuàng)新點在于:包括以下步驟:
(1)在層次圖上,建立匯聚點上的路由信息,每個所述匯聚點維護兩條之內的節(jié)點可到達的路由信息,路由信息的建立主要運用“基于內容中心網絡的層次拓撲組網方法”來建立。
(2)采用CCN協(xié)議中的興趣和內容消息類型,以及PIT和FIB,實現網絡中任意兩節(jié)點之間的基于名字的路由轉發(fā)。
進一步地,步驟(1)中的建立方法具體如下:
每個傳感器節(jié)點都運行面向物聯(lián)網的輕量級CCN組件。
建立過程分兩個階段:
第一階段,應用CCN興趣消息構建層次圖。組網所需的消息均為興趣消息類型存在。有三種消息:
第一種是發(fā)現消息,該消息會攜帶自身節(jié)點的層次,層次值作為名字組件放置于該消息名字之后。如,該消息以“/ccn/discovery/“命名,則“/ccn/discovery/層次值/”為新的消息的名字;
第二種是確認消息,有唯一的命名,如,“/ccn/confirm/”, 確認消息中名字最后兩個名字組件分別為節(jié)點的父親節(jié)點ID和節(jié)點ID, 如包含v節(jié)點和v節(jié)點的父親節(jié)點的名字“/ccn/confirm/Parent(v)/v”。
第三種是撤銷消息,用于通知撤銷之前的父子關系。以名字命名這種消息,如“/ccn/revoke” 攜帶某個節(jié)點和該節(jié)點的父親節(jié)點信息,如“/ccn/revoke/v的父親節(jié)點ID/節(jié)點v”。
上述消息的端節(jié)點默認層次為0, 其他所有節(jié)點層次默認為無窮大。從終端節(jié)點開始,設置該終端節(jié)點層次為0, 然后向它的鄰居節(jié)點廣播發(fā)現消息。
對于每個傳感器節(jié)點,部署的CCN組件執(zhí)行以下消息驅動操作:
a.v節(jié)點收到從u發(fā)來的發(fā)現消息:解析該興趣包中名字最后的名字組件,提取出消息源的層次值level(u)。
如果level(u)=無窮大&(and)level(u)+ 1 < level(v), //即第一次更新層次;
設置level(v)= level(u)+ 1;設置v的父親節(jié)點為u,即Parent(v)= u;
發(fā)回給u確認消息,消息中包含v節(jié)點的父親節(jié)點u。
如果level(u)!=無窮大 & level(u)+ 1 < level(v), //非第一次更新層次;
發(fā)回給Parent(v)撤銷消息,消息中包含Parent(v)和v節(jié)點信息。
設置level(v)= level(u)+ 1;設置v的父親節(jié)點為u,即Parent(v)= u;
發(fā)回給u確認消息,消息名字中包含Parent(v)和v節(jié)點。
b.v節(jié)點收到u發(fā)來的確認消息:解析該興趣包中名字最后的名字組件,提取出消息源的節(jié)點的父親值。
如果確認消息名字信息中包含的父親節(jié)點值=節(jié)點v,則設置節(jié)點u為v的子節(jié)點,即Children(v)=u;
轉發(fā)該確認消息給v的父親節(jié)點。
c.v節(jié)點收到u發(fā)來的撤銷消息:解析該興趣包中名字最后的名字組件,提取出消息源的節(jié)點的父親值。
如果該撤銷消息名字信息中包含的父親節(jié)點值=節(jié)點v,則撤銷之前關于u節(jié)點的父親值設置。
轉發(fā)該確認消息給v的父親節(jié)點。
第二階段,構建層次鄰居信息,設置匯聚點。第一階段會得到樹形層次圖,在第一階段基礎上,從葉子節(jié)點開始構建層次信息,設置匯聚點。
該階段組網所需的消息均為興趣消息類型存在。定義一種完成興趣信息(簡稱完成消息),該信息名字為“/ccn/complete/level(u)/u/parent(u)”,并且名字字段最后包含節(jié)點的層次信息、節(jié)點ID和節(jié)點的父親節(jié)點。
從葉子節(jié)點(層次圖上沒有子女的節(jié)點)開始,發(fā)送完成信息給父親節(jié)點。節(jié)點收到完成信息做以下消息驅動動作。
節(jié)點執(zhí)行以下消息驅動:
v節(jié)點收到來自u完成消息后:解析該興趣包中的名字組件,提取出消息源的層次值level(s),節(jié)點s,節(jié)點s的父親節(jié)點Parent(s),
發(fā)送給Parent(v)完成消息。//發(fā)送關于自己的路由信息;
如果v節(jié)點的層次level(v)% 2 != 0: //如果該節(jié)點不是屬于每隔2層的節(jié)點;
則轉來自u的完成消息到v的父親節(jié)點Parent(v) //轉發(fā)下級發(fā)來的路由信息;
如果v節(jié)點的層次level(v)% 2 = 0: //如果該節(jié)點是屬于每隔2層的節(jié)點,且如果0<level(s)-level(v)<= 2,把節(jié)點s和其Parent(s)信息放入路由表。
在此基礎上,所述節(jié)點包括根節(jié)點A和根節(jié)點之外的任意節(jié)點v。
在此基礎上,所述根節(jié)點R發(fā)興趣消息,興趣消息以名字來表示這次訪問,傳輸過程中將路由信息添作為名字組件接在已有名字之后。
在此基礎上,所述對于除根節(jié)點R之外的任意節(jié)點v,收到路由消息后作出相應的消息驅動動作。
在此基礎上,所述作出相應的消息驅動動作包括:
節(jié)點v收到興趣消息:CCN組件解析該興趣消息,提取消息名字和路由信息,CCN組件自動添加該興趣消息到PIT表中,并建立對應的FIB表;
節(jié)點v收到內容消息:CCN組件解析該內容消息,根據FIB表,轉發(fā)該內容信息。
在此基礎上,若所述興趣消息或內容消息的目的地是節(jié)點v,則準備對應的內容消息,并根據PIT表中所指興趣消息的源節(jié)點ID, 發(fā)送內容消息;若該興趣消息或內容消息目的地是不是節(jié)點v,則轉發(fā)給其他節(jié)點。
在此基礎上,所述興趣消息或內容消息目的地是不是節(jié)點v,若該消息沒有攜帶路由信息,則轉發(fā)該消息給v的父親節(jié)點;若該消息攜帶路由信息,查看節(jié)點存儲的路由信息,轉發(fā)到對應的下一級節(jié)點。
在此基礎上,所述根節(jié)點R,收到消息后作出相應的消息驅動反應,具體如下:
①收到興趣消息:解析該興趣消息,CCN組件解析該興趣消息,得到目的節(jié)點,并提取消息名字;根據整體路由信息,確定到目的節(jié)點的路由信息,并添加到該消息的已有名字后面,并轉發(fā)該興趣消息到對應的分支;
收到內容消息:根節(jié)點R收到內容消息則直接根據目的節(jié)點信息,轉發(fā)該內容消息到對應的分支。
在此基礎上,所述步驟①中添加的路由信息只包含途徑的骨干節(jié)點ID。
與現有技術相比,本發(fā)明的有益效果是:
(1)本發(fā)明提出一種在層次拓撲結構圖上的基于內容中心網絡的路由方法,采用部分節(jié)點分擔路由信息的方法,將這個路由所需的信息平坦到部分節(jié)點上,然后消息包中只需提供這些分擔路由信息的節(jié)點即可,從而可以大量降低消息中攜帶的路由信息,達到高效路由的目的。而且消息通信采用面向物聯(lián)網的CCN(內容中心網絡)協(xié)議,該協(xié)議以內容為中心,采用名字來命名內容,且可以實現基于名字的路由,這些優(yōu)勢不僅大大縮減協(xié)議占用空間,而且網絡中的服務以及對應的數據可以通過名字來識別,擴展,及其方便靈活, 這些都使得CCN更適合物聯(lián)網這種面向內容的網絡。
(2)本發(fā)明在層次拓撲結構圖上的基于內容中心網絡的路由方法,可以縮減使用路由信息的路由方法和技術。應用面向物聯(lián)網的CCN協(xié)議,借助CCN中基于名字的路由特點,以名字命名路由服務,并提出在服務名字中添加必備的路由信息的方法,壓縮消息所需空間;此外,利用層次圖部分節(jié)點來分擔路由信息,進一步縮減了消息中所需攜帶的路由信息,從而大大減少了消息空間,實現層次樹形結構上的低功耗的高效路由。
附圖說明
圖1是本發(fā)明在層次拓撲結構圖上的基于內容中心網絡的路由方法流程示意圖。
具體實施方式
以下結合附圖和實施例,對本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明披露了一種在層次拓撲結構圖上的基于內容中心網絡的路由方法,采用部分節(jié)點分擔路由信息的方法,將這個路由所需的信息平坦到部分節(jié)點上,然后消息包中只需提供這些分擔路由信息的節(jié)點即可,從而可以大量降低消息中攜帶的路由信息,達到高效路由的目的。而且消息通信采用面向物聯(lián)網的CCN(內容中心網絡)協(xié)議,該協(xié)議以內容為中心,采用名字來命名內容,且可以實現基于名字的路由,這些優(yōu)勢不僅大大縮減協(xié)議占用空間,而且網絡中的服務以及對應的數據可以通過名字來識別,擴展,及其方便靈活, 這些都使得CCN更適合物聯(lián)網這種面向內容的網絡。
具體的,本實施方式包括以下步驟:
(1)在層次圖上,建立匯聚點上的路由信息,每個匯聚點維護兩條之內的節(jié)點可到達的路由信息,每個傳感器節(jié)點都運行面向物聯(lián)網的輕量級CCN組件。
建立過程分兩個階段:
一、第一階段,應用CCN興趣消息構建層次圖。組網所需的消息均為興趣消息類型存在。如下所示,可以分為有三種消息:
第一種是發(fā)現消息,該消息會攜帶自身節(jié)點的層次,層次值作為名字組件放置于該消息名字之后。如,該消息以“/ccn/discovery/“命名,則“/ccn/discovery/層次值/”為新的消息的名字。
第二種是確認消息,有唯一的命名,如,“/ccn/confirm/”, 確認消息中名字最后兩個名字組件分別為節(jié)點的父親節(jié)點ID和節(jié)點ID, 如包含v節(jié)點和v節(jié)點的父親節(jié)點的名字“/ccn/confirm/Parent(v)/v”。
第三種是撤銷消息,用于通知撤銷之前的父子關系。以名字命名這種消息,如“/ccn/revoke” 攜帶某個節(jié)點和該節(jié)點的父親節(jié)點信息,如“/ccn/revoke/v的父親節(jié)點ID/節(jié)點v”。
上述消息的端節(jié)點默認層次為0, 其他所有節(jié)點層次默認為無窮大。從終端節(jié)點開始,設置該終端節(jié)點層次為0, 然后向它的鄰居節(jié)點廣播發(fā)現消息。
對于每個傳感器節(jié)點,部署的CCN組件執(zhí)行以下消息驅動操作:
a.v節(jié)點收到從u發(fā)來的發(fā)現消息:解析該興趣包中名字最后的名字組件,提取出消息源的層次值level(u)。
如果level(u)=無窮大&(and)level(u)+ 1 < level(v), //即第一次更新層次;
設置level(v)= level(u)+ 1;設置v的父親節(jié)點為u,即Parent(v)= u;
發(fā)回給u確認消息,消息中包含v節(jié)點的父親節(jié)點u。
如果level(u)!=無窮大&(&表示為“and”)level(u)+ 1 < level(v), //非第一次更新層次;
發(fā)回給Parent(v)撤銷消息,消息中包含Parent(v)和v節(jié)點信息。
設置level(v)= level(u)+ 1;設置v的父親節(jié)點為u,即Parent(v)= u;
發(fā)回給u確認消息,消息名字中包含Parent(v)和v節(jié)點。
b.v節(jié)點收到u發(fā)來的確認消息:解析該興趣包中名字最后的名字組件,提取出消息源的節(jié)點的父親值。
如果確認消息名字信息中包含的父親節(jié)點值=節(jié)點v,則設置節(jié)點u為v的子節(jié)點,即Children(v)=u;
轉發(fā)該確認消息給v的父親節(jié)點。
c.v節(jié)點收到u發(fā)來的撤銷消息:解析該興趣包中名字最后的名字組件,提取出消息源的節(jié)點的父親值。
如果該撤銷消息名字信息中包含的父親節(jié)點值=節(jié)點v,則撤銷之前關于u節(jié)點的父親值設置。
轉發(fā)該確認消息給v的父親節(jié)點。
二、第二階段,構建層次鄰居信息,設置匯聚點。第一階段會得到樹形層次圖,在第一階段基礎上,從葉子節(jié)點開始構建層次信息,設置匯聚點。
該階段組網所需的消息均為興趣消息類型存在。定義一種完成興趣信息(簡稱完成消息),該信息名字為“/ccn/complete/level(u)/u/parent(u)”,并且名字字段最后包含節(jié)點的層次信息、節(jié)點ID和節(jié)點的父親節(jié)點。
從葉子節(jié)點(層次圖上沒有子女的節(jié)點)開始,發(fā)送完成信息給父親節(jié)點。父親節(jié)點收到完成信息做以下消息驅動動作。
具體,父親節(jié)點執(zhí)行以下消息驅動:
v節(jié)點收到來自u完成消息后:解析該興趣包中的名字組件,提取出消息源的層次值level(s),節(jié)點s,節(jié)點s的父親節(jié)點Parent(s),
發(fā)送給Parent(v)完成消息。//發(fā)送關于自己的路由信息;
如果v節(jié)點的層次level(v)% 2 != 0: //如果該節(jié)點不是屬于每隔2層的節(jié)點;
則轉來自u的完成消息到v的父親節(jié)點Parent(v) //轉發(fā)下級發(fā)來的路由信息;
如果v節(jié)點的層次level(v)% 2 = 0: //如果該節(jié)點是屬于每隔2層的節(jié)點,且如果0<level(s)-level(v)<= 2,把節(jié)點s和其Parent(s)信息放入路由表。
(2)采用CCN協(xié)議中的興趣和內容消息類型,以及PIT(Pending Interest Table)和 FIB(Forwarding Information Table),實現網絡中任意兩節(jié)點之間的基于名字的路由轉發(fā)。
例如,節(jié)點A作為訪問發(fā)起節(jié)點,首先發(fā)興趣消息,興趣消息以名字來表示這次訪問,如“/ccn/access/”,該命名可統(tǒng)一規(guī)范命名。傳輸過程中可以將路由信息添作為名字組件接在已有名字之后,如“/ccn/access/13/7”,其中“13/7”為添加的路由信息。
1)對于任意節(jié)點v(除根節(jié)點之外),收到消息后做相應的消息驅動動作:
節(jié)點v收到興趣消息:CCN組件解析該興趣消息,提取消息名字和路由信息(如果有的話),(CCN組件會自動添加該興趣消息到PIT表中,并建立對應的FIB表)。
其中,A.若該消息目的地是節(jié)點v,則準備對應的內容消息,并根據PIT表中所指興趣消息的源節(jié)點ID, 發(fā)送內容消息。
B.若該消息目的地是不是節(jié)點v,則分為下面兩種情況:
A1.若該消息沒有攜帶路由信息,則轉發(fā)該消息給v的父親節(jié)點。
A2.若該消息攜帶路由信息,查看節(jié)點存儲的路由信息,轉發(fā)到對應的下一級節(jié)點。
節(jié)點v收到內容消息:CCN組件解析該內容消息,根據FIB表,轉發(fā)該內容信息。
2)對于根節(jié)點R,收到消息做一下消息驅動動作:
收到興趣消息:解析該興趣消息,CCN組件解析該興趣消息,得到目的節(jié)點,并提取消息名字。根據整體路由信息,確定到目的節(jié)點的路由信息,并添加到該消息的已有名字后面。注意,此處添加的路由信息只需要包含途徑的骨干節(jié)點ID。轉發(fā)該興趣消息到對應的分支。
收到內容消息:根節(jié)點R收到內容消息則直接根據目的節(jié)點信息,轉發(fā)該內容消息到對應的分支。
上述本實施方式的路由方法,可以縮減使用路由信息。應用面向物聯(lián)網的CCN協(xié)議,借助CCN中基于名字的路由特點,以名字命名路由服務,并提出在服務名字中添加必備的路由信息的方法,壓縮消息所需空間;此外,利用層次圖部分節(jié)點來分擔路由信息,進一步縮減了消息中所需攜帶的路由信息,從而大大減少了消息空間,實現層次樹形結構上的低功耗的高效路由。
在本發(fā)明的以下實施方式中,假定層拓撲結構圖已經應用“基于內容中心網絡的層次拓撲組網方法”建立在層次樹形圖,當節(jié)點A需要訪問節(jié)點B時,節(jié)點A發(fā)送興趣消息,該消息被傳遞到根節(jié)點R。在傳遞過程中,該興趣消息的名字被記錄在PIT(Pending Interest Table)表中,該表記錄未滿足的興趣消息(即還沒有收到對應內容返回的興趣消息)以及該消息的源節(jié)點ID。根節(jié)點R根據目的節(jié)點B,確定所需路由信息,并在消息中添加路由信息。在此路由消息的指引下,消息可順利達到目的地節(jié)點B。節(jié)點B可以返回節(jié)點A所需要的數據,用CCN(內容中心網絡)中的內容消息來承載,該內容消息根據PIT表即知道返回路線,無需任何路由信息。
上述說明示出并描述了本發(fā)明的優(yōu)選實施例,如前所述,應當理解本發(fā)明并非局限于本文所披露的形式,不應看作是對其他實施例的排除,而可用于各種其他組合、修改和環(huán)境,并能夠在本文所述發(fā)明構想范圍內,通過上述教導或相關領域的技術或知識進行改動。而本領域人員所進行的改動和變化不脫離本發(fā)明的精神和范圍,則都應在本發(fā)明所附權利要求的保護范圍內。