Selective retransmission (occasionally called "selective repeat") is an ARQ protocol, used to request retransmission of lost or corrupt packets in a communications network.

Protocol Operation

As the most complicated of the three ARQ protocols, selective retransmission requires more resources to implement than either stop and wait or go-back N. However, selective retransmission is more bandwidth efficient than go-back N, and as a sliding window protocol, it is more delay efficient than stop and wait. Operation is similar to go-back N: several sequence numbered packets are normally in flow at any given time, and retransmissions are requested by explicit or implicit negative acknowlegements. The difference is that this protocol only resends the requested packets, and any received successfully since need not be retransmitted.

Selecting Your Retransmissions

Clearly, there must be some way of determining which packets require retransmission. The most straightforward way to do this is to wait for a numbered negative acknowledgement -- either explicit, from the receiver, or implicit, from a timer -- and resend the packet indicated. This works, but if several packets are corrupted in a row, as can occur quite frequently on a lossy link, equally many acknowledgements need to be sent. Especially on high-latency links, this is quite inefficient.

One common way around this is to use a bitmap representing the receive window, with missing or corrupted packets indicated as binary ones. This is known as a selective ACK or SACK bitmap, and is used in protocols such as TCP (with options described in RFC 2018) and GPRS LLC. Obviously, a large receive window will require a large bitmap to be sent in the SACK packet; in the case where only one packet requires retransmission, it may be more efficient to send a single numbered NAK.

Even without a SACK bitmap, selective retransmission is very bandwidth efficient. Sending multiple small acknowledgement packets is far better than sending multiple data packets.

References:

"RFC 2018: TCP Selective Acknowledgement Options", Mathis/Mahdavi/Floyd/Romanow, Sun Microsystems, October 1996