pacchetti TCP hanno numeri di sequenza (scostamenti di byte a partire dall'inizio, dalla memoria) ei messaggi ACK riconoscete che un offset specifico è stato ricevuto:
Così si potrebbe finire con una situazione come :
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)
in altre parole, il mittente può continuare a trasmettere indipendentemente riconoscimenti fino al punto in cui i buffer sono pieni (deve mantenere i pacchetti non riconosciuti in caso necessiti di ri-trasmettere).
Questa "disconnessione" tra le mandate e le conferme può velocizzare notevolmente il flusso di dati.
Alla fine della ricezione, i pacchetti possono arrivare fuori servizio e vengono conservati fino a quando qualcosa può essere consegnato ai livelli superiori in ordine.
Ad esempio, se data 3
arrivato prima data 2
, all'estremità ricevente dovrebbe tenere su di esso fino data 2
arrivato, allora entrambi verrebbe mandata verso l'alto per la consegna.