Zarządzanie utraconymi segmentami

Bez względu na to, jak dobrze sieć została zaprojektowana, pewne starty danych zawsze się zdarzają, dlatego właśnie TCP jest wyposażony w metody pozwalające na zarządzanie takimi sytuacjami. Zawarty jest w nich mechanizm retransmisji segmentów, których dostarczenie nie zostało potwierdzone.

Usługa TCP na hoście docelowym zwykle potwierdza tylko otrzymanie ciągłej partii danych. Jeżeli jeden lub więcej segmentów zaginie, to potwierdzone zostanie tylko otrzymanie segmentów zawartych w ostatnim, w pełni odebranym oknie. Na przykład, jeśli adresat otrzymał segmenty z numerami sekwencyjnymi od 1500 do 3000, i od 3400 do 3500, to numer potwierdzenia wyniesie 3001. Jest tak dlatego, że segmenty z numerami sekwencyjnymi od 3001 do 3999 nie zostały odebrane.

Kiedy TCP na hoście źródłowym nie otrzyma potwierdzenia odebrania przez host docelowy, we wcześniej określonym czasie, wraca do ostatniego otrzymanego numeru ACK i rozpoczyna retransmisję od tego momentu. Proces retransmisji nie jest ściśle zdefiniowany w dokumentach RFC (ang. Request for Comments), ponieważ zależy od sposobu konkretnej implementacji protokołu TCP.

Dla typowej implementacji protokołu TCP, host może wysyłać segment, umieszczając równocześnie jego kopię w kolejce retransmisyjnej i uruchamiając zegar. Kiedy potwierdzenie otrzymania danych z wysłanego segmentu jest odebrane, kopia segmentu umieszczona w kolejce retransmisyjnej jest z niej usuwana. Jeżeli jednak potwierdzenie nie zostanie otrzymane przed upływem określonego czasu oczekiwania, segment jest retransmitowany.

Naciśnij przycisk "Odtwórz" na rysunku, aby zobaczyć proces retransmisji utraconych danych.

Obecnie, hosty mogą również wykorzystać opcjonalną funkcję zwaną selektywnymi potwierdzeniami (ang. Selective Acknowledgements). Polega ona na tym, że jeśli oba hosty komunikujące się ze sobą wspierają selektywne potwierdzenia, możliwym się staje dla odbiorcy potwierdzanie bajtów w nieciągłych segmentach i po otrzymaniu takiego potwierdzenia, nadawca będzie potrzebował retransmitować tylko brakujące dane.