AODV是由Nokia研究中心的Charles E.Perkins和加利福尼亞大學Santa Barbara的Elizabeth M.Belding-Roryer以及Cincinnati大學Samir R.Das等共同開發,已經被 IETF MANET工作組於2003年7月正式公布為自組網路由協議的RFC標准。
AODV實質上就是DSR和DSDV的綜合,它借用了DSR中路由發現和路由維護的基礎程序,及DSDV的逐跳(Hop-by-HoP)路由、目的節點序列號和路由維護階段的周期更新機制,以DSDV為基礎,結合DSR中的按需路由思想並加以改進。
AODV在每個中間節點隱式保存了路由請求和應答的結果,並利用擴展環搜索的辦法來限制搜索發現過的目的節點的范圍。AODV支持組播功能,支持Qos,而且AODV中可以使用IP地址,實現同Internet連接,但是不支持單向信道。和DSDV保存完整的路由表不同的是,AODV通過建立基於按需路由來減少路由廣播的次數,這是AODV對DSDV的重要改進。和DSR相比,AODV的好處在於源路由並不需要包括在每一個數據分組中,這樣會使路由協議的開銷有所降低。AODV是一個純粹的按需路由系統,那些不在路徑內的節點不保存路由信息,也不參與路由表的交換。AODv協議可以實現在移動終端間動態的、自發的路由,使移動終端很快獲得通向所需目的的路由,同時又不用維護當前沒有使用的路由信息,並且還能很快對斷鏈的拓撲變化做出反應。AODV的操作是無環路的,在避免了通常Bellman-ford算法的無窮計數問題的同時,還提供了很快的收斂速度。AODv的路由表中每個項都使用了目的序列號(Destination Sequence Number)。目的序列號是目的節點創建,並在發給發起節點的路由信息中使用的。使用目的序列號可以避免環路的發生。
AODV使用3種消息作為控制信息 :RouteRequest(RREQ),RouteReply(RREP)和 RouteError(RERR)。這些消息都在UDP上使用654端口號。
當源節點需要和目的節點通信時,如果在路由表中已經存在了對應的路由時,AODV不會進行任何操作。當源節點需要和新的目的通信時,它就會發起路由發現過程,通過廣播RREQ信息來查找相應路由。當這個RREQ到達目的節點本身,或者是一個擁有足夠新的到目的節點路由的中間節點時,路由就可以確定了。所謂“足夠新”就是通過目的序列號來判斷的。目的節點或中間節點通過原路返回一個RREP信息來向源節點確定路由的可用性。在維護路由表的過程中,當路由不再被使用時,節點就會從路由表中刪除相應的項。同時,節點會監視一個活動路由(activeroute,有限跳的,可用於數據轉發的路由表)中,下一跳節點的狀況。當發現有鏈路斷開的情況時,節點就會使用RERR通知上游的節點,而上游的節點就會使用該RERR分組拷貝通知更上游的節點。在RERR消息中,指明了由於斷鏈而導致無法達到目的節點。每個節點都保留了一個“前驅列表”(precursor list)來幫助完成錯誤報告的功能,這個列表中保存了把自己作為到當前不可達節點的下一跳的相鄰節點(可以通過記錄RERR很容易地獲得)。在路由表中,針對每一個表項,需要記錄相應的的特征內容。其中,序列號是防止路由環路的關鍵所在。當發生斷鏈時,通過增加序列號
和度量值(跳數)來使路由表項無效。
AODV路由協議的運行方式
AODV路由發現
AODV路由協議是一種典型的按需驅動路由協議,該算法可被稱為純粹的需求路由獲取系統,那些不在活躍路徑上的節點不會維持任何相關路由信息,也不會參與任何周期路由表的交換。此外,節點沒有必要去發現和維持到另一節點的路由,除非這兩個節點需要進行通信。移動節點間的局部連接性可以通過幾種方法得到,其中包括使用局部廣播Hello消息。這種算法的主要目的是:在需要時廣播路由發現分組一般的拓撲維護;區別局部連接管理(鄰居檢測)和一般的拓撲維護;向需要連接信息的鄰居移動節點散播拓撲變化信息。AODV使用廣播路由發現機制,它依賴中間節點動態建立路由表來進行分組的傳送。為了維持節點間的最新路由信息,AODV借鑒了DSDV中的序列號的思想,利用這種機制就能有效地防止路由環的形成。當源節點想與另外一個節點通信,而它的路由表中又沒有相應的路由信息時,它就會發起路由發現過程。每一個節點維持兩個獨立的計數器:節點序列號計數器和廣播標識。源節點通過向自己的鄰居廣播 RREQ(Route Requests)分組來發起一次路由發現過程。
反向路由的建立
在RREQ分組中包含了兩個序列號:源節點序列號和源節點所知道的最新的目的序列號。源節點序列號用於維持到源的反向路由的特性,目的序列號表明了到目的地的最新路由。當RREQ分組從一個源節點轉發到不同的目的地時,沿途所經過的節點都要自動建立到源節點的反向路由。節點通過記錄收到的第一個RREQ分組的鄰居地址來建立反向路由,這些反向路由將會維持一定時間,一該段時間足夠RREQ分組在網內轉發以及產生的RREP分組返回源節點。當RREQ分組到達了目的節點,目的節點就會產生RREP分組,並利用建立的反向路由來轉發RREP。
正向路由的建立
RREQ分組最終將到達一個節點,該節點可能就是目的節點,或者這個節點有到達目的節點的路由。如果這個中間節點有到達目的的路由項,它就會比較路由項里的目的序列號和RREQ分組里的目的序列號的大小來判斷自己已有的路由是否是比較新的。如果RREQ分組里的目的序列號比路由項中的序列號大,則這個中間節點不能使用己有的路由來響應這個RREQ分組,只能是繼續廣播這個RREQ分組。中間節點只有在路由項中的目的序列號不小於RREQ中的目的序列號時,才能直接對收到的RREQ分組做出響應。如果節點有到目的地的最新路由,而且這個RREQ還沒有被處理過,這個節點將會沿着建立的反向路由返回RREP分組。
在RREP轉發回源節點的過程中,沿着這條路徑上的每一個.節點都將建立到目的節點的同向路由,也就是記錄下RREP是從哪一個鄰居節點來的地址,然后更新有關源和目的路由的定時器信息以及記錄下RREP中目的節點的最新序列號。對於那些建立了反向路由,但RREP分組並沒有經過的節點,它們中建立的反向路由將會在一定時間(Active-Route-Timeout)后自動變為無效。收到RREP分組的節點將會對到某一個源節點的第一個RREP分組進行轉發,對於其后收到的到同一個源的RREP分組,只有當后到的RREP分組中包含了更高的目的序列號或雖然有相同的目的序列號但所經過的跳數較少時,節點才一會重新更新路由信息,以及把這個RREP分組轉發出去。這種方法有效地抑制了向源節點轉發的RREP分組數,而且確保了最新及最快的路由信息。源節點將在收到第一個RREP分組后,就開始向目的節點發送數據分組。如果以后源節點了解到的更新的路由,它就會更新自己的路由信息。
AODV路由表的管理
節點的路由中除了存儲源和目的節點的序列號外,還存儲了其他有用的信息,這些信息成為有關路由項的軟狀態。與反向路由相關的是路由請求定時器,這些定時器的目的是清除一定時間內沒有使用的反向路由項。定時器的設置依賴於自組網的規模大小,與路由表相聯系的另外一個重要的參數是路由緩存時間,即在超過這個時間之后,對應的路由表就變為無效。
此外,在每一個路由表中,還要記錄本節點用於轉發分組的活躍鄰居。如果節點在最近一次活躍期間(Active-Timeout)發起或轉發了到某個目的節點的分組,那么就可以稱這個節點為活躍節點。這樣,當到達某一個目的節點的鏈路有問題時,所有與這條鏈路有關的活躍節點都可以被通知到。一個路由表還有活躍鄰居在使用,就可以認為是有效的。通過各個活躍路由項所建立的源節點到目的節點的路徑,也就是一條活躍路徑。路由表中的目的節點序列號,正如在DSDV路由協議中所使用的那樣,可以在無序分組的傳送和節點高度移動的極端條件下避免路由環路的產生。
移動節點為每一個相關的目的節點維護了一個路由表。每一個路由表包含以下一些信息:目的地址、下一跳地址、跳數、目的序列號及路由項的生存時間。路由表在每一次被用來傳送一個分組時,它的生存時間都要重新開始計算,也就是用當前時間加上Aetive-Route-Timeout。如果一個移動節點被提供了到達某一個目的節點的新路由,那么它就會把這個新路由的目的序列號與自己路由表中己有的目的序列號做比較,並將目的序列號大的作為到達目的節點的路由表。如果目的序列號相同,則采用到目的節點所經過的節點數(跳數)最少的那個路由。
AODV路由維護
如果節點的移動不是沿着活躍路徑進行的,那么就不會影響己經建立的路由。如果一個源節點在活躍路徑上移動,它就要向目的節點重新發起一次路由發現過程。如果移動的節點是中間節點或目的節點,那么一個特殊的RREP分組將轉發到那些受移動影響的源節點。周期性發送的Hello分組可以用來確保鏈路的對稱性,並檢測不能用的鏈路。如果不用Hello分組,也可以采用鏈路層通告機制來報告鏈路的無效性,這樣可以減少延遲。此外,節點在嘗試向下一跳節點轉發分組失敗后,也能檢測出鏈路的不可用性。
一旦一個節點的下一跳節點變得不可達,這時它就要向利用該損壞鏈路的活躍上游節點發送未被請求的RREP(RERR)分組,這個RREP(RERR)分組帶有一個新的序列號(即在目的序列號上加1),並將跳數值設置為二。收到這個RREP(RERR)分組的節點再依次將RREP(RERR)分組轉發到它們各自的活躍鄰居,這個過程持續到所有的與損壞鏈路有關的活躍節點都被通知到為止。源節點在收到斷鏈的通知后,如果它還要與目的節點聯系,它就需要再次發起新的路由發現過程。這時,它將會廣播一個RREQ分組,這個RREQ分組中的目的序列號要在源節點已知的最新目的序列號之上加1,以確保那些還不知道目的節點最新位置的中間節點對這個RREQ分組做出響應,從而能保證建立一條新的、有效的路由。
AODV協議評價
總之,AODV是一種距離矢量路由協議,采用的算法克服了以前提出的一些算法(如DSDV)的缺點,具有如下優點:
(a)基於傳統的距離向量路由機制,思路簡單、易懂。
(b)支持中間節點應答,能使源節點快速獲得路由,有效減少了廣播數,但存在過時路由問題。
(c)節點只存儲需要的路由,減少了內存的需求和不必要的復制。
(d)快速響應活躍路徑上斷鏈。
(e)通過使用目的序列號來避免路由環路,解決了傳統的基於距離向量路由協議存在的無限計數問題。
(f)具有網絡的可擴充性。
(g)需要周期性地廣播分組,需要消耗一定的電池能源和網絡帶寬。與DSDV以及其他持續存儲更新路由信息的算法相比,AODV需要相對較長的路由建立時延,不過AODV采取了以下的一些措施來加以改善:
(1)到某個目的節點的路由可以由知道路由的中間節點進行響應。
(2)鏈路失效能夠被立即報告,這樣路由可重新建立。
(3)不活躍的路由在一定時間后會被刪除。
參靠鏈接
https://www.cnblogs.com/zhangrui/archive/2011/12/16/2290370.html
