DSDV路由協議設計續

網絡層功能:組網和多跳路由網絡層關注的是如何將分組從源端沿着網絡路徑送達目標端.爲了將分組送到目標端有可能沿路要經過許多跳中間路由器這種功能顯然與數據鏈路層的功能不同數據鏈路層只是單跳地將分組從一端發送到另一端

DSDV路由協議的實現採用以下定時器:

1計數定時器網絡層當前時間採用計數器定時器的超時次數標識

2HelloTimer定時器,週期發送HELLO廣播報文,以建立鄰居表。

3鄰居管理定時器NeighborTimer,刪除鄰居表中已經超時的鄰居項,並設置下次被調用的時間,同時處理因鄰居節點被刪除而引起的路由變化。

4完全轉存路由廣播定時器,將路由表中的所有信息進行通告。

5遞增更新路由廣播定時器,僅通告更新消息。

6路由緩存定時器,用來刪除過期的路由選項。

 

/****************************************************

            計數定時器

*****************************************************/

    TIMER_ID CountTimer;

 

/*****************************************************

            週期發送Hello 廣播報文

*****************************************************/

    TIMER_ID HelloTimer;

 

/*****************************************************

        鄰居管理定時器, 刪除鄰居表中已經

        超時的鄰居項, 並設置下次被調用的

        時間, 同時處理因鄰居節點被刪除而

        引起的路由變化

*****************************************************/

    TIMER_ID NeighborTimer;

 

/**********************************************************

        路由廣播定時器, 定時廣播路由廣播表

        的路由信息,  完全轉存&  遞增更新

***********************************************************/

    TIMER_ID FullRouteBroadcastTimer;  /*完全轉存: 將路由表項中的所有信息進行通告*/

    TIMER_ID IncRouteBroadcastTimer;  /*遞增更新: 僅通告更新消息*/

 

/*************************************************************

        路由緩存定時器, 用來刪除過期的路由表項

*************************************************************/

TIMER_ID RouteBufferTimer;

 

#define METRIC_INFINITY     60

 

/*鄰居數以及路由表項的最大值*/

#define MAX_NEIGHBOR_NUM   32

#define MAX_ROUTEENTRY_NUM  32

 

/*路由廣播表項的大小*/

#define ADT_ROUTE_TABLE_ENTRY_SIZE  4

 

/******************************************************

    DSDV路由廣播報文格式:

    路由廣播報文數目-- 路由廣播報文序列

*******************************************************/

 

/***********************************************

    m_PayLoad指明瞭哪個定時器超時

************************************************/

/*計數器定時器超時, 計數器增加*/

#define NET_TIMEOUT_CNT     0x00000001 

 

/*週期Hello報文廣播定時器, 超時則廣播Hello報文*/

#define NET_TIMEOUT_HELLO       0x00000002 

 

/********************************************************

    鄰居管理定時器超時, 清除鄰居表中超

    時的鄰居項, 同時處理因鄰居表項的刪

    除而引起的路由變化

*********************************************************/

#define NET_TIMEOUT_NEIGHBOR    0x00000003 

 

/********************************************************

    路由廣播完全轉存定時器超時,  將路由

    表中的所有信息進行通告

*********************************************************/

#define NET_TIMEOUT_RBCT_FULL   0x00000004

 

/*********************************************************

    路由廣播遞增更新定時器超時,  僅通告

    上一次完全轉存後遞增更新的路由信息

**********************************************************/

#define NET_TIMEOUT_RBCT_INC    0x00000005

 

/*********************************************************

    路由緩存定時器超時, 刪除路由表中

    過期的路由選項

**********************************************************/

#define NET_TIMEOUT_RBUFF       0x00000006

 

/***************************************************

        定時器超時時間間隔設置(Seconds)

****************************************************/

#define NET_INTERVAL_CNT        2

#define NET_INTERVAL_HELLO      3

#define NET_INTERVAL_NEIGHBOR   9

#define NET_INTERVAL_RBCT_FULL  30

#define NET_INTERVAL_RBCT_INC   10

#define NET_INTERVAL_RBUFF      90

 

/*****************************************************

        處理各時間的超時時間設置,

        以計數器定時器超時間隔計算

******************************************************/

#define NET_TMUNIT_DEL_NEIGHBOR     6       /*鄰居表項有效且flesh>=4, 則刪除該鄰居表項*/

#define NET_TMUNIT_DEL_ROUTEENTRY   90  /*刪除路由表項*/   

 

/***************************************************

    ServiceType 域的~4 位標識協議包類型

****************************************************/

#define NET_STYPE_HELLO     1   /*Hello廣播消息, 用於定期更新鄰居表*/

#define NET_STYPE_ROUTE     2   /*路由更新協議包*/

#define NET_STYPE_TEST          3   /*網絡層路由測試包*/

 

/**************************************************

            鄰居表項以及鄰居表

***************************************************/

typedef struct _NeighborTableElemt

{

    bool valid; /*鄰居表項是否有效*/

    U32 install_time; /*創建時間*/

    U16 flesh; /*記錄未更新持續時間*/

}NeighborTableElemt;

 

typedef struct _NeighborTable

{

    NeighborTableElemt neighbors[MAX_NEIGHBOR_NUM];

    U32 version;

}NEIGHBOR_TABLE;

 

/*******************************************************

        路由轉發表以及路由廣播表

********************************************************/

typedef struct _StableDataElemt

{

    U16 last_settling_time;

    U16 avg_settling_time;

}StableDataElemt;

 

typedef struct _FWDRouteTableElemt

{

    U8 Destination; /*目的站點*/

    U8 NextHop; /*下一跳站點*/

    U16 SeqNum; /*序列號, 跟目的站點相關*/

    U32 InstallTime;

    U8 Metric;

    bool Flag; /*標識遞增更新的包*/

    StableDataElemt StableData; /*緩解路由波動*/

}FWDRouteTableElemt;

 

 

/*路由轉發表*/

typedef struct _FWDRouteTable

{

    FWDRouteTableElemt RouteTable[MAX_ROUTEENTRY_NUM];

    U32 version;

}FWD_ROUTE_TABLE;

 

typedef struct _ADTRouteTableElemt

{

    U8 Destination;

    U8 Metirc;

    U16 SeqNum;

}ADTRouteTableElemt;

 

/*路由廣播表*/

typedef struct _ADTRouteTable

{

    ADTRouteTableElemt RouteTable[MAX_ROUTEENTRY_NUM];

    U32 version;

}ADT_ROUTE_TABLE;

 

 

參考文獻:

1Charles E. Pekins, Pravin Bhagwat. Highly Dynamic Destination-Sequenced Distance-Vector Routing (DSDV) for Mobile Computers, 1994.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章