选择重传ARQ 是一个自动重传请求(ARQ)的具体实例。它可以用作一个消息单元传送和确认的协议。当用作传送消息单元的协议时,发送进程根据一个指定大小的 窗口持续发送若干帧 ,即使发送过程中丢失帧,也会继续发送。和 Go-back-N ARQ不一样,接收进程在出错后还是继续接收和确认帧。这是 滑动窗口协议 的发送和接收窗口大小大于1的一般情况。
接收进程记录它没有收到的最早的帧的序列号,并发送ACK时使用这个序列号。如果一个发送的帧没有到达接收方,发送方继续发送后面的帧,直到它填满发送窗口 。接收方持续用接收的帧填充它的接收窗口,并且每次回复一个带有序列号的ACK帧。一旦发送窗口所有帧都发送了 ,发送方重新发送的帧号与ACK对应的帧,然后继续。发送和接收窗户的大小必须是相同的,而且最大取值最大序列号的一半(序列号是假设编号从0到 n -1),为了当所有数据包都丢失时避免出错。假设所有的ACK都丢失了,如果接收窗口大于最大序列号的一半,一些甚至可能是所有的超时重传的帧,都是不能被识别的重复发送。
在每个发送的帧得到确认后,发送方移动发送窗口。
接收窗口的尺寸不能超过序号范围的1/2,否则可能造成帧的重叠。另外,发送窗口的尺寸一般和接收窗口的尺寸相同,发送端为每一个发送缓存设置一个定时计数器,定时器一旦超时,相应输出缓存区中的帧就被重发。