ns2 AODV協議分析

2021-06-01 21:55:12 字數 2797 閱讀 6674

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。

******************************=

ns2,AODV協議解析

在ns2.27中,aodv路由協議主要包括以下幾個元件 1 協議實體 2 路由表 3 定時器 1 廣播定時器 2 週期hello報文廣播定時器 3 用於鄰居管理的定時器 4 用於路由快取的定時器 5 用於本地修復的定時器 6 快取廣播id的定時器 4 日誌記錄器 5 路由快取佇列 首先來看協議從接收...

AODV協議分析

1 aodv簡介 aodv ad hoc on demand distance vector routing 是由nokia研究中心的charles e.perkins和加利福尼亞大學的elizabeth m.belding roryer等共同開發,已經被 ietf manet工作組於2003年7月...

ns2中AODV協議HDR CMN p 的含義

剛開始看 aodv 協議就被兩個函式難到 hdr cmn p 和hdr ip p 經查功能都差不多,以 hdr cmn p 為例說明。struct hdr cmn ch hdr cmn p 結構體hdr cmn 的定義在 ns allinone 2.34 ns 2.34 common packet....