DSR协议

1、概述

PS:本文只是简要介绍协议大致流程,具体协议参见RFC4728

  • DSR路由协议不像OLSR协议需要周期性的广播和探测分组
  • 全部按需操作
  • 在获取路由或者旁听其他分组过程中,节点能够获取到达一个目的节点的多条路由,所以一条不行可以换成另一条

2、基本路由寻找

A发送路由请求,源节点为A,路由请求附上A的识别码(id=2)和请求记录列表(A)。当B收到请求后,如果目标节点就是本节点,发送一个路由应答信号,回送信息,回送到A后,A将路由记录储存在自己的路由存储器中。如果目标节点不是本节点,B将请求附上自己的信息(id仍然为A的识别码2,请求记录列表为A,B),再广播出去。直到目标节点。
当E点回送消息时,E点可以同时开始自己的路由寻找进程,当然也可以把收到的路由记录倒过来直接送回A。
在这里插入图片描述
当A发送路由请求时,A会将发送分组储存进发送缓存器中,如果超出时间限制仍然没有收到则删除该分组。A每次请求路由都会产生一个这样的路由进程。若节点寻找同一个目的地址时应当注意,有时该目的地址有可能不可达,当路由寻找进程产生过于频繁时,无用进程会填满整个发送缓存器中,因此我们需要用指数退避算法,每次请求时间间隔加倍。

3、基本路由维护

在这里插入图片描述
路由可能中断,有两种应对方法。

  1. 嵌入式:在每个分组之中发送ack,考虑B给C发信息(带有ACK确认信息),下一步C发送给D,此时B可以旁听C的信息。
  2. DSR软件确认:即明确要求下一跳节点D给上一跳节C点回送消息。设置最大允许重发次数,如果超出该次数限制上一跳节点C仍然没有收到应答,则认为链路中断,此时C会给节点A返回“路由错误”,提醒其删除这条中断链。

如果链路中断,A再寻找一条路由即可。

4、旁听

在这里插入图片描述
对于经常单向链的情况,节点C应该只存储C到D,D到E的路由信息,而不应该存储B到A,C到B的路由信息,除非是双向链。
而对于偶尔是单向链的情况,C应该将两个方向的链全部存储起来。如果其他的节点(比如X)旁听到了C发的路由信息,他应该将所有的路由链存储起来,也包括C到X的链。

5、存储路由应答

节点路由除了可以进行旁听以外,还可以通过自身的存储路由进行应答路由请求。例如,A发送信息,目标路由是E,当信息经过C节点时,C已经收到了一条从A到C的路由信息,此时,如果C之中的路由存储器中含有C到E的路由信息,C节点可以直接将两条路由信息进行拼接,之后再进行回送。但这样有两个问题,C中的路由信息有可能过时,即C的路由路径中有可能有些路由器已经不可达。第二个问题用一个图来说明。
在这里插入图片描述
假设以F作为中间节点,此时F收到了A到F的路由信息,F节点中的路由存储器中还含有F到E的路由信息,但很明显F节点是多余的。因此我们要检验路由中是否包含重复节点,如果包含的话可以进行适当调整。

6、链路中断怎么办?

  • 分组抢救
    在这里插入图片描述
    如果C中存在另外一条到达E的路由,C可以进行替换,但是:
  1. 要维护计数器用于表明最大抢救次数,避免无休止地抢救。
  2. 向源节点回送“路由错误”。
  3. 当源节点A收到“路由错误”应答时,增加一个搜索路由的进程(A里面没有到E的路由了),与此同时将该错误进行封装,其他节点收到以后就能删除本条中断的链路。
  • 中间节点还要处理接口缓存的排队分组以及将来要用到这条链路的分组。

7、路由自动缩短

在这里插入图片描述
D有可能旁听到B到C的信息,发现B的路由信息里面有本节点D,于是D回送无路由请求应答给A,在这个应答中给出一条更短的路由AB+DE,路由变短。
当节点每次收到数据分组时,如果该分组中包含DSR源路由选项,都要检查能否进行路由缩短。

8、流状态

DSR协议有一种特殊的流状态,当发送节点找到一条源路由后,先将这条源路由传输给后续节点,编上一个编号,之后发送数据分组的时候就可以用流的编号来代替这条路径。因此,DSR数据格式中流状态头。发送节点发送一个建立流的分组之后,后续节点应该保存进自己的流表之中。而如果之后节点想要沿着某个流传输数据,应该在数据分组之前加上一个DSR流状态头。 (其实有些问题,只是为了理解,下面是正解)

  1. 如果没有建立起“端到端通信”(一条路由上的所有节点的流表都包含同一个流),需要添加DSR源路由选项头(表明需要寻找路径)和DSR流状态头(标识流,与先前本条流路由相关联)
  2. 建立起端到端通信
    1. 非默认流:添加流状态头,但不添加源路由选项头
    2. 默认流:利用IP TTL识别流,不添加流状态头和源路由选项头

9、源路由接收

当节点接收到分组时(这里的接收到一般指旁听,得到的分组叫做旁听分组),分组头若包含DSR源路由选项,应检查分组通过的源路由能否进行路由缩短。

  1. 本节点搜索“无请求路由应答表”,如果存在条目匹配,说明以前曾经检查过这个源路由,不执行路由缩短
  2. 否则:
    1. 建立新的无请求路由条目,给旁听分组包含的IP源节点发送无请求路由应答。如果无法直接发往源节点可以将收到的转发跳序列倒过来。
    2. 如果能够进行路由缩短,说明本节点还不是源路由下一跳的路由器,此时正常传输的分组仍然还没有到达本节点。丢掉旁听分组防止重复。

10、路由应答

在这里插入图片描述
还是这张图,A发送路由请求分组,E收到路由请求分组后应延迟一小段时间后给A发送路由应答分组,防止出现路由应答暴。E有两种路由应答发送方法:

  1. 将路由请求分组中的转发跳序列倒过来,这样可以检测链路是否双向
  2. E对A执行新的路由寻找进程(给A发送一个路由应答),此时要求用E收到的那个路由请求分组承载该路由应答选项。否则会出现E向A进行路由请求,然后A再向E进行路由请求的局面(A和E均没有通向对方的源路由)

11、路由应答暴

在这里插入图片描述
A发送到G的请求路由,然后BCDEF里面均有到G的路由,于是都会回送应答路由,然后A就炸了。
处理方法则是在接收到路由请求以后随机延迟一段时间在发送路由应答。

12、路由维护处理

只有当节点将要转发分组的时候才进行路由维护处理,此时节点需要确定下一跳节点的可达性。有三种确认方法:

  1. 链路层确认:不需要确认请求选项和确认选项,如果成功,无需进行被动确认或者网络层确认。
  2. 被动确认:最后一跳上不能进行被动确认,因为最后一个节点就是目的节点,不会转发该分组。只有当到达被动确认最大尝试次数时仍然没有接到回应,才需要请求网络层确认。每个节点维护一张可能的下一跳目的节点表。
  3. 网络层确认:其他方法无效才使用网络层确认。通过在DSR协议头添加确认请求选项和确认选项。
  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值