pakiety TCP mają kolejne numery (bajt przesunięcia od początku, z pamięci) oraz komunikaty ACK uznać, że konkretny przesunięcie został odebrany:
Więc może skończyć się w takiej sytuacji :
data 1 (10 bytes) ->
<- ack (10, data1)
data 2 (15 bytes) ->
data 3 (10 bytes) ->
data 4 (8 bytes) ->
<- ack (25, data1/2/3)
<- ack (33, data1/2/3/4)
innymi słowy, nadawca może nadal wysyłać niezależnie od potwierdzeń aż do momentu, gdy jego bufory są pełne (ma zachować niepotwierdzonych pakietów w przypadku potrzebne do ich ponownego przesyłania).
To "rozłączenie" pomiędzy wysyłaniem a potwierdzaniem może znacznie przyspieszyć przepływ danych.
Po stronie odbiorcy pakiety mogą być nieczynne i przechowywane, dopóki coś nie zostanie dostarczone na wyższe poziomy w kolejności.
Na przykład, jeśli data 3
przybył przed data 2
, koniec przyjmowania będzie trzymać się go aż data 2
przybył, następnie oboje będą wysyłane w górę dla dostawy.