流水线技术对可靠数据传输协议带来如下影响:
- 必须增加序号范围,因为每个输送中的分组(不计算重传的)必须有一个唯一的序号,而且也许有多个在输送中未确认的报文。
- 协议的发送方和接收方两端也许必须缓存多个分组。发送方最低限度应当能缓冲那些已发送但没有确认的分组。接收方或许也需要缓存那些已正确接收的分组。
- 所需序号范围和对缓冲的要求取决于数据传输协议如何处理丢失、损坏及延时过大的分组。解决流水线的差错恢复有两种基本方法是:回退N步(GBN)和选择重传(SR)。
回退N步
在回退N步(GBN)协议中,允许发送方发送多个分组而不需等待确认,但它也受限于在流水线中未确认的分组数不能超过某个最大允许数N。这些未确认分组数可能是因为网络阻塞而导致数据、确认数据延迟或丢失,如果没有最大允许数N,那么将会有更多数据涌入链路中导致网络工作的更困难。N常被称为窗口长度,GBN 协议也常被称为滑动窗口协议
GBN 发送方必须响应三种类型的事件
- 上层的调用:当上层调用时,发送方首先检查发送窗口是否已满,即是否有N个已发送但未被确认的分组。如果窗口未满,则产生一个分组并将其发送,并相应地更新变量。在实际实现中,发送方更可能缓存这些数据,或者使用同步机制(如一个信号量或标志)允许上层在仅当窗口不满时才把数据交付给运输层协议。
- 收到一个 ACK:在GBN协议中,对序号为n的分组的确认采取累积确认的方式,表明接收