AODV協議詳解

2022-12-16 22:09:05 字數 4008 閱讀 2575

1 aodv報文格式

aodv有三種基本的協議報文型別:rreq報文、rrep報文和rrer報文。1.1 rreq報文a.對rreq的處理

接收到rreq的結點做如下處理:

(1)建立乙個表項,先不分配有效序列號,用於記錄反向路徑。

(2)如果在「路由發現定時」內已收到乙個具有相同標識的rreq報文,則拋棄該報文,不做任何處理;否則,對該表項進行更新如下:i.下一跳結點=廣播rreq的鄰居。

ii.跳數=rreq報文的「跳計數」字段值。iii.設定表項的「過時計時器」。

(3)如果滿足以下條件,則結點產生「路由回答報文」rrep,併發送到信源;否則更新rreq報文並廣播更新後的rreq報文。i.該結點是信宿。

ii.結點的路由表中有到信宿的活動表項,且表項的信宿序列號大於rreq中的信宿序列號。

(4)更新rreq報文並廣播更新後的rreq報文

i.信宿序列號=本結點收到的信宿相關的最大序列號。ii.跳計數加1。1.2 rrep報文

(1)信宿結點產生rrep執行如下操作:

i.如果收到相應的rreq的信宿序列號與信宿維護的當前序列號相等,則信宿將自己維護的序列號加1,否則不變。ii.跳計數=0。iii.定時器值。

(2)中間結點產生的rrep執行如下操作:

i.本結點獲取的該信宿的最大序列號。

ii.跳計數=本結點到信宿的跳數(查相應表項即可得到)。

iii.更新本結點維護的「前向路由表項」的下一跳和「反向路由表項」的前一跳

b.對rrep的處理

結點對接收到的rrep作如下處理。(1)如果沒有與rrep報文中的信宿相匹配的表項,則先建立乙個「前向路表」空表項。

(2)否則,滿足如下條件對已有表項進行更新。條件:

i.現有表項的信宿序列號小於rrep報文中的序列號。ii.現有的表項沒有啟用。

iii.信宿序列號相同,但rrep報文的「跳計數」值小於表項相對應的值;通過更新或建立,產生乙個新的前向路由。

更新:iv.下一跳=廣播rrep的鄰居結點。v.信宿序列號=rrep中的信宿序列號。vi.跳計數加1。

(3)按照上述的過程,任何**rrep的結點,都記錄了到信宿的下一跳,當rrep到達信源時。結點位址匹配,不再**rrep,信源到信宿的前向路由已經建立起來了。信源可以沿這條前向路徑進行資料傳輸。

1.3 rrer報文

鄰居間週期性的互相廣播「hello」報文,用來保持聯絡,若在一段時間內沒有收到「hello」報文,則認定為鏈路斷。例如當結點x、y之間鏈路產生斷路使資料無法通過此條鏈路傳至信宿,則結點x會產生rrer報文向信源報告此情況。rrer通過廣播形式傳送,維護路由表的結點收到此報文會更新路由表(將x、y

間的路由設成無效),並**rrer報文。

2協議從接收到乙個分組開始的基本流程aodv路由協議主要包括以下幾個元件:1、協議實體2、路由表3、定時器

(1)廣播定時器

(2)週期hello報文廣播定時器(3)用於鄰居管理的定時器(4)用於路由快取的定時器(5)用於本地修復的定時器(6)快取廣播id的定時器4、日誌記錄器5、路由快取佇列

當協議接收到乙個分組,即recv(packet*,handler*)函式被呼叫,函式根據分組型別呼叫不同的處理函式進行處理。

1、如果是協議分組,則將分組的ttl值減1,並呼叫recvaodv(packet*)函式進行處理。recvaodv函式再根據分組的不同型別來呼叫不同的函式進行處理。(1)如果接收到的是路由請求分組,則呼叫recvrequest(packet*)函式進行處理。

如果該分組由節點自身產生或已經接收過的,會被節點丟棄,並結束處理。否則,節點將快取該分組的序列號,並將該分組傳送來的路徑新增到反向路由中,**相應分組。然後,節點根據該分組的目的位址進行判斷並呼叫不同函式進行處理。

如果節點自身即為目的節點,則呼叫sendreply(nsaddr_t,

u_int32_t,nsaddr_t, u_int32_t, u_int32_t, double)函式進行響應。如果節點不是目的節點,但知道通往目的節點的路由,則呼叫sendreply函式進行響應,並在源和目的前驅列表中分別插入到源和目的的下一跳節點。否則,不能直接響應該請求,

將跳數加1,並呼叫forward(aodv_rt_entry*,packet*,double)函式**該分組。在sendreply函式中,節點首先查詢到達目的節點(即傳送路由請求分組

的節點)的路由,建立並填充分組,然後呼叫

scheduler::instance().schedule()函式來傳送該分組。

(2)如果接收到的是路由響應分組,則呼叫recvreply(packet*)函式進行處理。節點首先查詢前往分組目的節點的路由,如果不存在則新增一條路由項。然後,節點更新到該目的節點的路由項,並傳送所有相關分組。

如果節點為目的節點則更新路由發現延遲並傳送所有相關的分組。如果節點不是目的節點,但知道通往目的節點的路由,則將跳數加1,呼叫forward函式**該分組,並修改響應的前驅列表。如果節點不是目的節點,也不知道通往目的節點的路由,則丟棄該分組。

(3)如果接收到的是路由錯誤分組,則呼叫recverror(packet*)函式進行處理。節點首先清除所有受到影響的路由項,丟棄所有受影響的分組。然後,如果前驅節點中存在會受該路由錯誤影響的分組,則呼叫senderror(packet*, bool)函式**該分組。

senderror函式建立並填充分組,然後呼叫scheduler::instance().schedule()函式來傳送該分組。

(4)如果接收到的是hello訊息分組,則呼叫recvhello(packet*)函式進行處理。節點會將該鄰居的資訊新增到鄰居列表中(或更新該鄰居的資訊)。2、如果是資料分組,則節點丟棄已經傳送過或者ttl為0的分組,並結束處理。

如果分組是由上層協議產生的,則節點新增ip報頭。隨後,節點根據目的路由進行不同處理。

(1)如果目的節點路由未知,則呼叫rt_resolve(packet*)函式進行路由解析和**。如果目的節點路由在路由表中存在,則直接呼叫forward函式進行**。如果分組是由節點自身產生的,則將分組儲存到緩衝佇列中,並呼叫

sendrequest(nsaddr_t)函式查詢目的路由。如果目的路由已知,但正在進行本地修復,則將分組儲存到緩衝佇列中。否則,丟棄該分組,並呼叫senderror函式報錯。

(2)如果目的節點路由已知,則呼叫forward進行**。節點丟棄ttl為0的分組,並根據分組型別決定下一步操作。如果接收到的是資料分組,且自身為目的節點,則通過呼叫portclassifier物件的recv(packet*,handle*)函式將分組交遞給高層協議,並結束處理。

否則,節點設定分組屬性,並呼叫

scheduler::instance().schedule (handler*, event*, double)函式來傳送分組。

其中,handler為基類中的屬性target_(會根據指令碼中的設定指向相應的協議實體),event為要傳送的分組即可。以上就是在節點收到分組後的乙個處理過程。

以下是各個定時器所做的工作。

1、廣播定時器broadcasttimer在到時後呼叫id_purge()函式刪除廣播項中已超時的專案,並通過呼叫scheduler::instance().schedule()函式來設定下次被呼叫的時間(handler為this指標,event為類屬性intr)。

2、週期hello報文廣播定時器hellotimer在到時後呼叫sendhello()函式向鄰居建立並傳送hello訊息,並呼叫schedule()函式來設定下次被呼叫的時間。3、鄰居管理定時器neighbortimer在到時後呼叫nb_purge()函式來清除鄰居列表中已超時的鄰居項,並呼叫schedule()來設定下次被呼叫的時間。nb_purge會呼叫nt_delete(nsaddr_t)函式來清除超時的鄰居項,其又會呼叫

handle_link_failure(nsaddr_t)函式來處理由於鄰居節點被刪除而引起的路由

變化。4、路由快取定時器routecachetimer在到時後呼叫rt_purge()函式來清除路由表中已超時的路由項,並丟棄相關的分組,再呼叫schedule()來設定下次被呼叫的時間。

5、本地修復定時器localrepairtimer在呼叫後根據傳遞的分組的目的位址關閉相應的路由項。

6、快取廣播id定時器broadcastid用來儲存廣播分組的id。

DHCP協議解碼詳解

協議分析 dhcp協議解碼詳解 dhcp,全稱是dynamichostconfigurationprotocol 中文名為動態主機配置協議,它的前身是bootp,它工作在osi的應用層,是一種幫助計算機從指定的dhcp伺服器獲取它們的配置資訊的自舉協議。dhcp使用客戶端 伺服器模式,請求配置資訊的...

TCPIP詳解卷一協議49小結

在大多數的tcp ip實現中,arp是乙個基礎協議,但是它的執行對於應用程式或系統管理員來說一般是透明的。arp快取記憶體在它的執行過程中非常關鍵,我們可以用arp命令對快取記憶體進行檢查和操作。快取記憶體中的每一項內容都有乙個定時器,根據它來刪除不完整和完整的表項。arp命令可以顯示和修改arp快...

TCPIP詳解 卷一 協議 7 5小結

ping程式是對兩個tcp ip系統連通性進行測試的基本工具。它只利用icmp回顯請求和 回顯應答報文,而不用經過傳輸層 tcp udp ping伺服器一般在核心中實現icmp的功能。我們分析了在lan wan以及slip鏈路 撥號和線路 上執行ping程式的輸出結果,並對序列線路上的slip鏈路吞...