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.

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