E’una strategia di controllo d' errore e ritrasmissione utilizzata principalmente nel protocollo di trasporto TCP. Funziona nel modo seguente:
Il programma di TCP del computer mittente, che chiameremo A, dopo aver diviso i dati in pacchetti, comincia a spedirli: questi pacchetti contengono al proprio interno i dati da spedire, e nell'intestazione contengono i due numeri di porta, il numero d'ordine, la checksum ecc...
Il computer B, ogni volta che riceve correttamente un pacchetto, spedisce al computer A un pacchetto che significa "tutto OK" (spesso detto ACK). Questo pacchetto non contiene dati; è semplicemente una intestazione contenente i due numeri di porta (che ovviamente saranno invertiti rispetto ai pacchetti normali: per questo pacchetto, il mittente è B e il destinatario è A), il numero di riconoscimento e la finestra. Tramite il numero di riconoscimento, B dice ad A: "Guarda che mi sono arrivati correttamente i primi ... (500, 1000, 1500... ) byte del messaggio". Tramite la finestra, B dice ad A: "Guarda che posso ancora ricevere altri ... (0, 2000, 20000, 200000) byte prima di non poter più leggere i pacchetti che mi mandi". Si noti che B deve ricevere i pacchetti in ordine: se ad esempio riceve i primi due pacchetti e poi il quarto, i byte correttamente ricevuti saranno 1000 e non 2000, perché mancano i byte dal 1000 al 1499; il quarto pacchetto , nel caso vi sia spazio disponibile nella memoria del ricevitore, potrà essere conservato, oppure sarà buttato via. Difatti, scopo del TCP al ricevitore è ricostruire in maniera ordinata il flusso di dati che è stato consegnato al trasmettitore, per poterlo fornire ai livelli superiori; non posso quindi tollerare buchi, e non posso certo consegnare ai livelli superiori il quarto pacchetto prima del terzo! Scopo del TCP è proprio quello di fornire al livello superiore del destinatario i dati in perfetto ordine e senza errori.
Se tutto sta andando bene, il computer A legge la finestra disponibile in B, dà un'occhiata a quanti pacchetti ha spedito nel frattempo (ossia nel tempo in cui il pacchetto di ACK ha viaggiato da B ad A) e decide se può spedirne altri oppure deve aspettare un po' di tempo per lasciare che B abbia il tempo di trattare i pacchetti già ricevuti ed aumentare quindi la sua finestra, liberando spazio per nuovi pacchetti. Se invece A ha mandato ad esempio i primi quattro pacchetti, ma è già trascorso un certo periodo di tempo (prefissato e detto timeout) ed ha ricevuto il corrispondente ACK solo per i primi due, decide che qualcosa deve essere andato storto nella trasmissione del terzo e del quarto pacchetto e li ritrasmette. In realtà, il quarto pacchetto potrebbe anche essere giunto correttamente; tuttavia, il trasmettitore non può sapere se questo è effettivamente avvenuto e se il ricevitore aveva abbastanza memoria per conservarlo, per cui, nel dubbio, ritrasmette tutto. In questo modo, si evitano anche lunghi e complessi dialoghi in cui il ricevitore informa il trasmettitore su quali dati siano arrivati e quali no.
Tutto quanto riportato in questa pagina è a puro scopo informativo personale. Se non ti trovi in accordo con quanto riportato nella pagina, vuoi fare delle precisazioni, vuoi fare delle aggiunte o hai delle proposte e dei consigli da dare, puoi farlo mandando un email. Ogni indicazione è fondamentale per la continua crescita del sito.