• 运输层-可靠数据传输原理:选择重传 Selective Repeat Protocol


    篇首语:回退N步(GBN)和选择重传(SR)是解决流水线的差错恢复的两种基本方法。

    本篇我们再来看看SR。

    首先我们要知道序号空间这个概念,这对于我们后面理解窗口长度的选择意义非凡。在一次传输中,分组数也许很大,我们不可能给每个分组一个唯一一个编号,所以只能选择一个序号空间,令分组数进行取模操作。比如分组数为7,我们取序号空间为 0 1 2 ,则分组编号为 0 1 2 0 1 2 0

    现在来看SR,通过前面的学习,我们了解了GBN的基础上,也知道了GBN协议可能会将失序的分组丢掉,而这部分失序的分组也许没有必要被重新传输。而选择排序(SR),顾名思义,就是通过让发送方仅重传哪些它怀疑在接收方出错(丢失或受损)的分组而避免了不必要的重传。

    为了达到这一目的,我们首先仍需要利用窗口来限制流水线中的分组数。

    现在我们来讲述传输过程,我们将各个分组编号,设窗口大小为N。发送方一次传输N个分组过去,当接收方正确接受到其中任意一个分组,接收方都会返回一个ACK。这时候接收方会判断这个分组是否按序,并将目前按序的所有分组提交给上一层,否则,进行缓存。而发送方接受到ACK后,也会查看ACK对应序号是否按序(== base ?),按序则窗口滑动,否则窗口不滑动并进行等待。一旦等待超时(可能是分组丢失或ACK丢失引起的)就将触发重传。

    在接收方缓存的失序分组将被缓存知道所有的丢失分组(即序号更小的分组)都被接受为止,然后才将这一批分组按序交付给上一层。需要注意,当SR正确接收到一个分组,无论目前拥有与否,都要返回一个ACK,否则发送方窗口将无法滑动。而同时与GBN不同的是,每个在被发送的分组都有自己的逻辑定时器。

    最后我们来说说,为什么之前要提到序号空间。实际上,我们窗口大小的选择不是随意的,序号空间的大小是有限的,而我们窗口长度必须小于等于序号空间的一半。

    以上就是SR的运行基本原理。

     我们可以看到,使用选择重传,我们可以避免重复传送那些接收方已经正确接受的分组,但代价是接收方要具有相当容量的缓存空间,而这在许多情况下是不够经济的。

    这里同样建议大家看看一个java小程序,来实操一下SR的过程.

    https://media.pearsoncmg.com/ph/esm/ecs_kurose_compnetwork_8/cw/content/interactiveanimations/selective-repeat-protocol/index.html

  • 相关阅读:
    TextView 内容设置成上下滑动 和 代码设置字体颜色
    Android提供了4种在其他线程中访问UI线程的方法
    Android 左右滑屏效果
    【自定义控件】 GridView
    【动画】【特效】activity跳转华丽的过渡效果(转载)
    Android获取设备型号、SDK版本及其系统版本
    【JSON】数据解析
    Android中文API集合
    【AssetManager】的使用与资源预加载
    @property(nonatomic,retain)
  • 原文地址:https://www.cnblogs.com/OKDA/p/13365402.html
Copyright © 2020-2023  润新知