3.7.1 停止等待ARQ协议

3.7.1 停止等待ARQ协议

1.停止等待ARQ协议的概念

当重发方式采用停发等候重发时,应该遵循停止等待ARQ协议。

停止等待ARQ协议规定:发送端每发送一个数据帧(对应一个码组)就暂停下来,等待接收端的应答。接收端收到数据帧进行差错检测,若数据帧没错,则向发送端返回一个确认帧ACK,发送端再发送下一个数据帧;若接收端检验出数据帧有错或数据帧丢失,则发送端需要重发有错或丢失的数据帧,直到没错为止。

2.停止等待ARQ协议算法

数据帧在实际链路上传输有4种情况,如图3-22所示。

(1)正常情况

正常情况是指数据帧在传输时没出现差错,也没丢失。接收端B(终端B)接收到一个数据帧后,经差错检验是正确的,向发送端A(终端A)发送一个确认帧ACK。当终端A收到确认帧ACK后,则可继续发送下一数据帧,如图3-22(a)所示。

(2)数据传输出错

接收端B检验出收到的数据帧出现差错时,向终端A发送一个否认帧NAK,告诉终端A应重发出错的该数据帧。终端A可多次重发,直至接收到终端B发来的确认帧ACK为止,如图3-22(b)所示。

图3-22 数据帧在实际链路上传输的几种情况

(3)数据帧丢失

由于各种原因,终端B收不到终端A发来的数据帧,这种情况称为数据帧丢失。发生数据帧丢失时,终端B一直在等待接收数据帧,是不会向终端A发送任何应答帧的。终端A由于收不到应答帧,或是应答帧发生了丢失,它就会一直等待下去。这时,系统就会出现死锁现象。

解决死锁问题的方法是设置超时定时器。当终端A发送完一个数据帧时,就启动一个超时定时器。若超时定时器规定的定时时间t out到了,仍没有收到终端B的任何应答帧,终端A就重发这一数据帧。若终端A在超时定时时间内收到了确认帧,则将超时定时器停止计时并清零。超时定时器的定时时间一般设定为略大于“从发完数据帧到收到应答帧所需的平均时间”,如图3-22(c)所示。

(4)确认帧丢失的情况

当确认帧丢失时,超时重发将会使终端B收到两个相同的数据帧。若终端B无法识别重发的数据帧,则会导致在其收到的数据中出现重复帧的差错。

重复帧是一种不允许出现的差错。解决的方法是在发送端给每一个数据帧带上不同的发送序号。若接收端连续收到发送序号相同的数据帧,则认为是重复帧,将其丢掉。同时,必须向终端A发送一个确认帧ACK,如图3-22(d)所示。

这里有两点需要说明:

(a)在实际应用中,停止等待ARQ协议往往这样处理:当数据帧出现差错时,将其丢弃,不向终端A发送任何信息(即不通知终端A收到有差错的数据帧)。终端A发送完一个数据帧时,就启动一个超时定时器,若在超时定时器规定的定时时间内,没有收到终端B的任何应答帧,终端A就重发这一数据帧。

(b)由于停止等待ARQ协议发送端每发送完一个数据帧就停下来,等待接收端的应答信息,因此数据帧编号只需用一个比特就够了。这样,有“0”和“1”两种不同的序号交替出现在数据帧中,可以使接收端分辨出是新的数据帧还是重发的数据帧。任何一个编号系统所占用的比特数都会增加系统的额外开销,所以应使编号的比特数尽量少。

通过以上分析可以看出:停止等待协议的优点是简单,但由于是停止等待发送,所以数据传输效率太低。