停止等待协议(stop-and-wait)是最简单但也是最基础的
数据链路层协议。很多有关协议的基本概念都可以从这个协议中学习到。
要点
停止等待协议用于通信系统中,两个相连的设备相互发送信息时使用,以确保信息不因丢包或包乱序而丢失,是最简单的自动重传请求方法。
只有收到序号正确的确认帧 ACKn 后,才更新发送状态变量 V(S)一次,并发送新的
数据帧。
接收端接收到数据帧时,就要将发送序号 N(S) 与本地的接收状态变量 V(R) 相比较。
若二者相等就表明是新的数据帧,就收下,并发送确认。否则为重复帧,就必须丢弃。但这时仍须向发送端发送确认帧 ACKn,而接收状态变量 V(R) 和确认序号 n 都不变。
连续出现相同发送序号的数据帧,表明发送端进行了超时重传。连续出现相同序号的确认帧,表明接收端收到了重复帧。
发送端在发送完数据帧时,必须在其发送缓存中暂时保留这个数据帧的副本。这样才能在出差错时进行重传。只有确认对方已经收到这个
数据帧时,才可以清除这个副本。
实用的CRC 检验器都是用硬件完成的。
CRC 检验器能够自动丢弃检测到的出错帧。因此所谓的“丢弃出错帧”,对上层软件或用户来说都是感觉不到的。
发送端对出错的数据帧进行重传是自动进行的,因而这种
差错控制体制常简称为
ARQ(Automatic Repeat reQuest),直译是
自动重传请求,但意思是自动请求重传。
定量分析
设 tf 是一个
数据帧的发送时间,且数据帧的长度是固定不变的。显然,数据帧的发送时间 tf 是数据帧的长度 lf (bit)与数据的发送速率 C (bit/s)之比,即
tf = lf /C = lf /C (s)
数据帧沿链路传到结点B还要经历一个传播时延 tp。
结点 B 收到数据帧要花费时间进行处理,此时间称为处理时间 tpr,发送确认帧 ACK 的发送时间为 ta。
停止等待协议的算法
这里不使用否认帧(实用的
数据链路层协议大都是这样的),而且确认帧带有序号 n。
按照习惯的表示法,ACKn 表示“第 n – 1 号帧已经收到,现在期望接收第 n 号帧”。
ACK1 表示“0 号帧已收到,现在期望接收的下一帧是 1 号帧”;
ACK0 表示“1 号帧已收到,现在期望接收的下一帧是 0 号帧”。
ARQ 的优缺点
优点:比较简单 。
缺点:通信信道的利用率不高,也就是说,信道还远远没有被数据比特填满。
为了克服这一缺点,就产生了另外两种协议,即连续 ARQ 和选择重传 ARQ。
具有最简单流量控制的数据链路层协议
假定 1: 链路是理想的传输信道,所传送的任何数据既不会出差错也不会丢失。
假定 2: 不管发方以多快的速率发送数据,收方总是来得及收下,并及时上交主机。
这个假定就相当于认为:接收端向
主机交付数据的速率永远不会低于发送端发送数据的速率。
现在去掉上述的第二个假定。但是,仍然保留第一个假定,即主机A 向主机 B传输数据的信道仍然是无差错的理想信道。然而现在不能保证接收端向主机交付数据的速率永远不低于发送端发送数据的速率。
由收方控制发方的数据流
简单解释:收方每接受到发方一帧后,回复确认帧,让发方继续发送下一帧,并且收方将
数据帧交给上层软件识别,出现错误就将帧丢掉。
在接收结点:
1)等待。
2)若收到由发送结点发过来的数据帧,则将其放入
数据链路层的接收缓存。
3)将接收缓存中的数据帧上交主机。
4) 向发送结点发一信息,表示数据帧已经上交给主机。
5) 转到1)
在发送结点:
2))将数据帧送到数据链路层的发送缓存。
3))将发送缓存中的数据帧发送出去。
4))等待。
5))若收到由接收结点发过来的信息(此信息的格式与内容可由双方事先商定好),则从主机取一个新的数据帧,然后转到2)。