Skip to main content
Technical

Selective Acknowledgment (SACK)

Selective acknowledgment (SACK) is a TCP option that lets the receiver tell the sender exactly which blocks of data arrived, so only the missing segments are retransmitted.

Oct 6, 2026
4 min read
Conferbot Team

Key Takeaways

  • Plain TCP acknowledgements are cumulative: they only say 'everything up to here arrived'.
  • SACK adds the ranges received after a gap, so the sender knows exactly what is missing.
  • Only lost segments are resent, which helps on lossy or long-distance links.
  • Defined in RFC 2018 and enabled by default in modern operating systems.

What Is Selective Acknowledgment?

Selective acknowledgment (SACK) is an option in TCP, the protocol underneath the web, APIs and WebSockets. Normally a TCP receiver sends a cumulative acknowledgement - "I have everything up to byte X". If one segment is lost, everything after it looks unacknowledged too. SACK lets the receiver add "and I also have these later blocks", so the sender knows exactly which piece went missing.

An Example

The sender transmits segments 1 to 5 and segment 3 is lost.

  • Without SACK: the receiver can only acknowledge up to segment 2. The sender may resend 3, 4 and 5, wasting bandwidth, or wait for timeouts.
  • With SACK: the receiver acknowledges up to 2 and reports blocks 4-5 received. The sender resends only segment 3.

How It Is Negotiated

Both ends announce SACK-permitted in the TCP handshake (SYN). Afterwards, acknowledgements can carry up to a few SACK blocks, each a start and end of received data. It is specified in RFC 2018, with D-SACK (RFC 2883) reporting duplicate segments. Real-time media over UDP uses different feedback, such as TWCC.

Frequently Asked Questions

What is SACK in networking?
SACK, selective acknowledgment, is a TCP option that lets a receiver report the specific blocks of data it has received beyond a gap. The sender then retransmits only the missing segments instead of everything after the first loss, which improves throughput on networks that drop packets.
What is the difference between SACK and a cumulative ACK?
A cumulative ACK says the receiver has every byte up to a given point and nothing about later data. SACK adds the ranges received after a gap. With both, the sender knows the exact holes, so recovery from several losses in one window is faster and wastes less bandwidth.
Is TCP SACK enabled by default?
Yes, on modern Linux, Windows and macOS systems SACK is enabled by default, and both sides agree to use it during the TCP handshake. It is occasionally disabled on servers as a temporary mitigation for specific vulnerabilities, but normally it should stay on.
Does SACK matter for chat apps?
Indirectly. Chat widgets, APIs and WebSocket connections all run over TCP, so SACK helps them recover quickly on mobile or lossy networks. You rarely configure it in an application; it works in the operating system underneath.
Omnichannel Platform

One Chatbot,
Every Channel

Your chatbot works seamlessly across WhatsApp, Messenger, Slack, and 6 more platforms. Build once, deploy everywhere.

View All Channels
Conferbot
online
Hi! How can I help you today?
I need pricing info
Conferbot
Active now
Welcome! What are you looking for?
Book a demo
Sure! Pick a time slot:
#support
Conferbot
New ticket from Sarah: "Can't access dashboard"
Auto-resolved. Password reset link sent.
Free Chatbot Templates

Ready to Build Your
Chatbot?

Browse free templates for every industry and deploy in minutes. No coding required.

100% Free
No Code
2-Min Setup
Lead Generation
Capture & qualify leads
Customer Support
24/7 automated help
E-commerce
Boost online sales