AODV中路由表及控制消息结构(包含aodv开源代码)

1、路由表结构
AODV路由协议涉及路由表管理的处理,通常在路由请求发送RREQ过程中建立反向路由,在转发RREP的时候建立正向路由,当然在数据通信的过程中也会涉及到路由表的操作,如出现了路由出错的时候以及路由生命期的更新等。
下面对AODV路由条目中的几个重要字段进行介绍:
(1)目的节点地址n_dst:用于标志使用此路由的最终目的节点,决定了数据分组转发方向。
(2)目的节点序列号rt_seqno:反映此路由的新鲜度,一般序列号越大路由越新鲜, 这是保证开环的重要措施,在路由发现和路由应答更新路由时需要进行序列号的比较。
(3)路由状态标志rt_flags(有效、无效、正在修复等):反映此路由目前的状态,主要用于告知数据分组经过此节点的时候处理方式。如果路  由处于无效状态,那么数据分组将丢失;如果处于修复状态,那么数据分组进入等待路由队列中;如果有效状态,那么直接转发。
(4)网络接口rt_interface:移动节点访问信道的接口。
(5)跳数rt_hops:到达目的节点所需要的跳数。在断链时决定是否发起本地修复时会用到,目的是控制断链修复范围;在路由更新时也会用到,目的是选择最短路径,从而降低断链几率。
(6)下一跳rt _nexthop :数据分组经过本节点之后,数据分组将被直接转发的中继节点,通常下一跳节点应该出现在当前节点的邻节点列表中。
(7)前驱节点列表rt_pcliSt:使用这条路由的所有直接前驱节点列表。在出现断链的时候可以通过前驱节点列表中是否存有节点而决定是否广播RERR消息。
(8)路由生命期rt_expire:路由有效的生命期,在数据分组转发使用当前路由时会更新路由的有效生命期,当较长时间不使用此路由时,此路由的有效期将会过期,在路由管理时将会使路由失效。

/* Route table entries */
struct rt_table {
    list_t l;
    struct in_addr dest_addr;    /* IP address of the destination */
    u_int32_t dest_seqno;
    unsigned int ifindex;    /* Network interface index... */
    struct in_addr next_hop;    /* IP address of the next hop to the dest */
    u_int8_t hcnt;        /* Distance (in hops) to the destination */
    u_int16_t flags;        /* Routing flags */
    u_int8_t state;        /* The state of this entry */
    struct timer rt_timer;    /* The timer associated with this entry */
    struct timer ack_timer;    /* RREP_ack timer for this destination */
    struct timer hello_timer;
    struct timeval last_hello_time;
    u_int8_t hello_cnt;
    hash_value hash;
    int nprec;            /* Number of precursors */
    list_t precursors;        /* List of neighbors using the route */
};


2、.2路由请求RREQ消息结构
在源节点没有到达目的节点路由的时候,源节点会广播一个RI汪Q消息,这个RREQ消息中携带路由请求序列号、请求目的节点描述信息、源节点描述信息以及临时获得反向路由的简单信息(如跳数)。下面对I眦Q消息中几个重要字段进行介绍:
(1)路由请求编号rq_bcase_id:标识一个路由请求编号,以避免节点重复接收处理RREQ消息,用源节点和它组合可以唯一标志一个RREQ请求。RREQ消息经过某个节点后,路由请求编号会在节点中缓存一段时间,当再次接收到相同路由请求编号时,可以通过比较区别开是否需要发送这个RREQ消息。
(2)目标节点地址rq_dst:寻求的目的节点地址。是路由应答的主要依据,节点接收到RREQ消息时,会用rqdst在路由表中检索,检索到有效路由的目的节点和rq_dst相等那么将进行应答,否则转发RREQ消息。
(3)目标节点序列号rq
dst seqno:在转发RREQ过程中判断到达目的节点正向路由是否足够新鲜,确定能否用于应答。
(4)源节点地址rq_src:在接收到RREQ时候建立反向到达源节点的路由。
(5)源节点序列号rq_src_seqno:在建立反向路由时判断是否需要对已有的反向路由进行更新,此外在建立反向路由时需要保存到路由表中用于反应此反向路由的新鲜程度。
(6)跳数rq_hop_count:每转发一次RREQ将会增加1,用于记录当前节点到达源节点的跳数(距离)。当RREQ消息到达目的节点时,rq_hop_count中记录了从源节点到目的节点的总跳数。

/* RREQ Flags: */
#define RREQ_JOIN          0x1
#define RREQ_REPAIR        0x2
#define RREQ_GRATUITOUS    0x4
#define RREQ_DEST_ONLY     0x8

typedef struct {
    u_int8_t type;
#  if __BYTE_ORDER == __LITTLE_ENDIAN
    u_int8_t res1:4;
    u_int8_t d:1;
    u_int8_t g:1;
    u_int8_t r:1;
    u_int8_t j:1;
#  elif __BYTE_ORDER == __BIG_ENDIAN
    u_int8_t j:1;        /* Join flag (multicast) */
    u_int8_t r:1;        /* Repair flag */
    u_int8_t g:1;        /* Gratuitous RREP flag */
    u_int8_t d:1;        /* Destination only respond */
    u_int8_t res1:4;
#  else
#   error "Adjust your defines"
#  endif
    u_int8_t res2;
    u_int8_t hcnt;
    u_int32_t rreq_id;
    u_int32_t dest_addr;
    u_int32_t dest_seqno;
    u_int32_t orig_addr;
    u_int32_t orig_seqno;
} RREQ;


3、路由应答RREP消息结构
当有到达目的节点路由的中间节点(或者目的节点)接收到RREQ后将会生成RREP应答消息,并沿着反向路由回送RREP消息构建正向路由。
下面对RREP消息中几个重要字段进行介绍:
(1)目的节点IP地址rp_dst:节点接收到RREP消息时,将建立正向路由,此时正向路由的目的节点地址就是rp_dst。
(2)目的节点序列号rp_dst_seqno:建立的正向路由时目的节点序列号。
(3)源节点IP地址rp_src建立的正向路由的下一跳节点地址,中间节点每次转发 RREP前都需更新此字段为当前节点。
(4)到达目的节点跳数rp_hop_count 记录节点到达目的节点的跳数,用于登记到正向路由表中。目的节点生成RREP消息应答时设置为1,中间节点应答时从正向路由表中获得到达目的节点的跳数再增加l作为RREP消息的跳数。在沿着反向路由转发时,每经过一个节点就增加1,到达源节点时正好为源节点到目的节点的总跳数。


/* RREP Flags: */

#define RREP_ACK       0x1
#define RREP_REPAIR    0x2

typedef struct {
    u_int8_t type;
#  if __BYTE_ORDER == __LITTLE_ENDIAN
    u_int16_t res1:6;
    u_int16_t a:1;
    u_int16_t r:1;
    u_int16_t prefix:5;
    u_int16_t res2:3;
#  elif __BYTE_ORDER == __BIG_ENDIAN
    u_int16_t r:1;
    u_int16_t a:1;
    u_int16_t res1:6;
    u_int16_t res2:3;
    u_int16_t prefix:5;
#  else
#   error "Adjust your defines"
#  endif
    u_int8_t hcnt;
    u_int32_t dest_addr;
    u_int32_t dest_seqno;
    u_int32_t orig_addr;
    u_int32_t lifetime;
} RREP;


你可能感兴趣的:(网络路由协议,Ad,Hoc网络,算法)