AODV
AODV 路由过程描述
AODV(Ad-hoc 按需距离矢量路由协议)是专为移动自组织网络(MANET)设计的按需式路由协议,仅在源节点需要向目的节点发送数据时才触发路由发现,通过“路由请求(RREQ)-路由回复(RREP)”握手建立路径,无数据传输时几乎无控制开销。
阶段 1:路由发现(源节点触发 RREQ 广播,无预存路由时)
路由发现触发条件
当源节点 S 有数据要发送给 D,但自身路由表中无“D 的有效路由条目”(或路由已过期)时,触发路由发现流程。
RREQ 消息结构
包含核心字段:
- RREQ ID(源节点 S 分配的唯一标识,避免重复处理);
- 源节点地址(S)、目的节点地址(D);
- 源节点当前跳数(初始为 0)、目的节点序列号(初始为 0,用于判断路由新鲜度)。
RREQ 广播与路由表临时更新
- 每个中间节点(如 A、B、C)接收 RREQ 后,首先检查“RREQ ID+ 源地址”是否已处理(避免循环广播):若未处理,更新自身路由表的“临时前驱条目”——记录“目的 D 的跳数=收到的跳数 +1,前驱节点=发送 RREQ 的节点”(如 A 收到 S 的 RREQ,记录 D 的前驱为 S,跳数 1);
- 中间节点将 RREQ 的“跳数 +1”后,继续向除“前驱节点”外的所有邻居广播(避免回传),直到 RREQ 到达目的节点 D 或已存在 D 路由的节点。
目的节点响应触发
当 D 首次收到 RREQ 时,停止广播,进入“路由回复”阶段;若中间节点(如某节点已缓存 D 的有效路由)收到 RREQ,也可代替 D 回复 RREP(优化延迟)。
阶段 2:路由回复(目的节点沿反向路径单播 RREP)
RREP 消息生成
目的节点 D 生成 RREP,核心字段包括:
- 目的节点地址(D)、目的节点序列号(D 维护的递增序列,用于确保路由新鲜度,如当前为 5);
- 到源节点 S 的跳数(D 到 B 的跳数 1,B 到 S 的跳数 1,总跳数 2);
- 生命周期(路由有效时间,默认 30 秒,超时后需重新发现)。
RREP 沿反向路径单播
- D 根据 RREQ 中的“前驱节点”(即发送 RREQ 给 D 的节点,如 B),将 RREP单播给 B(而非广播,减少开销);
- 中间节点 B 接收 RREP 后,根据自身路由表的“前驱条目”(B 的前驱是 S),将 RREP 单播给 S;
- 每个节点转发 RREP 时,同步更新路由表的“后继条目”——记录“目的 D 的后继节点=接收 RREP 的下一跳”(如 B 的后继是 D,S 的后继是 B),形成“正向路径”(S→B→D)。
路由新鲜度判断
若节点收到多个 RREP(如 S 同时收到 B 和 C 的 RREP),通过“目的节点序列号”和“跳数”选择最优路由:序列号更大的优先(表示路由更新);序列号相同时,跳数更小的优先。
路由建立完成
当 S 收到 RREP 时,确认“S→B→D”路径有效,路由表中“D 的条目”标记为“有效”,可开始数据转发。
阶段 3:数据转发(沿正向路径逐跳传输)
数据分组封装
源节点 S 将应用数据封装为 IP 分组,目的地址设为 D,携带序列号(用于 D 确认接收顺序,避免丢包),不携带完整路径(仅需“后继节点”信息)。
逐跳转发机制
每个节点(如 S、B)接收数据分组后,提取目的地址 D,查询自身路由表的“后继条目”——找到下一跳节点(S 的后继是 B,B 的后继是 D),将数据单播给下一跳;
- 转发过程中无需重新计算路由,仅依赖已建立的“正向路径”,开销极低;
- 若节点需向多个目的发送数据(如 S 同时向 D 和 E 发送),则为每个目的建立独立路由,互不干扰。
确认机制(可选)
AODV 本身不强制数据确认(依赖上层协议如 TCP),但可通过“反向路径”发送 ACK(如 D 向 B 发送 ACK,B 再转发给 S),确保数据可靠传输。
路由生命周期维护
节点路由表中的“D 条目”有生命周期(默认 30 秒),若 S 在生命周期内持续发送数据,会自动刷新生命周期;若长时间无数据(超过生命周期),路由条目过期,下次发送需重新触发路由发现。
阶段 4:路由维护(链路失效时触发 RERR)
链路失效检测
节点通过两种方式检测链路失效:
- 数据转发超时:如 B 向 D 发送数据后,超时未收到确认(或 D 的反向 ACK),判定 B-D 链路失效;
- 邻居存活检测(可选 HELLO 扩展):节点周期性向邻居发送 HELLO 消息,若超时未收到回复,判定链路失效(适用于无数据传输时的链路维护)。
RERR 消息生成与传播
- 链路失效节点(如 B)生成 RERR 消息,核心字段为“失效的目的地址列表(如 D)”,仅向自身路由表中“该目的的所有前驱节点”(如 B 的 D 条目前驱是 S)单播 RERR(避免全网广播);
- 前驱节点 S 接收 RERR 后,删除自身路由表中“D 的有效条目”,若 S 有其他依赖 D 的子节点(如 S 是某节点的前驱),则继续向这些子节点转发 RERR,直到所有依赖该路由的节点都收到通知。
路由重建
- 若源节点 S 仍需向 D 发送数据,在删除失效路由后,重新触发“阶段 1 的路由发现流程”,广播新的 RREQ(RREQ ID 递增,如 ID:2),寻找新路径(如 S→A→C→D);
- 新路径建立后,重复“阶段 2-3”的流程,恢复数据转发,整个维护过程延迟通常 <1 秒(取决于网络规模)。
整体流程总结
AODV 的核心优势是“按需触发、无数据时零开销”,通过“RREQ 广播发现路径 →RREP 单播回复建立路径 → 数据沿正向路径转发 →RERR 维护失效路径”的闭环,适配 MANET 节点移动频繁、带宽有限的场景。全流程可简化为:
无路由→RREQ广播(发现)→RREP单播(建立)→数据转发(使用)→链路失效→RERR通知(维护)→重新发现
与 OLSR(主动式)相比,AODV 在节点移动少、数据传输稀疏的场景下开销更低;但在高移动、高数据量场景下,频繁的路由发现可能导致延迟增加,需根据实际场景选择。
