自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

AODV路由協(xié)議的路由緩存隊列詳解

網(wǎng)絡 網(wǎng)絡管理
對于AODV路由協(xié)議,我們今天來講述一下有關(guān)于他在NS2.27中的組件內(nèi)容。首先我們羅列了它的基本組件,之后對他的路由緩存隊列做了重點介紹。

AODV路由協(xié)議的使用往往在一些復雜的程序當中。那么我們?nèi)绾卫斫膺@些協(xié)議的使用和一些代碼函數(shù)的含義呢?下面我們就來闡述一下這方面的問題。首先了解一下在NS2.27中,AODV路由協(xié)議主要包括以下幾個組件:

1、協(xié)議實體

2、路由表

3、定時器

(1)廣播定時器

(2)周期Hello報文廣播定時器

(3)用于鄰居管理的定時器

(4)用于路由緩存的定時器

(5)用于本地修復的定時器

(6)緩存廣播ID的定時器

4、日志記錄器

5、路由緩存隊列

首先來看AODV路由協(xié)議從接收到一個分組開始的基本流程。

當協(xié)議接收到一個分組,即recv(Packet*, Handler*)函數(shù)被調(diào)用,函數(shù)根據(jù)分組類型調(diào)用不同的處理函數(shù)進行處理。

1、如果是協(xié)議分組,則將分組的ttl值減1,并調(diào)用recvAODV(Packet*)函數(shù)進行處理。recvAODV函數(shù)再根據(jù)分組的不同類型來調(diào)用不同的函數(shù)進行處理。

(1)如果接收到的是路由請求分組,則調(diào)用recvRequest(Packet*)函數(shù)進行處理。

如果該分組由節(jié)點自身產(chǎn)生或已經(jīng)接收過的,會被節(jié)點丟棄,并結(jié)束處理。

否則,節(jié)點將緩存該分組的序列號,并將該分組發(fā)送來的路徑添加到反向路由中,轉(zhuǎn)發(fā)相應分組。然后,節(jié)點根據(jù)該分組的目的地址進行判斷并調(diào)用不同函數(shù)進行處理。

如果節(jié)點自身即為目的節(jié)點,則調(diào)用sendReply(nsaddr_t, u_int32_t, nsaddr_t, u_int32_t, u_int32_t, double)函數(shù)進行響應。如果節(jié)點不是目的節(jié)點,但知道通往目的節(jié)點的路由,則調(diào)用sendReply函數(shù)進行響應,并在源和目的前驅(qū)列表中分別插入到源和目的的下一跳節(jié)點。否則,不能直接響應該請求,將跳數(shù)加1,并調(diào)用forward(AODV_rt_entry*, Packet*, double)函數(shù)轉(zhuǎn)發(fā)該分組。

在sendReply函數(shù)中,節(jié)點首先查找到達目的節(jié)點(即發(fā)送路由請求分組的節(jié)點)的路由,創(chuàng)建并填充分組,然后調(diào)用Scheduler::instance().schedule()函數(shù)來發(fā)送該分組。

(2)如果接收到的是路由響應分組,則調(diào)用recvReply(Packet*)函數(shù)進行處理。

節(jié)點首先查詢前往分組目的節(jié)點的路由,如果不存在則新增一條路由項。然后,節(jié)點更新到該目的節(jié)點的路由項,并發(fā)送所有相關(guān)分組。

如果節(jié)點為目的節(jié)點則更新路由發(fā)現(xiàn)延遲并發(fā)送所有相關(guān)的分組。如果節(jié)點不是目的節(jié)點,但知道通往目的節(jié)點的路由,則將跳數(shù)加1,調(diào)用forward函數(shù)轉(zhuǎn)發(fā)該分組,并修改響應的前驅(qū)列表。如果節(jié)點不是目的節(jié)點,也不知道通往目的節(jié)點的路由,則丟棄該分組。

(3)如果接收到的是路由錯誤分組,AODV路由協(xié)議則調(diào)用recvError(Packet*)函數(shù)進行處理。#p#

節(jié)點首先清除所有受到影響的路由項,丟棄所有受影響的分組。然后,如果前驅(qū)節(jié)點中存在會受該路由錯誤影響的分組,則調(diào)用sendError(Packet*, bool)函數(shù)轉(zhuǎn)發(fā)該分組。

sendError函數(shù)創(chuàng)建并填充分組,然后調(diào)用Scheduler::instance().schedule()函數(shù)來發(fā)送該分組。

(4)如果接收到的是Hello消息分組,則調(diào)用recvHello(Packet*)函數(shù)進行處理。

節(jié)點會將該鄰居的信息添加到鄰居列表中(或更新該鄰居的信息)。

2、如果是數(shù)據(jù)分組,則節(jié)點丟棄已經(jīng)發(fā)送過或者ttl為0的分組,并結(jié)束處理。如果分組是由上層協(xié)議產(chǎn)生的,則節(jié)點添加IP報頭。隨后,節(jié)點根據(jù)目的路由進行不同處理。

(1)如果目的節(jié)點路由未知,則調(diào)用rt_resolve(Packet*)函數(shù)進行路由解析和轉(zhuǎn)發(fā)。

如果目的節(jié)點路由在路由表中存在,則直接調(diào)用forward函數(shù)進行轉(zhuǎn)發(fā)。如果分組是由節(jié)點自身產(chǎn)生的,則將分組保存到緩沖隊列中,并調(diào)用 sendRequest(nsaddr_t)函數(shù)查詢目的路由。如果目的路由已知,但正在進行本地修復,則將分組保存到緩沖隊列中。否則,丟棄該分組,并調(diào)用sendError函數(shù)報錯。

(2)如果目的節(jié)點路由已知,則調(diào)用forward進行轉(zhuǎn)發(fā)。

節(jié)點丟棄ttl為0的分組,并根據(jù)分組類型決定下一步操作。

如果接收到的是數(shù)據(jù)分組,且自身為目的節(jié)點,則通過調(diào)用PortClassifier對象的recv(Packet*, Handle*)函數(shù)將分組交遞給高層協(xié)議,并結(jié)束處理。否則,節(jié)點設(shè)置分組屬性,并調(diào)用Scheduler::instance().schedule (Handler*, Event*, double)函數(shù)來發(fā)送分組。其中,Handler為基類中的屬性target_(會根據(jù)腳本中的設(shè)置指向相應的協(xié)議實體),Event為要發(fā)送的分組即可。

以上就是AODV路由協(xié)議在節(jié)點收到分組后的一個處理過程。接下來看看各個定時器所做的工作。

1、廣播定時器BroadcastTimer在到時后調(diào)用id_purge()函數(shù)刪除廣播項中已超時的項目,并通過調(diào)用Scheduler:: instance().schedule()函數(shù)來設(shè)置下次被調(diào)用的時間(Handler為this指針,Event為類屬性intr)。

2、周期Hello報文廣播定時器HelloTimer在到時后調(diào)用sendHello()函數(shù)向鄰居創(chuàng)建并發(fā)送Hello消息,并調(diào)用schedule()函數(shù)來設(shè)置下次被調(diào)用的時間。

3、鄰居管理定時器NeighborTimer在到時后調(diào)用nb_purge()函數(shù)來清除鄰居列表中已超時的鄰居項,并調(diào)用schedule()來設(shè)置下次被調(diào)用的時間。nb_purge會調(diào)用nt_delete(nsaddr_t)函數(shù)來清除超時的鄰居項,其又會調(diào)用 handle_link_failure(nsaddr_t)函數(shù)來處理由于鄰居節(jié)點被刪除而引起的路由變化。

4、路由緩存定時器RouteCacheTimer在到時后調(diào)用rt_purge()函數(shù)來清除路由表中已超時的路由項,并丟棄相關(guān)的分組,再調(diào)用schedule()來設(shè)置下次被調(diào)用的時間。

5、本地修復定時器LocalRepairTimer在調(diào)用后根據(jù)傳遞的分組的目的地址關(guān)閉相應的路由項。

6、緩存廣播ID定時器BroadcastID用來保存廣播分組的ID。

此外,AODV路由協(xié)議的路由表、日志記錄和隊列三個類就相對比較簡單了,都只實現(xiàn)了一些非?;镜墓δ?在此就不做介紹了

責任編輯:佟健 來源: IT實驗室
相關(guān)推薦

2010-06-18 14:00:16

AODV路由協(xié)議

2010-06-18 15:09:08

AODV協(xié)議

2010-06-24 16:44:29

AODV路由協(xié)議

2010-06-19 13:24:02

AODV路由協(xié)議

2010-06-21 14:58:35

AODV路由協(xié)議

2010-06-21 13:07:14

2010-06-21 13:52:20

AODV路由協(xié)議

2010-06-18 15:56:01

AODV路由協(xié)議

2010-07-13 14:47:08

AODV路由協(xié)議

2010-08-13 09:25:52

路由協(xié)議AODV

2010-06-17 17:27:35

路由協(xié)議

2010-08-13 09:39:48

OSPF協(xié)議

2009-12-22 10:39:16

內(nèi)部路由協(xié)議

2010-06-18 14:24:47

AODV協(xié)議

2011-04-15 10:01:39

2009-11-11 10:56:50

路由器協(xié)議

2013-08-12 09:47:41

RIP協(xié)議網(wǎng)絡協(xié)議

2009-12-14 17:49:44

路由選擇協(xié)議

2010-06-18 13:37:02

AODV協(xié)議

2010-06-10 13:28:43

路由信息協(xié)議RIP
點贊
收藏

51CTO技術(shù)棧公眾號