选择重发策略
选择重发策略
当接收方发现某一帧出错后,仍然后续来的正确的帧存放在一个缓冲区中暂不向上层递交,同时向发送方要求重新传送出错的那一帧;一旦收到重新传来的帧后,就将其与存于缓冲区的中的其帧一同按正确顺序递交高层。
原理
回退N帧策略因可以连续发送数据帧而提高了传输效率,但也有不利的方面,那就是在重发时必须把原来已正确传送过的数据帧再次发送,仅仅是因为这些数据帧之前的某个数据帧或确认帧发生了差错,这样又使传输效率降低。所以当通信链路的传输质量很差、误码率较大时,回退N帧策略就没什么优势了,因为这时可能经常要重传大量的数据帧。
为了弥补回退N帧策略的不足,另一种效率更高的差错控制策略—选择重发策略诞生了。在这个差错控制策略中,当接收端发现某帧出错后,其后继续送来的正确帧虽然不能立即递交给接收端的“网络层”,但接收端仍可接收下来,先存放在一个缓冲区中,同时通过向发送端发送NAK否认帧,要求发送端重新传送出错的那一帧。一旦收到重新发来的正确帧后,就可以与原已存于缓冲区中的其余帧一起按正确的顺序递交给网络层。
选择重发策略规定,当发送端收到包含出错帧序号的NAK帧时,据此序号从重发表中选出相应帧的备份,直接插入到发送帧队列的前面给予重发,因为重发表的帧重发是按照FIFO(先进先出)的机制进行排列的,插在前面是为了可以最先重发,避免了对后继正确数据帧的多余重发,使得传输效率明显提高了。
如果仍用小孩数数来打比方的话,就是你先让小孩自己一直数下去,发现数错时你记下来(不要打断他正常的数数流程),当小孩数完后你再根据这些错误要求小孩重数对应的数就行了,而不必要求他从错误的地方重新数下去。
数据处理方法
下面也分两种情况来讨论“选择重发”策略的数据处理方法。
(1)数据帧出现差错情形下的处理流程
以下是当数据帧有差错(包括接收端检测到所接收的数据帧有差错,或者有数据帧丢失两种可能)时,“选择重发”策略的数据处理流程:
1)发送端连续发送多个数据帧,接收端对每个已正确接受的数据帧返回一个ACK帧;现假设第N+1个帧出现差错或丢失如果检测到第N+1个帧有错误,则向发送端返回一个否认NAK(N+1)帧;如果一直到收到第N+2个数据帧时还没收到第N+1帧,则表明该帧已丢失,接收端不产生任何动作;但无论结果如何,已正确接收的数据帧,如第N个帧、第N+2个帧、第N+3个帧……仍会向发送方返回确认ACK帧;
2)当发送端收到来自接收端的否定NAK(N+1)或者收到第N+2帧的ACK帧时,会检测出其失序(因为按顺序,在收到ACK(N+2)帧之前应该是收到ACK(N+1)帧),得知第N+1帧没有被确认。将第N+2帧从重发表中清除,并在继续发送后继数据帧之前重发第N+1帧。
由于接收端检测到2号帧有错,向发送端发送了一个否认帧NAK2,要求发送端选择重发2号帧的示意图。从中可以看限出,“选择重发”策略下只需发送有错的帧,而不会发送从有错帧开始后面所的帧,显然减少了信道资源浪费,提高了传输效率,但要求发送端和接收端都有足够大的缓冲区空间,以便存储多个帧的重发表和预提交数据帧。
(2)响应帧出现差错情形下的数据处理流程
在响应帧(包括确认ACK帧和否认NAK帧)出现差错时,也就是本应接收的是第N个帧的响应帧却接收到了第N+1个帧的响应帧情况下,在该情形下数据处理流程如下(现以ACK帧出错进行介绍,与NAK帧出错的处理流程一样):
1)当发送端已到了第N-1个帧的ACK帧,接下来应该收到的是第N个帧的ACK帧,而偏偏收到的是第N+1个帧的ACK帧;
2)发送端在收到ACK(N+1)帧后,检测出在重发表中第N个帧都还没收到ACK帧,因此认为第N个帧出现了差错(事实上并不是这样的),重发第N个帧;
3)接收端在收到发送端重发的第N个帧,搜索接收表并确定第N帧已被正确接收,因此认定这个重发的第N帧是重复的,于是直接删除这个重发的第N帧,并返回一个ACK(N)给发送端,以使发送端从重发表中删除第N帧。这样就达到了响应帧出现差错时的错误纠正。
参考资料
最新修订时间:2022-08-25 11:50
目录
概述
原理
参考资料