Ad Hoc Networks TOPIC FOUR
正文:
为什么不用有线MANET Routing?
- 路由是MANET中的主要挑战之一。
=>节点的高流动性导致链路随意中断
=>高动态拓扑结构。 - 寻找到可靠的链接需要花费很多能量
- 收敛慢 slow convergence
- 吞吐量低 Little throughput
- Signs of instability due to count-to-infinity problem.(?)
- 管理中的挑战——移动性 / 带宽限制 / 资源限制,用电
Hidden terminal
问题原因:A与C不互通,因此AB通信时会受到来自C的干扰,反之亦然
解决办法:与MAC layer protocol协作,发送信道繁忙/中断信息
Exposed terminal
问题原因:S2因收到来自S1的信号,放弃与R2的通信
解决办法:?
MANET的组成分类
Table Driven(例如DSDV)
- 保持routing table的实时性,周期性的路由更新
- 节点的所有路由信息都会被记录,无论是否需要,以备后用
- 大量的通信和电力消耗(Substantial signalling traffic and power consumption)
On-Demanded Driven(例如ABR/AODV)
- source只有为了传输才会创建路由
- 当节点需要到目的地的路由时,它将在网络中启动路由发现过程
- 没有周期性的route更新
- 功率高效
- 带宽高效
一、DSDV(Destination Sequenced Distance Vector)
- 总体来讲,DSDV协议是对传统的DV协议的一种拓展。
- 基于DBF(Distributed Bellman-Ford)算法
- DSDV每个节点都保持着一张路由表,路由表记录了到目的节点的距离和下一跳(无论此时是否有通信需求)
- 一个顺序编号系统(给路线打上标签)用于区分已有路线和新路线
- 每个目的节点会定期广播一个单调递增的偶数序列号号码(但这会造成网络资源浪费)
DBF算法(Distributed Bellman-Ford)
路由更新的一种比较好的解决方案:
- DBF中每个节点记录到达其他节点最短路径的下一跳
路由表更新类型
- Full Dump:它包含所有可用的路由信息。当本地拓扑发生重大变化时(许多节点发生移动),就会发生这种情况。
- Increment Update:只包含自上一次full dump以后的路由信息。当路由没有观察到重大变化的时候,采用这种方式。
基本准则
- 序列号(sequence number)标识新路由信息
- 以跳数为cost
- 节点跟踪自己的时间和事件发生的顺序以进行更新
- 每个节点需要为反映其邻居信息的距离向量更新分配序列号
假设节点A向节点B发送了一个信息(SeqA,DistA),B在更新前的状态是(SeqB,DistB)。在收到信息后,B将按照如下方式进行更新:
- 当SeqA>SeqB
序列号的更新以序列号较大的为准,距离也变成DistB = DistA + d(A, B)。 - 当SeqA=SeqB
比较DistB 和 DistA + d(A, B) ,选择较小的值作为新的DistB。如果需要经过A到达目的节点,将设置A为下一跳。
优点/缺点
Advantages:
- 可以随时读取route->destinations,没有延迟
- 序列号的增量更新使现有的有线网络协议适应于无线网络
Disadvantages:
3. 在高移动性期间,由于链路中断而导致的更新会导致沉重的控制开销
4. 要获取关于特定目标节点的信息,节点必须等待由相同目标节点发起的表更新消息。这种延迟可能导致节点上的路由信息陈旧。
二、AODV(Ad hoc On-Demand Distance Vector Routing)
是基于On-Demand的路由协议,只有当到达某目的节点的路由不存在时,才会发起该协议发起路由请求,也就是有路由请求时才激活。
- 寻找最短(最快)路由路径。
- 传输层使用的是UDP协议。
实现步骤
- 当源节点需要给网络中其他节点发送信息时,首先检查路由表是否有目标节点,如果没有则向邻居广播RREQ(Route Request)(RREQ报文中记录着源节点和目标节点的网络层地址,还有当前RREQ的序列号)
为什么需要RREQ序列号:避免loop;判断新鲜
-邻居节点收到RREQ,检查RREQ序列号和源,以判断是否首次收到当前RREQ
–如果是:检查目标是否是自己,是否在自己的路由表中
------如果不是自己 ||不在:重新广播RREQ(有着相同的源和序列号),同时建立指向源节点的逆向路径(指向当前RREQ的首次发送节点,第二次及以后收到的RREQ将被丢弃)(优点:便于区分loop和new;便于建立源到目标的最短路径,因为永远只接收到达最快的请求)
----如果不是自己但是在路由表中(之前发生过通信而保留的路径):向源发送RREP(Route Reply)
reverse path 保存在哪?之前保存的RREQ吗?
----如果是自己:不再重新广播,生成RREP(源与目标正好与RREQ相反)
-----某个节点收到RREP,它意识到自己是天选之子(逆向路径的一员),它将根据RREP的源和目标建立指向发送当前RREP的节点的上传路径(作为路由信息保存在路由表中),上传路径在RREP的发送过程中被建立
-最初的源节点收到RREP后,根据最终形成的上传路径发送信息
流程图
RREQ&RREP
所有节点都是:先转发广播,再判断目标是不是自己?否,先判断,如果是就不广播了
- Intermediate Node也会发送一个RREP,只要它拥有比发送者以前记录的更近的路径
- RREQ包含了源节点已知最新的目标节点的序列号
- 没有收到RREP的节点将在一段时间后清除收到的EERQ
上传路径中的节点也会定时清除逆向路径吗?
- 源节点在一段时间内(active_route_timeout)没有通过上传路径发送数据,上传路径将被清除
Link Failure
- 邻居节点周期(HELLO_INTERVAL)交换hello消息。
- 当路由表条目中的下一跳链路断开时,所有活动的邻居都会被通知。
- 链路故障通过路由错误(RERR)传播,也会更新目的地序列号。
RERR(Route Error)
- 当节点X在链路(X,Y)上无法转发数据包P(从节点S到节点D);或者在DELETE_PERIOD的时间内没有收到来自邻居节点的Hello message,认为链路失效,它产生一个RERR消息,RERR在传播过程中,IN删除该路径上相应的路由信息。
- 节点X递增缓存在节点X的D的目的序列号(此时为奇数)。当这条路径修复时,它又将序列号加1然后广播出去(整体+2)。
- 递增的序列号N被包含在RERR
- 当节点S收到RERR时,它使用至少与N一样大的目的序列号为D发起新的路由发现。
- 当节点D收到目的序列号为N的路由请求时,节点D将把它的序列号设置为N,除非它的序列号已经大于N
总结
RREQ: SrcID, DestID, SrcSeqNum, DestSeqNum, BcastID, TTL
Path Discovery:
- Reverse-Path Setup:为了让RREP返回源
- Forward-Path Setup:收到RREP后,为了发送数据而建立
Path Maintenance:
- hello message:维护邻居关系
- timer:判断是否active
No local path reconstruction:发生link failure后源节点发起新的Path Discovery,而不是局部修复(?)
两个Timer:
route_request_expiration_timer:设置这个参数是为了让不在路径上的节点,丢弃这个路由数据。
route_caching_timeout:用来判断什么时候路由已经无效。此外,活跃节点的地址也会被保留,如果某路由断了,就会找到其他活跃的邻居节点。
- 路由不需要包含在包头中。
- 节点维护路由表,只包含正在使用的路由的条目。
- 每个节点上每个目的地最多维持一个下一跳。
- 序列号用于避免旧的/破损的路线。
- 序列号防止形成路由环路。
- 即使拓扑结构不改变,未使用的路由也会过期。
三、ABR(Associativity Based Routing)
是一种On-Demand路由协议。寻找最稳定路由。
- 稳定性:从邻居那里收到的周期性beacon(信标)的数量
Stability in ABR refers to :
1)associativity ticks(beacon number), or some params to add
2)signal strength
3)power life
Associativity Ticks
Neighbour Table
- Node ID
- Ticks(在一段时间内累加beacon的数量)
- Timer(interval of beacon period)
越少的ticks->越差的稳定性->越高的移动性
基本准则(?)
- 迁移过程中,迁移方与邻居的关系发生变化。在这个不稳定的时期之后,存在一个稳定的时期,在此期间,移动主机将在一个无线单元中花费更多的休眠时间,然后再移动。
- 一个移动电话表示,当它与相邻的移动电话的结合度较低(associativity tick)时,其移动状态处于高水平。如果观察到高结合性标记,这意味着主机处于稳定状态,是执行ad hoc路由的理想点。
三个步骤
1. 路由寻找(Route Discovery Phase)
DEST选择最稳定的路由:
- 高稳定性与低移动性
- 稳定性相同的情况下选择cost少的路径
- 稳定性与cost都相同,随机选择
BQ(Broadcast Query)
- source先进行BQ广播(Broadcast Query),发现邻居都不是DEST。
- BQ先把经过的点的associativity ticks记下来,一直携带着往下一位传输。
- 如果有多种情况,BQ会都记下来,最后遇到dest以后用算法选出最稳定路径。
- 节点收到BQ后,检查源和序列号,如果都相同就检查节点ID列表;当ID列表中包含自己时,忽略当前BQ
- 移除上一个节点的邻居信息,加入自己的邻居信息(节点ID和Ticks)
- DEST将在收到第一个BQ数据包后,启动timer等待更多的BQ
REPLY message
DEST的timer过期后,RSA(route select algorithm)选出最佳路径,生成REPLY message单播到源
结构
实现步骤
- 每个中间节点收到REPLY后检查ID列表
- 如果在表中:位于自己左边的是REPLY发送方向,右边的是数据上传方向(放入路由表)
- 如果不在表中:检查源ID和目标ID,清除之前收到的相应BQ
数据流确认
被动:S将A发送给B的信息作为识别
主动:D主动发送ACK
2. RRC(Route ReConstruction phase )
移动设备(源/目标/中间节点)从原有位置离开时,激活RRC
- partial route discovery to make it locally and fast
- RRC does not produce BQ again unless necessary – avoids excessive control overhead and disturbing unconcerned nodes.
场景一:IN moves
- Pivoting node (上一跳的节点)生成Local Query(LQ)
LQ包括:Pivoting node ID,目标,序列号,邻居信息(节点ID和Ticks),限制跳数(LQ可移动的距离)
通过total route length和ID列表,中间节点可以算出自己与目标相离的跳数
Pivoting node通过限制跳数找到能保持原有跳数的新路径
- Pivoting node的邻居收到LQ后,检查,如果没有目标的记录则移除上一个节点(此时是Pivoting node)的邻居信息,加入自己的邻居信息,将限制跳数减一,重新广播LQ
- DEST收到第一个LQ后启动timer,等待更多的LQ
- DEST的timer过期后,RSA(route select algorithm)选出最佳路径,生成Local REPLY单播到Pivoting node
- Pivoting node收到Local REPLY后,新路径建立成功
场景二:DEST moves
- Pivoting node (目标上一跳的节点)生成LQ[1](限制跳数为1)并启动timer,等待REPLY
- 超时未收到后,ABR要求Pivoting node发送RN[0](Route Notification)到其上一跳(Second Pivoting node)或重新发送几次LQ[1](取决于具体设计)
RN[0]代表发送方向为SRC
RN[1]代表发送方向为DEST
-
Second Pivoting node发送LQ[2](限制跳数为2),直到找到通向DEST的路径,同上
-
当Local Repair进行到total route length的一半仍未成功,不再进行Local Repair,生成RN[0]发送到SRC请求新的BQ
-
当IN moves发生在后半程,将启动LQ;发生在前半程,直接发送RN[0]请求新的BQ,其中收到并上传RN的节点会将路由信息从RT 删除
场景三:SRC moves
- SRC广播BQ
- SRC原来的下一跳生成RN[1]发送到DEST,收到RN[1]的IN会删除RT里相应路由信息
Concurrent Nodes Movements
- 结果多次调用路由重构、RRC
- SRC将发送BQ删除无果的重建(参见后面的路由删除)
- 最终只有一条路线重建成功。
Movement of Subnet Bridging Mobile Host
- M的移动会导致移动网络被分割。
- 如果现有的临时路由都在每个子网内,则不需要RRC。
- 如果路由跨越子网,M的移动会导致网络被分割,需要进行BQ-REPLY循环。
3. RD(Route Deletion Phase)
当发现的路由不再需要时,SRC将启动路由删除(RD)广播【是一个定向广播direct broadcast】,以便所有INs将更新它们的路由表条目。
- 当SRC不再需要路由时,启动路由删除(RD)广播。
- 硬状态:SRC广播RD信息
=>所有的IN都会更新路由表:释放资源,避免保留陈旧的路线 - 软状态:当一段时间内没有与路由相关的流量活动时,基于定时器。这种方式是在路由中的每个节点进行的。
对比
低移动性或少量包裹发送时,更新是无效的