可靠传输的实现机制1——停止等待协议SW(Stop and Wait)

目录

关于更好了解停止等待协议SW的三个情景假设

情景①——发送方发送的数据分组在传输过程中丢失

情景②——接收方发送的回应包在传输过程中丢失

情景③——关于回应包是否需要编号的解释


在开始这篇博客之前,大家来思考一下,什么是可靠传输呢?想要实现可靠传输需要解决哪些问题呢?

就好像你给你的同桌传纸条,最基本的问题,你要确保纸条会被同桌收到,两台主机之前的信息交流也是如此,要确保你发送的信息被对方收到。

那么在停止等待协议SW中,这一点是如何做到的呢?

我们先来初步了解一下SW的工作原理,基本过程如下图所示

以下图片均来自UP主——湖科大教书匠

视频链接:【计算机网络微课堂(有字幕无背景音乐版)】 https://www.bilibili.com/video/BV1c4411d7jb?p=25&share_source=copy_web&vd_source=97b6ca34a029129aad2f5e8177ba05f1

可靠传输的实现机制1——停止等待协议SW(Stop and Wait)_第1张图片

SW基本原理:

首先,发送方向接收方发送数据分组,接收方收到发送方发来的数据分组后,对其进行差错检测,若没有误码,则接受该数据分组,并给发送方发送确认分组,简称为ACK,发送方收到对应数据分组的ACK后,才能继续发送数据分组。

如果该数据分组在发送过程中产生了误码,接收方发现误码后,则丢弃该分组,并对发送方发送否认分组,简称为NAK,发送方在收到对应数组分组的NAK后,就会进行重传

由于SW的工作原理,这就导致SW有以下两个特点——

  1. 发送方在发送第一个数据分组后,必须收到对应的回应包(ACK或NAK),才能够继续发送数据分组

  2. 发送方在发送了某一数据分组时,并不能直接将该数据分组从缓存中删除,只有在收到对应数据分组的ACK后,才会将其从缓存中删除

了解了SW的工作原理与特点,我们来做几个情景假设,来更好的了解SW

关于更好了解停止等待协议SW的三个情景假设

情景①——发送方发送的数据分组在传输过程中丢失

情景描述

在这种情景下,接收方收不到该数据分组,也就无法回应对应的ACK或NAK,由于SW的等待机制,发送方会一直处于等待回应分组的状态,从而会导致发送方一直不会发送下一个数据分组,从而陷入死循环

可靠传输的实现机制1——停止等待协议SW(Stop and Wait)_第2张图片

想要解决该问题,我们就需要设定一个计时器,比如在发送方发送完一个数据分组后,启动一个计时器,如果到了设定的最长等待时间,发送方还是没有收到对应的回应包的话,就会重发该分组,这就是超时重传,一般设定的最长等待时间略大于从发送方到接收方的平均往返时间

情景②——接收方发送的回应包在传输过程中丢失

情景描述

发送方给接收方发送了某一分组,接收方的回应分组在传输过程中丢失了,发送方重传,接收方收到了,并且发送方收到了对应的回应包。

问题来了,接收方怎么判断出这两个分组是重复的呢?

可靠传输的实现机制1——停止等待协议SW(Stop and Wait)_第3张图片

相信很多同学都想到了解决办法,那就是编号

为了避免分组重复传输这种错误,必须给每个分组带上序号

问题来了,请大家思考一下,我们需要几个比特位来实现这个编号呢?

其实只需要一个比特位就够了,由于SW的停止等待机制导致发送方一次只能发送一个分组,所以只要前一个分组和后一个分组的序号不一样就可以了,所以只用一个比特位来编号就可以了

比如第一个分组序号是0,第二个是1,第三个是0,这样接收方就能够判断收到的数据分组是否是重复的

情景③——关于回应包是否需要编号的解释

有些反应比较快的同学会想到,你这发送的数据分组需要编号,对应的回应包不需要编号吗?

确实是需要的,接下来我们来看这样一个情景,有点绕,需要大家稍微思考一下,大家看懂了下面的文字和图片就能够理解为什么回应包需要编号了

可靠传输的实现机制1——停止等待协议SW(Stop and Wait)_第4张图片

情景描述——

  1. 发送方发送数据分组DATA0,接收方接收到了并发送了回应包ACK0
  2. 但是由于网络堵塞导致ACK0迟到了,ACK0到达的时间超过了计时器设定的最长等待时间
  3. 发送方先重传了DATA0,在收到ACK0后发送方发送了DATA1
  4. 接收方接收到重传的DATA0并丢弃,同时对重传的DATA0也发送了回应包ACK0
  5. 发送方收到了重传的DATA0的ACK0

问题来了,发送方怎么判断这个ACK0是重传数据分组DATA0的回应包还是DATA1的回应包呢?

我们来进一步思考一下,如果不对回应包进行编号的话,接下来可能会发生什么情况呢?

情景拓展:

  1. 如果不对其进行编号的话,发送方就会认为这个ACK0是DATA1的回应包,并传送下一个数据分组DATA2
  2. 如果DATA2在传输过程中丢失了,结果发送方收到了真正的DATA1的回应包
  3. 发送方就会认为DATA2已经被接收方接收到了,并发送DATA3
  4. 实际上接收方并没有接收到DATA2,这样就少了一个数据,导致了数据的不完整

这也就是回应包也需要编号的原因,同样,只需要一个比特位就够了,原因同上所述

以上就是对停止等待协议SW的一些思考和解释

快一个月没好好写一篇博客了,今天也算是弥补了一些我的愧疚感

今天的学习记录到此结束啦,咱们下篇文章见,ByeBye!

你可能感兴趣的:(计算机网络,网络,学习)