Ad hoc网络路由协议概述10——多路径路由协议(1)AOMDV协议(Ad Hoc On-demand Multipath Distance Vector, AOMDV)

目录

1 前言

2 控制消息和路由表

2.1 RREQ消息格式

2.2 RREP消息格式

2.3 AOMDV路由表

3 AOMDV的两个原则

3.1 多径无环性

3.2 链路不相交性

4 AOMDV路由发现机制

5 AOMDV路由维护机制

6 小结


1 前言

目前,在Ad hoc网络中,用的最多的多径路由协议是AOMDV,虽然目前(24.2.26)还没有形成RFC,但已经有比较完善的协议机制。

看了很多文献,关于AOMDV的具体实现机制,包括控制消息的格式,在细节上多少有些不一致,本篇仅给出作者本人的理解,如果有错,敬请指正。

和基于DSR的多径协议相比,AOMDV基于AODV进行改进,控制消息更短,不用携带完整路由信息,路由开销也更小。

2 控制消息和路由表

和AODV协议的控制消息相比,AOMDV协议所用到的控制消息没有大的改变,仅在路由请求RREQ和路由响应RREP消息中增加了一些特殊字段,以便形成多条不相交的无环路由

以下仅列出RREQ和RREP的消息格式(RREP-ACK,RERR,Hello消息的格式详见AODV章)。

2.1 RREQ消息格式

RREQ消息格式

消息类型(8bits)

标记位(5bits)

保留位(11bits)

跳数(8bits)

广播跳数(8bits)

RREQ ID(32bits)

目的节点IP地址(32bits)

目的节点序列号(32bits)

源节点IP地址(32bits)

源节点序列号(32bits)

第一跳节点IP地址(32bits)

和AODV相比,AOMDV的RREQ消息新增“广播跳数”和“第一跳节点IP地址”字段。

其中第一跳字段用于在广播RREQ过程中,中间节点只响应来自不同第一跳节点的RREQ,保证链路不相交。

RREQ消息各字段的解释如下表所示:

RREQ消息字段含义

字段名称

含义

消息类型

数值为1,表示消息为RREQ

标志位

5bits表示5个标记位,JRGDU:

J为Join Flag加入标志,为多播保留;

R为Repair Flag修复标志,为多播保留;

G为Gratuitous RREP Flag免费路由回复标志,指示是否向目的节点IP地址所在的节点发送一个免费路由回复消息;

D为Destination Flag只允许目的节点回复标志,设为1则只允许目的节点用RREP回复此RREQ消息,设为0则同时允许“目的节点”和“有到目的节点可用路由的中间节点”回复;

U为Unknown Sequence Number未知序列号标志,U=1表示目的节点序列号未知

保留位

值为0,可用于协议扩充

跳数

从源节点到收到该RREQ消息的节点所经过的节点数

广播跳数

从源节点到当前节点的所有路由的最大跳数,用于保证多径协议中每条路由的无环性

RREQ ID

路由请求消息标识,RREQ ID和源节点IP地址可以作为本次路由请求的唯一标识

目的节点序列号

是源节点路由表中存储的关于目的节点的最新序列号,其序列号可能不是最新的目的序列号,也不可能不存在

源节点序列号

由源节点自身维护,每次更新序列号即序列号加1,如果超过了系统最大值,则重新设置为系统最下值。

第一跳节点IP地址

记录本条路由的第一跳节点的IP地址,用于中间节点收到重复RREQ后的选择性转发,以保证形成多径路由的链路不相交性

2.2 RREP消息格式

RREP消息格式

消息类型(8bits)

标志位(2bits)

保留位(9bits)

前缀长度(5bits)

跳数(8bits)

广播跳数(8bits)

目的节点IP地址(32bits)

目的节点序列号(32bits)

源节点IP地址(32bits)

路由生存周期(32bits)

第一跳节点IP地址(32bits)

和AODV相比,AOMDV的RREP消息同样新增“广播跳数”和“第一跳节点IP地址”字段。

RREP消息各字段的解释如下表所示:

RREP消息各字段含义

字段名称

含义

消息类型

数值为2,表示消息为RREP

标志位

2bits表示2个标记位,RA:

R为Repair Flag修复标志,为多播保留;

A为Acknowledgement Required需要确认标志,设为1则收到该RREP消息的下一个邻居需要单播RREP-ACK消息到本节点,用于当链路不可靠或者只能单向传播时,用RREP进行链路检测的场景

保留位

值为0,可用于协议扩充

前缀长度

值为0-31

跳数

从源节点到收到该RREP消息的节点所经过的节点数

广播跳数

从发送RREP的源节点到当前节点的所有路由的最大跳数,用于保证多径协议中每条路由的无环性

目的节点序列号

是源节点路由表中存储的关于目的节点的最新序列号,其序列号可能不是最新的目的序列号,也不可能不存在

路由生存时间

单位为毫秒(ms),节点只有在这段时间前收到该条RREP消息,才承认RREP信息有效,超过路由生存时间收到的RREP信息视为无效

第一跳节点IP地址

记录本条路由的第一跳节点的IP地址,用于中间节点收到重复RREP后的选择性转发,以保证形成多径路由的链路不相交性

2.3 AOMDV路由表

AOMDV协议中,每个节点都会维护一个路由表,即保存到某个目的节点的下一跳信息。所提路由表的定义如下表所示:

AOMDV协议的路由表

目的地址

目的序列号

广播跳数

[下一跳1,跳数1,最后一跳1,生存时间1]

[下一跳2,跳数2,最后一跳2,生存时间2]

[下一跳k,跳数k,最后一跳k,生存时间k]

对于AOMDV协议,一个目的地址对应k条可用路径,每条路径对应一个生存时间,表示该路由的有效时间。

3 AOMDV的两个原则

为保证所发现路径的独立性,AOMDV协议有两个原则,即多径无环性、链路不相交性。

3.1 多径无环性

多径的无环性是指在网络中建立的多条路径中,不存在环路的特性。

环路是指数据在网络中传输时,由于路径选择不当或其他原因,导致数据包不断在一条或多条路径上循环传输而无法到达目的地的情况。环路不仅会浪费网络资源,还可能导致网络拥塞和性能下降。

在AODV协议中,为了实现无环性,在RREQ和RREP控制消息中包含了“目的序列号”字段。在一条路径上节点的路由表中,通过<目的节点序列号,跳数>来保证无环性,优先目的序列号更高的RREQ,如果RREQ具有相同的目的序列号,则优先跳数更低的RREQ。

然而,跳数只在某一条路径上有效,对于不同路径无法保证无环,因此在AOMDV协议中通过路由表中的“广播跳数”(Advertised Hop Count)字段来保证无环性。

广播跳数字段用于记录从源节点到当前节点的跳数。每个节点在转发路径请求消息时都会增加该字段的值。如果节点接收到的消息中的广播跳数字段值小于或等于之前记录的值,则意味着存在环路,消息会被丢弃。

广播跳数更新策略为:在每次目的序列号更新时初始化,在发送RREQ或者RREP时更新,更新规则如下:

advertisedHopcount_i = max_k\left \{ hopcount_k | (nexthop_i, hopcount_k)\in ÎrouteList_k\right \}

路由更新的策略为:中间节点在接收到RREQ或者RREP时检查是否需要进行路由更新。更新时优先高目的序列号的路由,如果序列号相同,优先考虑低广播跳数的路由。

具体流程图如下,其中节点 为节点 的上游节点:

图1 路由更新机制流程图

3.2 链路不相交性

多径路由允许源节点和目的节点之间通过多条路径同时或交替地传输数据。这些路径可以是节点不相交的,也可以是链路不相交的。

多径路由的目的是提高网络的可靠性和性能,因为当某些路径因节点移动、链路故障或其他原因变得不可用时,数据仍然可以通过其他路径成功传输。

因此,对于多径路由算法,所发现的路径之间独立性越高,当一条路径失效后,对其他路径的影响越小,但节点不相交路径要求过高,难以实现。

AOMDV协议考虑链路不相交多径路径,为保证链路不相交,在路由发现的广播RREQ和单播RREP中分别采取如下措施:

措施1:在路径发现过程中,会记录路径的跳数和反向路由信息。

每个节点在接收到RREQ消息时,会检查该反向路由是否已建立,如果新路径与已有路径共享相同的链路,则该路径被认为是无效的,不会被添加到路由表中,以确保新建立的反向路由与已知路由在链路级别上是不相交的

措施2:利用节点所维护的路由表中目的节点和下一跳节点的映射对来确保链路不相交

在路径建立过程中,每个节点都会检查路由表中的下一跳和目的节点地址,如果两条路径具有相同的下一跳和目的节点地址,则它们被认为是相交的,并且其中一条路径会被丢弃或标记为备用路径。

措施3:所提协议在RREQ消息中增加“第一跳”字段

每个节点维护一个第一跳表,如下表所示。中间节点只会对来自不同第一跳节点的RREQ进行处理和转发。

第一跳表定义

目的节点IP地址1

第一跳节点IP地址1

……

第一跳节点IP地址k1

……

……

目的节点IP地址m

第一跳节点IP地址1

……

第一跳节点IP地址km

其中该表中维护m个目的节点的第一跳节点信息。第i个目的节点对应有ki个第一跳节点信息。

措施4:目的节点维护一个最后一跳表,如下表所示,该目的节点对来自某个源节点的请求,只会响应来自不同邻居的RREQ消息。

最后一跳表定义

源节点IP地址1

最后一跳节点IP地址1

……

最后一跳节点IP地址l1

……

……

目的节点IP地址n

最后一跳节点IP地址1

……

最后一跳节点IP地址ln

其中该表中维护来自n个源节点的第一跳节点信息。第i个源节点对应有li个最后一跳节点信息。

4 AOMDV路由发现机制

步骤1:源节点应用层有数据报文需要传输,检查自身是否有到达目的节点的有效路由。如果没有,则发起路由发现过程,向邻居节点广播RREQ消息,同时设置定时器等待RREP消息。

步骤2:中间节点处理RREQ消息的过程如下图所示。

步骤2.1:如果中间节点第一次收到RREQ,则建立反向路由,并且向邻居广播RREQ。

步骤2.2:如果中间节点收到重复RREQ。中间节点收到重复的RREQ后,确认此RREQ的第一跳节点。如果来自不同的第一跳节点,则根据3.1节的路由更新策略,建立一条新的到达源节点的反向路由。

步骤3:目的节点处理RREQ消息的过程如下图所示。为保证链路不相交性,目的节点只对于来自不同邻居的RREQ消息发送RREP消息。其中RREP根据反向路由进行单播,同时在单播不同RREP时,需要使用之前未使用过的反向路由,以保证多径正向路由的独立性。

图2 中间/目的节点处理RREQ消息流程图

步骤4:中间节点处理RREP消息。与中间节点处理RREQ消息的方式类似,在此过程中建立到达目的节点的多条正向路径,具体过程如下图所示。

图3 中间节点处理RREP消息流程图

步骤5:源节点在定时器结束后,处理收到的RREP消息。选择其中跳数最少的路径作为主路径进行数据传输。如果存在多条跳数最少且相同的路由,选择最先到达源节点的那条路由作为主路径。源节点发送应用层数据的具体流程如下图所示。

图4 源节点传输数据包流程图

5 AOMDV路由维护机制

对于AOMDV协议,数据包传输中途,由于节点移动或者链路失效导致数据包无法传输,则路由失效。

失效节点会根据备份路径进行数据恢复,在备份路径里选择跳数最少(相同则选择最先建立的)的作为数据传输路径,直到全部可用路径都失效后才重新启动路由发现过程。

举个例子,路由失效后的恢复过程可见下图。

步骤1:源节点S通过路由发现过程,建立到达目的节点D的一系列正向路由。数据包按照已发现路由到达节点F后,由于节点FH的路由不再活跃了,路由失效,如图5(a)所示。

步骤2:节点F会发起从源节点F到目的节点的路由发现过程,向邻居广播RREQ消息,如图5(b)所示。

步骤3:节点C收到RREQ后,将自身路由表中通过节点F到达目的节点D的表项设置为“不可用”状态。由于其维护有备份的可用路由,因此,直接向节点F回复RREP,通知节点F可以从C到达目的节点D,如图5(c)所示。

步骤4:节点F将数据包传输给节点C,节点C通过C-E-G-D的路由将数据包传输给目的节点D,如图5(d)所示。

图5(a)路由恢复过程:路由失效
图5(b) 路由恢复过程:发起请求
图5(c) 路由恢复过程:回复响应
图5(d) 路由恢复过程:路由恢复

6 小结

AOMDV协议是目前较为常用的多径路由协议,它保证了所形成的多条路径在链路级别上的不相交性,所用的控制开销也较少。和其他多径协议相比,在算法复杂性,路由控制开销、时延和投递率方面都有一定优势。

但是,AOMDV在选择主路径时只考虑了最少跳数和最先到达时间,即只考虑时延因素,并不能完全满足多径路由协议设计时的QoS综合保证。

针对不同节点类型和用户需求,在路径选择时还需要考虑别的因素,如节点能量,节点移动性等。

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值