MANET Routing
为什么不用有线MANET Routing?
- 寻找到可靠的链接需要花费很多能量
- 收敛慢 slow convergence
- 吞吐量低
- 管理中的挑战——移动性 / 带宽限制 / 资源限制(用电)
MANET的组成分类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MNICQhQo-1639587121771)(D:\photo\photolibrary\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzUyNTQyNw==,size_16,color_FFFFFF,t_70.png)]
Table Driven(例如DSDV)
- 保持routing table的实时性,周期性的路由更新
- 每个路由的路由信息都会被记录
- 大量的通信和电力消耗(Substantial signalling traffic and power consumption.)
On-Demanded Driven(例如ABR/AODV)
- source只有为了传输才会创建route
- 当节点需要到目的地的路由时,它将在网络中启动路由发现过程
- 没有周期性的route更新
- power使用相对高效
- 带宽使用相对高效
Destination Sequenced Distance Vector(DSDV)
总体来讲,DSDV协议是对传统的DV协议的一种拓展。
-
每个节点都保持着一张路由表,路由表中的每一项记录了它到目的节点的序列号和距离,也就是 (S,D)
-
给每条路径增加了一个序列号码
-
每个目的节点会定期广播一个单调递增的偶数序列号号码
-
当一个节点到某个目的节点的路径断开时,把到这个节点的距离设为∞,并且将这条路径的序列号加1(此时为奇数),然后向网络中广播这个更新包。
当这条路径修复时,它又将序列号加1然后广播出去(整体+2)。
DSDV
(Destination Sequenced Distance Vector)(没有回环和无穷计数)
(1)DSDV
路由表条目:
Seq.Nr
目的主机的编号install Time
:新的路由条目到来,删除旧的条目的时间stable Data
:指向一张路由表的指针,用来保存路线的稳定性metric
:到达目的地址的跳数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zrcD5QnX-1639587121773)(D:\photo\photolibrary\SouthEast-16370542420199.png)]
(2)DSDV
路由广播:
- 向自己的邻居节点广播自己的路由信息目的地址、
metric
:目的地址的序列号、到达目的地址的跳数 - 设置序列号的规则:每次广播增加自己的目的序列号,如果一个节点不可到达,将这个节点的序列号增加1并且设置metric为无穷大
e.g.
B节点将自己的序列号从B-100增加到B-102,并广播自己的路由信息到其邻居节点A和C
(3)路由选择方法:更新信息与自己的路由表进行比较
- 选择具有**最高路由条目**(序列号)的路由条目(这样保证使用最新的路由信息)
- 当序列号相等的时候选择具有更好metric的路由条目进行路由
(4)拓扑改变的响应方式
- 立即广播:
- 当新的节点进入、链路破坏或者metric改变的时候就立即向邻居节点广播路由信息
- 全部(部分)更新
- ①完全更新:发送所有的路由信息到邻居节点
- ②部分更新:仅发送改变的路由条目
DBF算法(=D.V.)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sUM1iIlz-1639587121773)(D:\photo\photolibrary\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzUyNTQyNw==,size_16,color_FFFFFF,t_70-163705500287611.png)]
路由更新的一种比较好的解决方案:
- full dump(完全转储): 它包含所有可用的路由信息。当本地拓扑发生重大变化(许多节点正在移动)时,就会发生这种情况。
- Incremental Updates(增量更新): 只包含自上一次full dump以后的路由信息。当路由没有观察到重大变化的时候,就会发生这种情况。
DSDV的优点/缺点:
advantages:
- 可以随时读取route->destinations,没有延迟
- 序列号的增量更新使现有的有线网络协议适应于无线网络
disadvantages:
- 在高移动性期间,由于链路中断而导致的更新会导致沉重的控制开销
- 要获取关于特定目标节点的信息,节点必须等待由相同目标节点发起的表更新消息。这种延迟可能导致节点上的路由信息陈旧。
AODV(Ad hoc On-demand Distance Vector Routing)
- 是基于On-Demand的路由协议。
AODV: (Ad hoc On-demand Distance Vector Routing)
-
当一个节点需要给网络中的其他节点传送信息时,如果没有到达目标节点的路由,则必须先以多播的形式发出RREQ(路由请求)报文。
-
RREQ报文中记录着发起节点和目标节点的网络层地址,邻近节点收到RREQ,首先判断目标节点是否为自己。
-
如果是,则向发起节点发送RREP(路由回应);如果不是,则首先在路由表中查找是否有到达目标节点的路由,如果有,则向源节点单播RREP,否则继续转发RREQ进行查找。
-
按需路由协议,只有当到达某目的节点的路由不存在时,才会激起该协议发起路由请求
-
传输层使用的是UDP协议
RREQ传过一次之后节点就不会再传第二次了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vjuNPy3o-1639587121774)(D:\photo\photolibrary\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzUyNTQyNw==,size_16,color_FFFFFF,t_70-163705631161921.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ur5t5TZO-1639587121775)(D:\photo\photolibrary\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzUyNTQyNw==,size_16,color_FFFFFF,t_70-163705633596123.png)]
RREP返回源节点时,会沿路建立之后用来传输的路径(forward links)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TNsEGFYj-1639587121775)(D:\photo\photolibrary\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzUyNTQyNw==,size_16,color_FFFFFF,t_70-163705634981225.png)]
AODV路由帧格式:
-
RREQ(Route Request)–路由请求帧(are flooded in the ad hoc network)
-
RREP(Route Reply)–路由应答帧
-
RERR(Route Error)–路由错误帧
-
HELLO—活跃路由链路检测帧
-
DestSeqNum:确定到目的地的最新路径
-
RREQ路由请求帧
在两个节点之间的路由有效、通信正常的情况下,AODV路由协议不起作用。只有当源节点S需要向目的节点D发送数据包,但又没有D节点的路由入口时,才会发起路由请求,即发送路由广播帧RREQ。当RREQ在网络中传播时,中间节点会更新各自到源节点的路由,我们称之为反向路由。RREQ请求帧中包含源节点以前记录的到目的节点的序列号**(destination sequence num),但此序列号可能不是最新(最大)的。中间节点如果有到目的节点的路由时,只有该节点记录的目的节点序列号比RREQ中的目的节点序列号更大时,才认为这条路由是有效的。**(目的节点序列号>RREQ需要随时更新。)
RREQ包含:
当RREQ最终到达目的节点时,目的节点通过向该反向路由(即该RREQ传播路线)发送RREP应答帧,从而在该条路径的各个节点建立通向目的节点的前向路由(forward links)。
只有在以下情况下才会产生RREP:该节点本身就是目的节点;该节点是中间节点,但是他有通向目的节点的活跃路径。
当RREP传播到源节点时,中间节点根据该RREP更新他们各自指向目的节点的路由信息。节点只对第一次收到的RREQ发送RREP应答帧。
Link Failure
- 只有当某节点位于某活跃路径之上时,他才能发送**Hello消息帧**。
- 活跃路径节点以HELLO_INTERVAL为周期发送Hello消息。
- 当路由表条目中的下一跳链路断开时,所有活动的邻居都会被通知。
- 链路故障通过路由错误(RERR)传播,也会更新目的地序列号。
RERR(Route Error)
- 当节点X在链路(X,Y)上无法转发数据包P(从节点S到节点D);或者在DELETE_PERIOD的时间内没有收到来自邻居节点的Hello message,认为链路失效,它产生一个RERR消息,RERR在传播过程中,IN删除该路径上相应的路由信息。
- 节点X递增缓存在节点X的D的**[目的序列号N](incremented destination sequence number N (递增的目的节点序列数N,类数DSDV的编号,用来确认信息是否最新))**(此时为奇数)。当这条路径修复时,它又将序列号加1然后广播出去(整体+2)。
- 递增的序列号N被包含在RERR
- 当源节点S收到RERR时,它使用至少与N一样大的目的序列号为D发起新的路由发现。
- 当节点D收到目的序列号为N的路由请求时,节点D将把它的序列号设置为N,除非它的序列号已经大于N
路由信息新旧判断
AODV依赖网络中每个节点维护自身的序列号,源节点在广播路由请求帧RREQ之前要更新(增加)自己的序列号,目的节点在产生RREP应答帧之前也要更新(增加)自身的序列号,每个节点在对各自的序列号加1的时候,是将其视为无符号数进行的。通过比较来自目的节点路由控制帧中的序列号SN1和本节点维护的目的节点的序列号SN2,就可以确定本链路的新旧程度。如果SN2-SN1<0(有符号数相减),说明路由表中的维护信息已过时,应将路由信息更新至路由控制帧最新的路由信息。
conclusion:
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
:(expiration n. 到期) 设置这个参数是为了让unused不在路径上的节点
,丢弃这个路由数据route_caching_timeout
: 用来判断什么时候路由已经无效
。此外,活跃节点的地址也会被保留,如果某路由断了,就会找到其他活跃的邻居节点。
- 路由(Route,路由器)不需要包含在包头中。是hop-by-hop routing,不是src-routing
- 节点维护路由表,只包含正在使用的路由的条目。
- 每个节点上每个目的地最多维持一个下一跳。
- 序列号Sequence numbers用于避免旧的/破损的路线。
- 序列号防止形成路由环路。
- 即使拓扑结构不改变,未使用的路由也会过期。(route_caching_timeout)
ABR(Associativity Based Routing)
-
是一种On-Demand路由协议寻找最稳定路由。
稳定性:从邻居那里收到的周期性beacon(信标)的数量, 即结合度(associativity ticks)
-
Stability in ABR refers to :
1)associativity ticks(beacon number)
2)signal strength
3)power life
Neighbour Table
- Node ID
- Ticks(在一段时间内累加beacon的数量)
- Timer(interval of beacon period)
越少的ticks->越差的稳定性->越高的移动性
基本准则
- 迁移过程中,迁移方与邻居的关系发生变化。在这个不稳定的时期之后,存在一个稳定的时期,在此期间,移动主机将在一个无线单元中花费更多的休眠时间,然后再移动。
- 一个移动电话表示,当它与相邻的移动电话的结合度较低(associativity tick)时,其移动状态处于高水平。如果观察到高结合性标记,这意味着主机处于稳定状态,是执行ad hoc路由的理想点。
Athreshold
:为门限值。此值对应的Ticks代表节点出于移动状态最多收到多少BEACON。多于此值则代表节点一定存在没有移动的时间段,所以此为门限值。高于此说明存在稳定器。
ABR
路由决策由目的节点完成,按需路由协议,没有使用中间节点的路由信息(避免路由过时)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZyvHnzEH-1639587121776)(D:\photo\photolibrary\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9rZWFpNjY2MzA=,size_16,color_FFFFFF,t_70.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oDbMWOlN-1639587121777)(D:\photo\photolibrary\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9rZWFpNjY2MzA=,size_16,color_FFFFFF,t_70-163706524415929.png)]
路由选择准则
三条优先级从高到低:
- 相互关系稳定度最高
- 跳数最小路由
- 任选一条:稳定性与cost都相同,随机选择
三个步骤
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vlKYOl3V-1639587121778)(D:\photo\photolibrary\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW9rZWFpNjY2MzA=,size_16,color_FFFFFF,t_70-163706584348531.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V0zEsQGs-1639587121778)(D:\photo\photolibrary\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0hlcm1pX2hidw==,size_16,color_FFFFFF,t_70#pic_center-163706616106833.png)]source
先进行BQ广播(Broadcast Query
),发现邻居都不是DEST
。(destination)
BQ先把经过的点的associativity ticks(相关度,BEACON的数量)记下来,一直携带着往下一位传输。
如果有多种情况,BQ会都记下来,最后遇到dest以后用算法选出最稳定路径。
节点收到BQ后,检查源和序列号,如果都相同就检查节点ID列表;当ID列表中包含自己时,忽略当前BQ,自己重新再发
移除上一个节点的邻居信息,加入自己的邻居信息(节点ID和Ticks)
DEST将在收到第一个BQ数据包后,启动timer等待更多的BQ
REPLY message
DEST的timer过期后,RSA(route select algorithm)选出最佳路径,生成REPLY message单播到源
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7p4uc2K0-1639587121780)(D:\photo\photolibrary\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0hlcm1pX2hidw==,size_16,color_FFFFFF,t_70#pic_center-163706669062535.png)]
实现步骤
- 每个中间节点收到REPLY后检查ID列表
- 如图所示,每个ID列表包含如下信息:
- Aggregate degree of associativity Stability(The total number of ticks, 对ticks的求和)
- Route Length(indicating how many hops the chosen routes have总共经历过多少route)
- Aggregate Route Relaying Load(indicating how busy each node along the route表示每个经过的route的负载)
- Cumulative Forwarding Delay(信息的delay)
- 如果在表中:位于自己左边的是REPLY发送的方向(reply向左传播),右边的是数据上传方向(之后数据向右传播)(放入路由表)
- 如果不在表中:检查源ID和目标ID,清除之前收到的相应BQ
数据流确认
被动:S将A发送给B的信息作为识别
主动:D主动发送ACK
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KkCX0dXu-1639587121781)(D:\photo\photolibrary\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0hlcm1pX2hidw==,size_16,color_FFFFFF,t_70#pic_center-163706696232037.png)]
(Route ReConstruction phase )路由重建
移动设备(源/目标/中间节点)从原有位置离开时,激活RRC
ABR route recovery is fast because it uses partial route discovery(ABR 路由恢复速度快,因为它使用部分路由发现)除非必要,RRC 不会再次产生 BQ。
中间节点移动
以上臂节点移动为例,下臂同理。
上臂指的是从半程位置到目的节点的一半路由。设节点A在移动。A的紧邻上行节点(转动节点)删除到A的输出条目,A的下行节点同理。转动节点启动LQ[H]进程,目的节点有可能会接收到多个LQ分组,从中选择一条最佳路由,回送给转动节点。此时从转动节点到目的节点的所有中间节点都更新其路由表RT。如果转动节点不存在到目的节点的路由,则后撤至转动节点的上行节点,一直到能找到路由为止。
-
Pivoting node (上一跳的节点)生成Local Query(LQ)
LQ包括:Pivoting node ID,目标,序列号,邻居信息(节点ID和Ticks),限制跳数(pivoting node到destination的距离/LQ可移动的距离)
通过total route length和ID列表,中间节点可以算出自己与目标相离的跳数
Pivoting node通过限制跳数找到能保持原有跳数的新路径 -
Pivoting node的邻居收到LQ后,检查,如果没有目标的记录则移除上一个节点(此时是Pivoting node)的邻居信息,加入自己的邻居信息,将限制跳数(可移动距离)减一,重新广播LQ(类似局部BQ)
-
DEST收到第一个LQ后启动timer,等待更多的LQ
-
DEST的timer过期后,RSA(route select algorithm)选出最佳路径,生成Local REPLY单播到Pivoting node
Pivoting node收到Local REPLY后,新路径建立成功 -
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VWkpNWVw-1639587121782)(D:\photo\photolibrary\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0hlcm1pX2hidw==,size_16,color_FFFFFF,t_70#pic_center-163706737604439.png)]
目的节点移动
目的节点的紧邻上行节点(转动节点,也是源路由的最后一跳节点)删除到达目的节点的路由,运行**目的节点寻找进程(LQ[H]),如果目的节点收到这条LQ消息,则返回REPLY消息,从而更新路由;如果目的节点未收到**,产生超时错误,转动节点后撤到上一跳(此时是源路由的倒数第二跳节点)。一直往复下去,直到找到一条新路由或者转动节点已经撤回源路由的一半长度为止。
- 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 删除**
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NUkwvJHy-1639587121783)(D:\photo\photolibrary\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0hlcm1pX2hidw==,size_16,color_FFFFFF,t_70#pic_center-163706924613341.png)]
源节点移动
每次源节点移动后**初始化路由寻找进程**
- SRC广播BQ
- SRC原来的下一跳生成RN[1]发送到DEST,收到RN[1]的IN会删除RT里相应路由信息[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GL4TXntL-1639587121783)(D:\photo\photolibrary\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0hlcm1pX2hidw==,size_16,color_FFFFFF,t_70#pic_center-163706926385443.png)]
Concurrent Nodes Movements
- 结果多次调用路由重构、RRC
- SRC将发送BQ删除无果的重建(参见后面的路由删除)
- 最终只有一条路线重建成功。
Movement of Subnet Bridging Mobile Host
- M的移动会导致移动网络被分割。
- 如果现有的临时路由都在每个子网内,则不需要RRC。
- 如果路由跨越子网,M的移动会导致网络被分割,需要进行BQ-REPLY循环。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eDBLtksr-1639587121784)(D:\photo\photolibrary\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0hlcm1pX2hidw==,size_16,color_FFFFFF,t_70#pic_center-163706936038445.png)]
当发现的路由不再需要时,SRC将启动路由删除(RD)广播【是一个定向广播direct broadcast】,以便所有INs将更新它们的路由表条目。
当SRC不再需要路由时,启动路由删除(RD)广播。
硬状态:SRC广播RD信息
=>所有的IN都会更新路由表:释放资源,避免保留陈旧的路线
软状态:当一段时间内没有与路由相关的流量活动时,基于定时器。这种方式是在路由中的每个节点进行的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fgULgnna-1639587121785)(D:\photo\photolibrary\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0hlcm1pX2hidw==,size_16,color_FFFFFF,t_70#pic_center-163706948787547.png)]
对比
低移动性或少量包裹发送时,更新是无效的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D1me9npS-1639587121785)(D:\photo\photolibrary\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0hlcm1pX2hidw==,size_16,color_FFFFFF,t_70#pic_center-163706951759151.png)]
Pro-active
->table-driven
Reactive
-> on-demand