3.2 AODV、OLSR 与 ZRP:经典协议对台词


3.2 AODV、OLSR 与 ZRP:经典协议对台词

AODV 是按需家族的代表,用路由请求与应答建立路径,靠序列号防环;OLSR 是链路状态家族的代表,用多点中继压缩泛洪开销;ZRP 用 zone 半径把表驱动与按需缝合起来。读懂这三个协议,就读懂了路由设计的三个基本手法。

协议不能只停在分类学上,得拆开看零件。这一节把三个经典协议当作三份台词本,逐句念给读者听:每条消息谁发的、带了什么字段、收到的人怎么处理。念完你会发现,协议设计里真正难的不是流程图,而是每一处"防止出乱子"的细节——序列号、跳数、过期时间,这些字段才是协议的承重墙。

AODV:问路的艺术

源节点 S 想找目的节点 D,本地没有路径,就广播一份 RREQ(路由请求)。RREQ 携带一对关键数字:S 的序列号与 D 的最新已知序列号,外加一个逐跳递增的跳数计数。中间节点收到 RREQ 做三件事:记下"回到 S 走谁"(反向路径);如果是第一次见到这份 RREQ(用请求标识判重)就继续广播;若自己知道去 D 的新鲜路径(目的地序列号不小于请求里的值),就代替 D 回一份 RREP。真正的 D 收到 RREQ 后沿反向路径单播 RREP,沿途每个节点建立"到 D 走谁"的正向路径。链路断掉时,发现断点的节点发 RERR(路由错误)逐跳通知上游,路径作废重来。

序列号是这份台词本的灵魂。它是单调递增的"信息新鲜度戳":节点只接受序列号更大的路由信息,旧消息(包括绕远路收到的重复信息)自动作废。没有它,AODV 会在拓扑变化后把包沿过期路径送进环里。跳数字段则防止消息无限游荡,同时让路径长度随路建立自然得出。排错时先查这两样:序列号异常(比如被恶意节点篡改,见第6章黑洞攻击)表现为路径"看起来通却送不到";跳数异常则常见于 TTL 配置过小导致远端节点永远找不到。

一段路由表的浓缩结构,帮助把流程落到数据结构上:

路由表项(每目的地一条): 目的地址 D 下一跳邻居 N 跳数 H 目的地序列号 Seq 新鲜度判据,越大越新 生命周期 Timer 到期未刷新即删除 状态标志 有效 或 无效 生命周期默认数秒到数十秒,任何使用都会刷新它

OLSR:会前沟通,开会不吵

OLSR 是链路状态思想在无线环境的改造版。朴素链路状态协议要求每个节点把自己知道的链路泛洪给全网,无线网里这是灾难——泛洪本身就要全网上空口。OLSR 的绝招是多点中继(MPR):每个节点从邻居里挑一个小集合(MPR 集),只让这个集合转发自己的消息,其余邻居收到但不转发。只要 MPR 集覆盖所有两跳邻居,消息仍能到达全网,转发次数却大幅缩减——典型场景下能砍掉六到八成的重复转发。挑谁当 MPR?贪心策略:每轮把"能覆盖最多尚未覆盖两跳邻居"的节点选进来,直到两跳邻居全部被覆盖。

与 AODV 的路径缓存相比,OLSR 换来的是永远在线的路由:发数据查表即走,首包零等待,代价是 HELLO 与拓扑控制消息的持续开销。移动性对两者的影响也截然不同:AODV 断一条路只影响相关流,重新问路即可;OLSR 的拓扑消息周期决定了收敛延迟,高速移动下"路由表永远落后现实半拍"。这也解释了为什么传感器与固定 Mesh 偏爱 OLSR 系,而高动态场景绕着它走。

ZRP:半径的折中

ZRP 把网络切成以每个节点为中心、半径为固定跳数(比如两跳)的 zone。zone 内部跑表驱动协议(IARP),维护完整内部路由;zone 边界上,按需协议(IERP)负责跨 zone 的路径发现——路由请求不盲目泛洪,而是发给各方向的边界节点("边界检测转发"),由它们在自己的 zone 内继续查找,像接力传包裹一样把请求推向远方。zone 半径是唯一的全局参数,也是全部精妙所在:半径太小,跨 zone 通信退化成纯按需;半径太大,退化为纯表驱动。经验上,半径两到三跳在多数场景接近最优,但"最优"本身随通信局部性强度漂移——局部通信越集中,稍大的 zone 越划算。

三协议同场竞技的一次实测

背景:一个校园 Mesh 试验床,六十个节点,其中二十个装在通勤班车上。操作:分别跑 AODV、OLSR 与 ZRP(zone 半径二)各一周,负载为周期性小报文加傍晚高峰的视频流。结果摘要:静态时段 OLSR 的报文投递率最高(约百分之九十九),但控制开销占空口约百分之十二;班车往返时段 AODV 的投递率从九十七掉到八十八,OLSR 掉到八十一,ZRP 掉到八十五且控制开销居中(约百分之七)。解读:稳态网络 OLSR 的"永远在线"物有所值;高动态下按需族的"断了再找"反而稳健;ZRP 两头不拔尖但两头都不崩。变式:把班车节点单独划出来改跑地理辅助路由(车上本就有定位),静态 Mesh 继续 OLSR——异构路由并存比全网统一更有效,这呼应 2.3 的融合思想:协议也可以按域裁剪。

读协议实现的三个入口

想从纸面进入代码,三个入口最有性价比。入口一,邻居表维护(HELLO 收发与过期):所有协议的地基,读懂它就懂了"谁在台上"这个最基础的事实如何维护。入口二,报文判重逻辑(请求标识表、序列号比较):这是防环防抖的闸门,也集中了最多微妙 bug 的地方——特别留意"大于等于还是严格大于"这类比较规则,一行之差就是环路。入口三,超时与重试常量:协议文档里那些不起眼的默认值(路由寿命、重试间隔、缓冲上限)才是工程调优的主战场,也最能反映设计者对时序的取舍。从这三个入口进去,比按代码行序通读快得多。

台词摘录

  • AODV 承重墙:序列号管新鲜度、跳数管游荡、生命周期管过期,三件套缺一出乱子。
  • OLSR 绝招:MPR 用"覆盖两跳邻居"的最小集合压缩泛洪,转发次数砍六到八成。
  • ZRP 半径:唯一参数是 zone 半径,通信局部性决定它的最优值。
  • 动态敏感性:断路时按需族局部恢复,链路状态族整体收敛,这是选型分水岭。
  • 协议可裁剪:同一张网里按域混用协议,往往优于全网统一。

作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U