一个数据分组的误码就会导致其后续多个数据分组不能被接收方按序接收而丢弃 (尽管它们无乱序和误码)。这必然会造成发送方对这些数据分组的超时重传,显然这是对通信资源的极大费。
为了进一步提高性能,可设法只重传出现误码的数据分组。因此,接收窗口的尺寸WR不应再等于1 (而应大于1),以便接收方先收下失序到达但无误码并且序号落在接收窗口内的那些数据分组,等到所缺分组收齐后再一并送交上层。这就是选择重传协议。
因此,接收方不能再采用累积确认,而要使用逐一确认。
因此,接收方的接收窗口应该大于1。
发送方发送了3 2 1 0,然后2丢失了。
那么接收方就会接收0,1,然后将窗口向后滑动,并发送ACK0,ACK1:
发送方接收到ACK0和ACK1,窗口向后滑动两位。
发送窗口接收ACK3,但是窗口并不能向后滑动,因为ACK3并非按序接收(少了ACK2)。
发送方发送DATA4和DATA5:
当接收方收到DATA4和DATA5时,会发送ACK4和ACK5。发送方接收ACK4和ACK5后,窗口并不会向后滑动,因为少了ACK2。但是会记录下这些:
当超时时依然没有接收到ACK2时,会重新发送DATA2。
此时接收到ACK2.。此时发送窗口和接收窗口就会像后滑动了。
发送窗口和接收窗口的尺寸都应该小于4。否则就会出现分组重复。