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.

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DS-DV(Destination Sequenced Distance Vector)路由协议是一种基于向量距离的路由协议,它采用了距离向量算法和序列号机制。在DS-DV协议中,每个节点维护一张路由表,通过交换距离向量信息来计算出到目标节点的最短路径,这些向量信息包含了目标节点的序列号以及到该节点的距离。序列号可以用来区分路由更新信息的新旧性,从而防止出现环路。 DS-DV协议的工作原理如下: 1. 初始化:当节点加入网络时,它会向相邻节点发送 HELLO 消息,建立邻居关系,并初始化自己的路由表。 2. 路由更新:当某个节点检测到它的路由表发生变化时,它会将自己的距离向量信息发送给相邻节点,相邻节点再将这个信息广播给它们的邻居。这样,整个网络中的节点都可以得到最新的路由信息。 3. 路由计算:每个节点维护一张路由表,记录到达各个目标节点的最短路径。当收到新的距离向量信息时,它会更新自己的路由表,并重新计算到目标节点的最短路径。 4. 路由维护:DS-DV协议使用序列号机制来防止出现环路。每当一个节点更新自己的路由表时,它会为目标节点生成一个新的序列号,并将这个序列号附加到自己的距离向量信息中。当收到新的距离向量信息时,如果这个序列号比自己记录的序列号要小,则说明这个信息已经过时,应该被忽略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值