【概述】
分区路由协议(Zone Routing Protocol,ZRP),是目前最常用的分层路由协议
在 ZRP 协议中,整个网络被分成若干个以节点为中心、一定跳数为半径的分区,分区内的节点数与设定的域半径有关
域半径和路由域的定义如下:
- 域半径(Zone Radius):指定每个节点维护的域,以跳计数
- 路由域(Routing Zone):所有包含在域半径内的节点
- 边界节点(Border):最小距离正好等于域半径的节点
ZRP 协议只允许目的域内的节点应答,延长了源节点获得路由的时间,其不仅需要周期性地广播分组,还需要消耗一定的电源能量和网络带宽,此外,路由域半径的设置将直接影响路由的效率,而每个节点可动态自动配置自己的优化域半径
由于 ZRP 协议混合的独立域路由框架,使得其支持节点非统一的独立配置,其能够较好地适应网络的时空特性,同时,自适应的架构重构能力使得在网络特性的变化方面更加鲁棒,令协议具有很好的扩展性
【域路由架构】
ZRP 协议混合使用了主动路由策略和按需源路由策略,对于域内的节点通信,使用域内路由协议;对于跨域节点通信,使用域间路由协议;对于边界结点通信,使用边界传播协议
- 区内路由协议( IntrAzone Routing Protocol,IARP):采用传统的主动路由法,其支持距离向量和链路状态两种路由策略,节点之间通过周期性地交互路由表获得到 Zone 内各节点的最新路由
- 区间路由协议( IntErzone Routing Protocol,IERP):采用按需路由协议,负责寻找区外节点的路由
- 边界传播协议( Bordercast Resolution Protocol,BRP):使得路由查询分组只在边界节点之间广播
对于域内路由的维护,会周期性地交换路由信息;对于域间路由的维护,当链路断开时,节点可以通知源节点,也可以进行局部查找路由,查找方法与域间路由协议中的路由查找相同,只是查找的范围较小
【IARP 协议 】
IARP 协议用于域内节点通信,其采用主动策略维护本地路由信息
构造路由域的前提是了解自己的邻居,有两种方法:
- 通过 MAC 协议
- 通过邻居发现协议(NDP 协议)
每个节点给域内一些节点发送区域构建数据包(Zone Building Packets),使得节点了解自己的发送域
同时,每个节点将路由更新包的 TTL 设置为域内最远节点的距离
【IERP 协议】
IERP 协议用于域间节点通信,域间路由发现基于 BRP 协议,按需发现全局路由
当本地没有数据报的目的地路由时,会进行路由发现过程:
- 数据报源产生一个路由查询包,利用边界广播算法来确定该查询包的一组节点中继
- 对于收到查询包的节点,会检查目标节点是否在自己的路由域中,或者检查本地路由 Cache 中是否存有目标路由信息
- 若有,则会返回一个路由响应包给源端,若没有,则会边界广播查询包
需要注意的是,对于 IERP 协议,其会利用边界广播机制来确定节点中继:
- 源节点 $S$ 构造字节的边界广播树
- $S$ 根据未覆盖的外围节点选择再广播节点
- $S$ 通过转发节点发送查询包给再广播节点
- 再广播节点收到查询包后,自己就变成边界广播节点
- 重复上述过程
【BRP 协议 】
BRP 协议使用 IARP 提供的拓扑信息,组播路由查询包到外围节点,广播接收者(Bordercast)在边界广播查询到自己的外围节点,直至发现一条到目标的路由
关于 BGP 协议的详细介绍,见:BGP 协议
【实例】
假设域半径为 $2$,源节点为 $S$,目标结点为 $M$,那么 $S$ 的域中结点为:$Z(S)=\{A,B,C,D,E,F,G,H\}$
如果目的节点不属于 $Z(S)$,则源节点 $S$ 发路由请求给本域的边界节点 $\{H,G,B,C,E\}$,然后这些节点在各自的路由域中查找是否有到目的地的路由
如果目标节点在某个边界节点的区中,则该边界节点给源节点 $S$ 发送路由应答消息,然后 $S$ 在可能的多个路由应答消息中选择一条最短路由