Ad Hoc Networks TOPIC FOUR <MANET Routing>【Personal Notes】


正文:

为什么不用有线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协议的一种拓展。
  • 基于DBFDistributed 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
    比较DistBDistA + d(A, B) ,选择较小的值作为新的DistB。如果需要经过A到达目的节点,将设置A为下一跳。
    在这里插入图片描述

优点/缺点

Advantages

  1. 可以随时读取route->destinations,没有延迟
  2. 序列号的增量更新使现有的有线网络协议适应于无线网络

Disadvantages
3. 在高移动性期间,由于链路中断而导致的更新会导致沉重的控制开销
4. 要获取关于特定目标节点的信息,节点必须等待由相同目标节点发起的表更新消息。这种延迟可能导致节点上的路由信息陈旧


二、AODV(Ad hoc On-Demand Distance Vector Routing)

是基于On-Demand的路由协议,只有当到达某目的节点的路由不存在时,才会发起该协议发起路由请求,也就是有路由请求时才激活。

  • 寻找最短最快)路由路径。
  • 传输层使用的是UDP协议。

实现步骤

  • 当源节点需要给网络中其他节点发送信息时,首先检查路由表是否有目标节点,如果没有则向邻居广播RREQRoute Request)(RREQ报文中记录着源节点目标节点网络层地址,还有当前RREQ的序列号

为什么需要RREQ序列号:避免loop;判断新鲜

-邻居节点收到RREQ,检查RREQ序列号,以判断是否首次收到当前RREQ
如果是:检查目标是否是自己,是否在自己的路由表中
------如果不是自己 ||不在重新广播RREQ(有着相同的源和序列号),同时建立指向源节点的逆向路径(指向当前RREQ的首次发送节点,第二次及以后收到的RREQ将被丢弃)(优点:便于区分loop和new;便于建立源到目标的最短路径,因为永远只接收到达最快的请求)
----如果不是自己但是在路由表中(之前发生过通信而保留的路径):向源发送RREPRoute Reply

reverse path 保存在哪?之前保存的RREQ吗?

----如果是自己不再重新广播,生成RREP(源与目标正好与RREQ相反)
-----某个节点收到RREP,它意识到自己是天选之子(逆向路径的一员),它将根据RREP的源和目标建立指向发送当前RREP的节点的上传路径(作为路由信息保存在路由表中),上传路径在RREP的发送过程中被建立

-最初的源节点收到RREP后,根据最终形成的上传路径发送信息

在这里插入图片描述

流程图

Created with Raphaël 2.3.0 SRC需要发送信息 RT是否有 目标节点? 向邻居广播RREQ 邻居节点收到RREQ 是否首次收到? 目标是否是自己? 不再重新广播 生成RREP 某个节点收到RREP: 建立指向发送当前RREP的节点的上传路径 (作为路由信息保存在路由表中) 源收到RREP: 根据最终形成的上传路径发送信息 结束 是否在RT中? 向源发送RREP 重新广播RREQ 建立逆向路径 丢弃RREQ no yes no yes no yes no

在这里插入图片描述

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->越差的稳定性->越高的移动性

在这里插入图片描述

基本准则(?)

  1. 迁移过程中,迁移方与邻居的关系发生变化。在这个不稳定的时期之后,存在一个稳定的时期,在此期间,移动主机将在一个无线单元中花费更多的休眠时间,然后再移动。
  2. 一个移动电话表示,当它与相邻的移动电话的结合度较低(associativity tick)时,其移动状态处于高水平。如果观察到高结合性标记,这意味着主机处于稳定状态,是执行ad hoc路由的理想点。

三个步骤

1. 路由寻找(Route Discovery Phase)

DEST选择最稳定的路由:

  1. 高稳定性与低移动性
  2. 稳定性相同的情况下选择cost少的路径
  3. 稳定性与cost都相同,随机选择
BQ(Broadcast Query)
  • source先进行BQ广播(Broadcast Query),发现邻居都不是DEST
  • BQ先把经过的点的associativity ticks记下来,一直携带着往下一位传输。
  • 如果有多种情况,BQ会都记下来,最后遇到dest以后用算法选出最稳定路径。
  • 节点收到BQ后,检查序列号,如果都相同就检查节点ID列表当ID列表中包含自己时,忽略当前BQ
  • 移除上一个节点的邻居信息,加入自己的邻居信息(节点IDTicks
  • DEST将在收到第一个BQ数据包后,启动timer等待更多的BQ
    在这里插入图片描述

REPLY message

DEST的timer过期后,RSAroute select algorithm)选出最佳路径,生成REPLY message单播

结构
在这里插入图片描述
实现步骤

  1. 每个中间节点收到REPLY后检查ID列表
  2. 如果在表中:位于自己左边的是REPLY发送方向,右边的是数据上传方向(放入路由表
  3. 如果不在表中:检查源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,目标,序列号,邻居信息节点IDTicks),限制跳数(LQ可移动的距离)

通过total route lengthID列表,中间节点可以算出自己与目标相离的跳数
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都会更新路由表:释放资源,避免保留陈旧的路线
  • 软状态:当一段时间内没有与路由相关的流量活动时,基于定时器。这种方式是在路由中的每个节点进行的。
    在这里插入图片描述

对比

低移动性或少量包裹发送时,更新是无效的
在这里插入图片描述

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值