TCP selective acknowledgment (TCP SACK) provides the support described in RFC 2018 to solve the problems related to congestion and multiple packet drops, especially in applications making use of TCP large windows (RFC 1323) over satellite links or transcontinental links.
Without TCP with SACK, the receiving TCP application only acknowledges the last packet received in order. For instance, if the TCP application receives packet 1, packet 2, and packet 3, and then receives packet 5, it will only acknowledge receiving up to packet 3 and will discard all subsequent packets until it receives packet 4. This can cause massive retransmission. With TCP with SACK, the receiving location can acknowledge the packets as they are received and the transmitting side can determine which packets never were received. For instance, if the receiving side receives packet 1, packet 2, and packet 3, and then receives packet 5 and packet 6, it can acknowledge each of these packets and the transmitting side only needs to resend the lost packet 4, rather than having to retransmit packet 4, packet 5, and packet 6.
For more information, see TCP/IP and Data Communications Administration Guide.