aodv包頭分析 上

2022-09-03 09:36:13 字數 1458 閱讀 7572

aodv路由協議提供了乙個特定的頭部,在aodv_packet.h裡面

/*

* general aodv header - shared by all formats

*/struct hdr_aodv

inline static hdr_aodv* access(const packet* p)

};

在結構體hdr_aodv中,它定義了分組的型別ah_type,靜態變數offset_用於在任意乙個ns分組中找到aodv分組頭的位置。access()方法是用來訪問分組頭的方法,下面的語句就是用此方法獲得aodv分組頭:
#define hdr_aodv(p)		((struct hdr_aodv*)hdr_aodv::access(p))

#define hdr_aodv_request(p) ((struct hdr_aodv_request*)hdr_aodv::access(p))

#define hdr_aodv_reply(p) ((struct hdr_aodv_reply*)hdr_aodv::access(p))

#define hdr_aodv_error(p) ((struct hdr_aodv_error*)hdr_aodv::access(p))

#define hdr_aodv_rrep_ack(p) ((struct hdr_aodv_rrep_ack*)hdr_aodv::access(p))

offset()方法一般是被分組頭管理類呼叫,一般很少使用。

在aodv.cc裡面,定義了aodv路由協議的分組頭及相應操作函式:

int hdr_aodv::offset_;

static class aodvheaderclass : public packetheaderclass

} class_rtprotoaodv_hdr;

當模擬器執行的時候,靜態物件class_rtprotoaodv_hdr以』packetheader/aodv』和』 sizeof(hdr_all_aodv)』為引數,呼叫packetheaderclass的建構函式:

packetheaderclass::packetheaderclass(const char* classname, int hdrlen) : 

tclclass(classname), hdrlen_(hdrlen), offset_(0)

這為aodv分組頭的大小分配了空間,並在配置時刻由分組頭管理器使用。bind_offset()函式在建構函式中被呼叫,分組頭管理器知道在**為這個分組頭儲存偏移量。舉個例子,當執行語句:

struct hdr_aodv_request *rq = hdr_aodv_request(p);

時,由前面介紹得知,它會呼叫aodv_packet.h裡面的

return (hdr_aodv*) p->access(offset_);
返回分組頭的位置。

AODV協議分析

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

IP包頭分析

ip包頭結構 版本,首部長度,型別,總長度 標識,標誌,片偏移 ttl,協議號,首部校驗和 源ip目的ip 可選項資料 資料 資料裡面是4層和5層的資料 現實中資料報沒有換行,識別符號應該在總長度後面 每一行32位元,ip包頭最小20位元組,最長60位元組 在ip包頭裡可選項輕易不會被使用到 版本 ...

IP包頭分析

tcp ip協議定義了乙個在網際網路上傳輸的包,稱為ip資料報 ip datagram 這是乙個與硬體無關的虛擬包,由首部和資料兩部分組成.首部的前一部分是固定長度,共 20位元組,是所有ip資料報必須具有的.在首部的固定部分的後面是一些可選字段,其長度是可變的.版本佔四位 指ip協議版本。並且通訊...