網絡層功能:組網和多跳路由。網絡層關注的是如何將分組從源端沿着網絡路徑送達目標端.爲了將分組送到目標端,有可能沿路要經過許多跳中間路由器。這種功能顯然與數據鏈路層的功能不同,數據鏈路層只是單跳地將分組從一端發送到另一端。
DSDV路由協議的實現採用以下定時器:
(1)計數定時器,網絡層當前時間採用計數器定時器的超時次數標識。
(2)HelloTimer定時器,週期發送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;
參考文獻:
【1】Charles E. Pekins, Pravin Bhagwat. Highly Dynamic Destination-Sequenced Distance-Vector Routing (DSDV) for Mobile Computers, 1994.