博客原文地址:https://godbmw.com/passages/2019-03-02-gpsr/html
博客主題推薦:Theme Art Design,「筆記記錄+搭建知識體系」的利器。git
這是以前學習《無線傳感網絡》這門課作的期末大做業,GPSR是"greedy perimeter stateless routing"的縮寫。github
這是一種無狀態的路由轉發協議,巧妙地藉助「貪婪轉發」和「周邊轉發」有效地下降了每一個物理節點的存儲信息量,很是具備實用意義。算法
除此以外,它還能快速地應對現實中外界條件、節點能耗等多種因素形成的頻繁變化的節點分佈。緩存
所以,特別重溫一下,做爲一次分享。網絡
隨着路由節點的增長以及拓撲結構變化率的增大,傳統的路由轉發協議算法效率低、魯棒性差。貪婪周界無狀態路由協議(GPSR)只使用拓撲結構中的臨近信息節點進行「貪婪轉發」決策。當數據包進入「路由空洞」的時候,算法會先構造GG平面圖或者RNG平面圖,而後採用「周邊轉發」繞過此區域。此過程當中,算法會自動切換「貪婪轉發」和「周邊轉發」這兩種模式。在頻繁變化或者節點數量多的拓撲結構中,而且每一個節點存儲的信息量少,GPSR能夠較低的成本快速地響應變化,查詢正確的路由路徑。app
關鍵詞:GPSR, 貪婪轉發, 周邊轉發, 路由空洞, 平面圖less
當下的一些路由具備節點多、拓撲結構變化快的特色,例如:Ad-hoc網絡(無基礎設施,支持軍事用戶、災後救援人員以及臨時協做)、傳感器網絡(由小型傳感器組成,節點資源匱乏)、「屋頂」網絡(非移動,可是密集遍及大都市區域,節點數量數十萬)。分佈式
傳統的路由算法的節點成本和消息成本太高,形成在高移動性和密集節點拓撲結構中的的低適應性。所以,須要一種新的節點成本低、魯棒性高的路由算法。ide
論文提出的GPSR算法合理利用地理信息來實現高穩健性。在網絡節點數量不斷增長的狀況下提升穩健性和遷移率,下降路由協議消息發送成本,各個路由節點消息傳遞成功率以及使得每一個節點存儲最少的信息量。
論文中提出的DV和LS算法,要求將整個網絡拓撲結構的映射到全部的路由節點。在DV算法的描述中,每一個路由節點都記錄了最新週期中到全部網絡目的地的距離;在LS算法的描述中,每一個路由節點都會接受到鏈路改變的相關信息狀態。
當拓撲結構變化率增大,或者路由區域中的路由節點的數量增多,DV算法和LS算法的複雜度就會增長,同時增長的還有每一個節點的信息量儲備和節點之間溝通成本。
雖然「緩存」技術能夠減小節點負載,可是當節點數目過多或者拓撲結構變化率過大的時候,現有算法仍然不能保證較高的魯棒性以及較低的節點開銷。
爲了讓節點存儲最少的信息量,而且可以快速響應拓撲結構的變化。須要使用貪心法的思想,讓每一步都是最優解,這個轉發過程就是「貪心轉發」。
可是有些時候沒法知足「貪心轉發」的條件,此時的狀況就是「路由空洞」。解決「路由空洞」的重要技術是「右手法則」,這個轉發過程就是「周邊轉發」。而在周邊轉發以前須要將圖處理成平面圖,有GG和RNG兩種平面圖供選擇。
在轉發過程當中,根據節點條件,切換「貪心轉發」模式和「周邊轉發」模式,直到到達最終的目的節點。
GPSR算法的實現過程當中,須要配合「信標算法」來肯定鄰居節點的位置信息。
「信標算法」中,每一個節點週期性的以廣播方式傳送一個信標,信標包括節點自身的位置信息,位置信息被編碼成兩個4字節的浮點數值,用於標記節點的x座標和y座標。數據格式是(IP, (x, y))
。
爲了不鄰居節點發送的信標產生衝突,用B表示信標間的時間間隔,節點發送信標的時間統一分佈在[0.5B, 1.5B]
之間。設節點保留位置信息的最長時間爲T,在超過T時間間隔後仍然沒有收到鄰居節點發送的信標,就認爲鄰居節點失效或超出覆蓋範圍,刪除對應的位置信息。
藉助這些地理信息,GPSR算法的能夠避免探測包的盲目洪泛,從而進行有效的路由轉發,而且針對節點變更進行有效的路由維護。甚至實現基於無狀態的分佈式的非端到端的數據轉發。
貪婪轉發的過程是指:
貪婪轉發的原理就是利用「貪心」思想,讓每一個節點選擇當前的最優選擇(在知足條件的狀況下),直到算法結束。
以下圖所示,根據貪婪轉發的原則,節點x的下一跳節點就是節點y。毫無疑問,貪婪轉發只須要保證節點的一條鄰居信息便可。
路由空洞是指當前節點比全部其餘一跳鄰居節點更接近目的節點,此時,根據貪婪轉發的規則,當前節點不會轉發數據給一跳的鄰居節點。若是存在這種網絡拓撲結構,那麼就稱之爲「路由空洞」。
以下圖所示,void區域就是沒有知足「貪婪轉發」條件的區域。由於節點x的覆蓋範圍與以直線xD爲半徑的圓的交叉區域沒有鄰居節點。
針對上述的「路由空洞」問題,算法會將模式(Mode)從貪婪轉發切換到周邊轉發,進而繞過「路由空洞」。
「周邊轉發」是根據「右手法則」來判斷下一跳轉節點:鏈接當前節點和目的結點造成直線,右手握住此線逆時針旋轉,到達的第一條邊(邊表明其上的兩個點能夠互達)就是下一跳的方向。
雖然周邊轉發能夠繞過「路由空洞」,但在一些狀況下,單純地進行周邊轉發可能會陷入死循環,最終只能回到當前節點,沒法抵達目的節點。
這裏舉一個例子進行介紹。下圖是一個由X、W、U、Z以及目的節點D構成的圖,節點之間的連線表明着兩端節點是相鄰的(能夠互相達到)。假設如今從節點X開始出發。
從X節點開始,根據「右手法則」依次抵達U節點、Z節點和W節點。此時,對W節點再次使用「右手法則」,算法又從新跳回了U節點。最後,對U節點使用「右手法則」,跳回了開始節點X。
顯而易見,此時的周邊轉發陷入困境。這主要是因爲這張圖不是一個「平面圖」的緣由。須要刪除一些邊,從而使其變成GG或者RNG平面圖,才能走出此困境。
RNG平面圖的定義是:若頂點U,V和任意其它頂點W之間的距離,全都大於或等於頂點u和v之間的距離d(u,v),則在頂點U和V之間存在RNG邊(u,v)。用方程式表示以下:
以下圖所示,若(u,v)是RNG中的邊,則在節點U和V之間的陰影半月形區域內,不能包含有任何證實節點w。此時,因爲d(u, v) > max(d(u,w), d(w,v)),爲了構建RNG平面圖,必須把邊(u, v) 捨去。
關於RNG平面實現的僞代碼以下。其中,N是對於任意節點u來講的鄰接節點列表,v是集合N中的任一節點。
GG平面圖的定義是:若是節點u和節點v之間,直徑爲uv的圓內,不存在其它頂點W,則節點u和節點v存在GG邊(u,v)。用方程式表示以下:
以下圖所示,若(u,v)是GG中的邊,則在節點U和V之間的圓形陰影區域,不能包含有任何證實節點w。
關於GG平面實現的僞代碼以下。其中,N是對於任意節點u來講的鄰接節點列表,v是集合N中的任一節點。
對於GG和RNG兩種平面圖,RNG平面圖是GG平面圖的子集。它們之間的直接關係能夠用下圖表示出來:
構造上述的RNG平面圖或者GG平面圖就能夠解決「周邊轉發」沒法到達目的節點的困境。這裏以構造RNG平面圖爲例,仍是使用以前的圖形。爲了方便講述,規定邊xu長度爲12,邊xw長度爲11,邊uw長度爲10。
根據RNG的定義,D(U, X) > MAX(D(W, U), D(X, W)),因此移除UX邊。此時,「周邊轉發」再也不會陷入困境。
論文爲了測試算法的性能,使用了Carnegie Mellon(卡梅隆)大學的測試數據。在暢通平面上,無線仿真模型節點進行運動。節點會在指定區域內隨機選擇一個目標,而後在指定範圍內隨機選擇一個速度,以此速度到達目標而且停留一段時間。這個過程模擬了拓撲結構的高遷移率以及其中的節點。
下圖顯示了不一樣的B(時間間隔)的狀況下,GPSR傳遞成功的數據包。將從B=3s下降到B=1.5S並無帶來很大成功率提升,成功率也保持在97%以上。
下圖比較了DSR算法和GPSR算法的節點消耗,GPSR的節點消耗遠遠低於DSR的節點消耗,而且隨着時間推移,GPSR節點的消耗也更加穩定。
所以,GPSR算法達到了設計的初衷:在遷移率高的拓撲結構中,可以保持較高的魯棒性,而且每一個節點的資源消耗都獲得了改善。論文中還分節點狀態、路徑長度等維度進行了比較,也只是說明GPSR算法的優點。主要的性能測試仍是上述的傳包成功率和節點消耗,其它測試這裏再也不冗贅。
在本次論文的學習過程當中,掌握了「貪婪轉發」、「周邊轉發」、「RNG和GG平面圖」,最重要的是理解了在GPSR算法中是如何調度進行狀態轉化(貪婪=>周邊 / 周邊=>貪婪),以及如何解決「路由空洞」和「周邊轉發困境」。除了算法的核心部分,也觸類旁空地瞭解了「信標算法」的實現機制以及衝突解決方法。
就我我的來看,GPSR算法和論文中說起的傳統算法相比,已經實現了最小化節點的保存數據(節省節點資源),而且可以利用狀態切換合理應對可變性高的拓撲結構。
美中不足的是「信標機制」會帶來額外的開銷,可是相比於每一個節點保存全部節點的信息,信標機制的這點開銷徹底能夠忽略。
在閱讀論文的過程當中,我查找了大量的中文和英文資料,很是有助於理解這篇論文所講述的GPSR算法。特此係統記錄一下相關資料。
Youtube Videos(印度英語)
博客原文地址:https://godbmw.com/passages/2019-03-02-gpsr/
博客主題推薦:Theme Art Design,「筆記記錄+搭建知識體系」的利器。