Ad Hoc 网络路由协议
Ad Hoc 网络路由面临的问题
在设计Ad Hoc 网络路由协议时,我们首先要明确可能面临的问题:
(1)路由信息不易获得:定期交换路由信息的开销大、网络资源有限,并且必须被所有节点共享、节点资源(电池、CPU)等有限、也许不能接收到所有的路由信息。
(2)路由信息不完整:移动和分区很难将信息分发到一个没有固定成员网络的所有节点。
(3路由信息可能过期:不可能连续地或者立即交换信息、节点随时移动、无线传播变化大。
MANET(Mobile Ad Hoc Net)对路由协议的需求
收敛迅速、提供无环路由、控制管理开销小、对终端无过高要求、支持单向信道、尽量简单实用。
为什么不能把传统的路由协议直接用于Ad Hoc 网络呢?
(1)Ad Hoc 网络具有动态变化的网络拓扑结构,可能有节点加入、离开、移动的情况,这样的话路由算法还未收敛,网络拓扑结构就发生变化。
(2)Ad Hoc网络的系统带宽、能量等资源是有限的,传统的路由协议会周期性地通告,这样的话会严重降低系统的性能。
(3)Ad Hoc需要间歇性的网络分割,传统的路由协议用于Ad Hoc网络容易形成回路。
(4)Ad Hoc是支持单信道无线传输的,而传统路由协议一般假设链路是对称的。
Ad Hoc 路由协议的性能指标
(1)端到端数据吞吐量和延时 ,反映了数据的传输质量。
(2)路由获取时间-有数据要发送到发送出去的时间。
(3)乱序分组发送率-衡量无连接路由协议应用于需要有序发送的传输层协议。
(4)路由协议的效率-路由控制消息/发送数据。
Ad Hoc 路由分类结构
、、
|| 表驱动(Table Driven)/ 先应式(Proactive)路由
what? 每个节点维护到网络中所有其它节点的路由、所有节点都已存在并且随时可用。
feature? 路由延时小,但是路由开销大。
@ DSDV(Destination-Sequenced Distance Vector)
※ 先应、逐跳转发、DV
※ 传统DV的不足?
开销大;可能出现环路——浪费网络带宽、为消除环路需要额外开销、 对拓扑变化适应慢。
※ feature?
(1)利用目的地序列号来解决无穷计数问题。
(2)路由更新——周期性通告、检测到链路变化就突发性通告。
(3)简单易实现(RIP的优点)
(4)用于对称链路。
※ 如何解决无穷计数问题呢?
思考环路问题解决的关键是什么??是传递信息的不全,无法区别路由表项的新旧。
解决办法:设置目的序列号——每个节点设置序列号(路由通告携带序列号),各节点只保存最新序列号的目的表项。
、、
※ 通告机制 ?
(1)周期性通告与突发性通告——尽快通告路由变化
(2)整体通报与增量通报(减少路由开销)——局部采用增量通报
(3)限制不稳定的路由通报,防止路由震荡。
※ 什么是路由震荡以及如何解决这种问题??
@ FSR : Fisheye State Routing Protocol
L-S、减少路由开销。
※ 基本思想: 局部拓扑、了解远地拓扑。不使用flooding。时间驱动代替事件驱动。
※ Fisheye技术: 不同距离节点的链路状态路由表项的交互频率不同:与近距离节点的链路状态的交互频率高,维护精确的拓扑信息;与远距离节点的链路状态的交互频率低,拓扑不精确。
※ 存在问题??
(1)路由不是全局最优——远离目的节点时,路径信息不全面准确。
(2)不适用于规模较大的网络——收敛时间长、存在许多不稳定的路由。
|| 按需(On-demand)/ 反应(Reactive) 路由
what? 源节点根据需要通过路由来发现过程来确定路由,控制消息采用洪泛(Flooding)方式。
feature?路由延时大,但是路由开销小。
※ 实现技术: 源路由(分组携带完整的路由信息)
逐跳(Hop-by-Hop)路由
比如 DSR、AODV、DYMO协议
※ 什么是数据洪泛??有什么优缺点??
优点:
(1)简单
(2)当信息传输需求足够低时,可能比其他协议更高效——因为其他协议所产生的显式路由发现、维护的开销是相对较高的
(3)潜在的更高的数据传输可靠性——因为分组可能会通过多条路径传输到目的地。
缺点:
(1)潜在的高开销——数据分组可能会被传输到太多并不需要接受它的节点。
(2)潜在的数据传输的低可靠性——潜在的冲突
所以,基于上述内容,许多协议执行控制分组洪泛,而不是数据分组:
控制分组是发现路由的,发现路由后用于发送数据。
@ DSR Dynamic Source Routing
※ DSR中的假设
- 所有节点都愿意转发分组到网络中的其他节点
- 自住址网络不会太大(如果路由非常长,分组首部将超过有效负荷)
- 节点的速度是缓慢的(如果节点的速度很快,本地的路由缓存将过期)
- 所有节点都能收听到(混杂)不节能
※ 操作步骤
(1)节点S洪泛路由请求(RREQ:Route Request),RREQ包括
<目的地址、起始地址、路由记录、请求ID>。
(2)当节点Y收到一个RREQ时,可能进行如下三种操作:
- 丢弃——若<起始地址、请求ID>已经在它的表中。
- 返回一个包括从起始地到目的地路由的路由响应分组——如果Y已经是目的地或者Y的路由缓存中存在一个到目的地的路由
- 不是以上情况的话就在RREQ的路由记录中附上自己的地址并重新广播RREQ。
(3)目的节点D收到该RREQ后,会回送RREP(Route Reply),RREP中包含RREQ中的地址列表。当节点S收到RREP后,会将RREP中的路由缓存起来,在节点S发送一个数据分组到D时,整条路由将包含在分组首部中。
注意: 如果单向的链接是允许的,那么RREP可能需要一个从节点D到节点S的路由发现(除非节点D已经知道一条到节点S的路由),在D的路由请求中会捎带路由响应。
※ 路由维护 ??
也可以分为逐条维护、端到端的维护。
※ 路由优化??
每个节点通过任何方式学习到一个新路由都会将其缓存起来
比如
但是问题在于: 过期的缓存无论从资源方面还是时间方面都会使系统增大开销。
- 加速路由发现 ????
路由缓存的优点: 可以减少路由请求的传播(从K到Z的响应RREP限制了RREQ的洪泛),加速路由发现。
※ summary
DSR优点:
- 只需要在交流节点之间维护,减少路由维护的开销。
- 路由缓存可以进一步减少路由发现的开销。
- 一个单一的路由发现可能产生多条路由到目的地,因为中间的节点根据本地缓存进行响应。
DSR缺点:
- 分组首部大小随路由长度的增大而增大,因为源路由开销大。
- 路由请求的洪泛可能会到达网络中的所有节点
- 邻居之间生成的路由请求可能会产生碰撞(在转发RREQ之前要产生插入的随机延迟)
- 路由响应风暴:节点根据自己本地的缓存产生了太多的路由响应。
- 过期的缓存将增大开销。
@ AODV (Ad Hoc on-demand DV)
许多文献称之为DSDV的反应式版本;是逐条转发协议的,中间节点根据目的地址确定“下一跳”地址;采用标准IP报头:源地址,目的地址;
下面介绍AODV的路由行为——路由发现(请求、应答)、路由维护
※ 路由请求???
-
源点:
广播到指定节点的路由请求消息(RREQ)
<源地址、请求ID、目的地址、源序列号、目标序列号、跳计数> -
中间节点:
step1:比较源地址+请求ID,重复则丢弃。
step2:如果是目的节点,直接回复RREP
step3:查找自己的路由表,如果有到达目的节点的路由,且对应的序列号大于或等于RREQ中的目标序列号(最新的已知),回复RREP。
step4:创建到源节点的“下一跳”表项(假设为双向链路),记录跳数,构造反向路由,启动反向路由定时器。
step5:向目的节点转发(广播)路由请求,跳计数加1。
※ 路由应答???
-
目的节点向源节点发送路由应答(RREP)消息
RREP中包含序列号(RREQ中的源和目标序列号在RREP中调换)、跳数计数(初始为0),RREP沿着RREQ消息的路径反向传输。
-
中间节点:
收到RREP以后,创建到目的节点的“下一跳”表项,记录跳数,建立向前路由。RREP的“跳数计数”字段加一,沿着反向路径转发消息。清除相应的反向路由定时器,将反向路由加入路由表
- 源节点:
选择最小跳数的路径(下一跳)
AODV只维护一条路由。
注意:
源序列号是保证反向路由的有效性,因为在反向路径中,源序列号就是目的序列号。
目的序列号是保证前向路由的有效性,用于告知中间节点当前源节点所了解的关于目的节点的路由信息(前向)的最新的序列号。
反向路由定时器是为了去除那些没有使用到的反向路由。
※ ※ 路由维护???
- 路由表项 : 目的地址、前继、下一跳、跳数、序列号
- 更新的依据: 序列号大或者短路由
- 每个节点维护非递减的序列号——在RREQ、RREP消息中发送,每个新消息加2,作为路由表项的“时间戳”,保留最新消息
- 若中间节点表项的序列号大,或者序列号相同但到目的节点的距离更短,则向源节点发送RREP(路由表项设置生存期定时器,到期删除该路由,用到时再复位;反向路由定时器超时,还未收到相应RREP,则删除相应路由)
- 产生路由错误消息(RERR)会向前继发送
※ 性能比较 ???
- 报文长度—— DSR长于AODV
- 路由开销 ——拓扑稳定时,DSR可以发现多条路由;拓扑不稳定时,DSR多条路由可能都是“脏”路由,不一定优于AODV。当然因为DSR具有路由缓存功能,所以DSR有更少的RREQ广播,但是会有更多的RREP以及RERR。
那么怎样清除脏路由呢??DSR没有定时机制;AODV使用定时机制
- 错误报告——DSR通知目前route上的前继节点以及源节点。AODV主动通知所有用过此link的前继节点。
- 节点较少,低负荷,节点移动性小——DSR,有备选路由;反之,DSR的备选路由可能都是错误的,DSR对链路错误的反应速度慢。
|| battle一下~
|| 两者杂交体——混合路由
|| 其他分类
地理定位辅助路由协议——能提高路由性能,适合拓扑结构高度动态变化(比如车联网),缺点是实现成本高,路由协议比较复杂。
典型的有 LAR、DREAM、GPSR、DV-MP、FORP等
多路径路由协议——优点是以低成本提供足够的冗余度,平衡网络负载,提高分组交付的可靠性,缺点是复杂度高,开销大。
典型的有 AOMDV、SMR、MP-DSR、MSR、TBRPF、CHAMP。
作业1
- 什么是先应式路由协议?什么是反应式路由协议?他们各有什么特点?
先应式(Proactive)路由协议:
定义——沿用传统的分布式最短路径协议(距离向量或者是链路状态,所有节点周期性地更新“可达”信息),每个节点维护到网络中其他节点的路由,所有的路由都已经存在并随时可以使用。
特点:路由延时小,但是路由开销大。
反应式(On-demand)路由协议:
定义——源节点需要路由发现过程来确定路由,控制消息采用洪泛方式。
特点——路由延时大,但是路由开销小。
- 什么是源点选路?与逐跳转发相比,源点选路有什么优缺点?
通过洪泛路由请求信息确定好一条完整的转发路径。发送节点在路由分组首部封装完整的路由信息,中间节点按照分组首部的源路由来转发分组。
优点: 可以获得多条路由,网络拓扑稳定时,开销较小,更加可靠。
缺点:
(1)在网络规模较大时,会导致分组较长,增大开销。
(2)一条路径出错时,需要反馈到源节点进行处理,对错误的反应时间比较长。
(3)网络拓扑不稳定时,通过源点选路获得的多条路由可能都是“脏”路由。
- DSDV和FSR都是表驱动路由协议,它们有什么区别?
DSDV是距离向量路由协议,FSR是链路状态路由协议。
- DSDV如何避免环路,提高“坏消息”传播速度?
Destination sequence DV,通过设置目的序列号,每个节点设置序列号(路由通告携带序列号),各节点只保存最新序列号的目的表项。正常情况下序列号都是偶数,当某一节点检测到邻居链路失效时,将其目的序列号加一变为奇数,更新后通告其他节点。
- FSR用什么方法减少路由开销?
与近距离节点的链路状态交互频率高,维护精确的拓扑信息;与远距离节点的链路状态交互频率低,拓扑不精确。关注局部拓扑,了解远地拓扑。
作业2
- DSR和AODV都是按需路由,它们有什么区别?
(1)路由方式上,DSR是源点选路,AODV是逐跳转发。
(2)所维护路由上,DSR维护多条路由,AODV只维护一条。
(3)链路上,DSR支持单向或双向链路,AODV仅支持双向链路。
(4)定时机制上,DSR无定时机制,AODV有定时机制来消除无效路由。
(5)出现错误时,DSR仅在有分组需要发送时通知目前route上的前继节点以及源节点,AODV主动通知所有用过此条链路的前继节点。
(6)表项方面,DSR中包含从源节点到目的节点的完整路由,AODV表项中有目的地址、前继、下一跳、序列号等。
- AODV为什么只能支持双向链路?DSR为什么可以支持非对称链路?
因为路由发现过程中,创建到下一跳的表项时,会构造反向路由,同时启动反向路由定时器用以消除无效路由。路由应答RREP只能沿着RREQ消息的路径反向传输,所以AODV只能支持双向链路。
DSR路由请求RREQ在路由发现完毕后会携带整条路由的完整信息,回复RREP时可以进行再次路由发现,只要路由请求中携带路由的完整信息即可,所以DSR可以支持非对称链路。
- 为什么AODV里面要设置一个反向路由定时器?
因为AODV源节点只保留一条路径,路由发现的过程中RREQ可能到达了很多节点,但是路由应答RREP只经过一条路径,设置反向定时器可以消除那些RREP没有经过的无效路由。
- 高度动态的网络拓扑下,DSR和AODV谁更加合适?为什么?
AODV更加合适。
(1)因为网络的高度动态变化,DSR维护的多条路由可能已经是“脏”路由。
(2)在错误处理上,DSR遇到链路错误时需要汇报到源节点,对错误的反应时间较AODV长。
- 在混合路由中,区域内和区域间各自适合什么类型的路由,为什么?
区域内采用表驱动路由
因为区域内交互频繁,表驱动路由的路由表已经创建,数据发送不需再去路由发现,只需定期的维护,因此区域内数据交互的时延会比较小,效率比较高。
区域间采用按需路由。
因为区域间交互较少,需要发送数据时才去进行路由发现,这样可以减少系统开销。