待解决问题
数据链路层的ARQ方法:“顺序接收管道协议”(GoBackN),是否只适用于面向连接的服务?
离问题结束还有0天0小时  |  提问者:rorocd78   |  提问时间:2019-8-16 15:55
先说问题背景:

数据链路层的基本协议包括了:
1. 停等协议
2. 顺序接收管道协议,也称为GoBackN回退协议。

顺序接收管道协议:
结合了:差错控制方法中的连续重发请求(Continuous RQ),和流量控制方法中的滑动窗口机制。

工作流程如下:
1. 发方设置一个“发方缓冲区”(重发表),重发表采用先进先出(FIFO)的队列规则。
2. 发方把连续多个“待确认帧”依序放入重发表中,编上序号,直到重发表满为止,最后将重发表中的帧全部发出(重发表中仍然保留信息帧的备份)。
3. 收方把收到的信息帧放入“收方缓冲区”,等待检查处理。同时,收方还设置了一个“接收次序表”,保存了正确接收的信息帧的序号。
3. 收方依次检查缓冲区中的信息帧。如果无差错,则向发方返回一个ACK确认帧,确认帧中包含了信息帧的序号。
4. 如果发现差错,则把该信息帧、以及所有帧序号大于它的信息帧都丢弃,从而确保收方总是顺序接收。(不允许乱序接收)
5. 发方收到确认帧后,删除重发表中对应序号的待确认帧。
6. 如果发方超过规定时间未收到确认帧,说明信息帧丢失或出错。就需要退回重发表队列的头部(已确认的元素已经删除了,剩下都是未确认的),再次发送整个重发表。

疑问:

1. 如果采用数据报的分组交换方式,帧可能会乱序到达收方。比如,假设第21帧没有差错,收方正确接收,返回ACK确认帧,之后又收到第16帧,发现有差错,这样就至少需要丢弃第16帧及所有序号>16的帧,但是否还存在更靠前的错误帧呢?因此,收方就需要把发方本次发出的所有信息帧都检查后,才能确定哪些帧该丢弃,哪些帧该保留。

2.而且,收方可能还需要一个计时器来区分到达的信息帧是发方本轮发出的,还是下一轮重发的。或者是,同一信息帧,在不同的发送轮次中需要编不同的序号?
否则可能带来问题:
假设发方发出第一轮次的信息帧队列,收方在处理第一轮的第12个帧时发现错误,舍弃第12帧及序号>12的帧。
发方未收到序号>=12的信息帧的ACK确认帧,重发。
收方收到重发的>=12的信息帧后,认为需要舍弃,于是将重发的12+信息帧也丢弃了。发方又需要再重发一次。
 
我要回答:  回答字数在10000字以内