Trong SACK TCP (Selective ACKnowledgement TCP) mỗi segment có chứa một trường tuỳ chọn SACK, trường này gồm một số khối SACK, mỗi khối chứa các thông tin về một khối dữ liệu đã được nhận, nhưng không đúng thứ tự, đang được bên nhận chứa trong bộ đệm. Khối SACK thứ nhất chứa thông tin về gói số liệu nhận được mới nhất, khối SACK thứ hai cũng chứa các thông tin tương tự như vậy. Việc bổ sung tuỳ chọn SACK vào giao thức TCP không làm thay đổi cơ chế điều khiển tắc nghẽn bên trong của nó, SACK TCP vẫn bảo toàn được các đặc tính của
Tahoe và Reno TCP là mạnh trong trường hợp có các gói số liệu đến không đúng thứ tự, nó sử dụng cơ chế phát lại khi bị hết giờ như giải pháp cuối cùng.
Hình 4.4 minh hoạ sự hoạt động của SACK TCP trong trường hợp có ba gói số
liệu bị loại. (Tại mục 4.1.5 cũng có một số giải thích liên quan đến hình vẽ này).
Hình 4.4 Hoạt động của SACK TCP, trường hợp có ba gói số liệu bị mất
SACK TCP giống Reno TCP ở chỗ: SACK TCP đi vào giai đoạn FRCV khi bên gửi nhận được số biên nhận lặp bằng tcprexmtthresh; bên gửi sẽ phát lại gói số liệu và giảm cwnd xuống còn một nửa.
SACK TCP khác Reno TCP ở chỗ: trong khi thực hiện FRCV, SACK TCP duy trì một biến được gọi là pipe, biểu diễn ước lượng số gói số liệu đã gửi vào mạng nhưng chưa có biên nhận. Bên gửi chỉ gửi dữ liệu mới hoặc phát lại khi ước lượng nói trên nhỏ hơn cửa sổ tắc nghẽn cwnd. Biến pipe sẽ được tăng thêm một mỗi khi bên gửi phát đi một gói số liệu mới hoặc phát lại một gói số liệu cũ, nó được giảm
đi một khi bên gửi nhận được một gói số liệu biên nhận lặp, trong đó trường tuỳ
chọn SACK cho biết rằng bên nhận đã nhận được dữ liệu mới.
Trong trường hợp một cửa sổ có không quá một gói số liệu bị loại, hoạt động của SACK TCP cũng giống như Reno và New-Reno TCP. SACK TCP khác Reno TCP một cách căn bản khi khi nhiều gói số liệu trong một cửa sổ bị loại [40].