Po zgubieniu kilku fragmentów TCP może wskazać dokładne „dziury”, zamiast wysyłać wszystko od nowa
Wczesne TCP potwierdzało przede wszystkim ciągły początek odebranego strumienia, co przy kilku stratach mogło prowadzić do niepotrzebnych retransmisji. Rozszerzenie SACK pozwala odbiorcy przekazać nadawcy zakresy danych, które dotarły poprawnie mimo luk. Nadawca widzi wtedy, że np. środkowy fragment zginął, ale późniejsze bajty już są u celu, i może skupić retransmisję na brakach. RFC 2018 wskazuje, że jest to szczególnie użyteczne przy wielu stratach w jednym oknie transmisji. Niezawodność TCP nie polega więc na prymitywnym „spróbuj od początku”, lecz na coraz dokładniejszym opisie tego, co faktycznie zaginęło.
Potwierdzenie kumulacyjne ma ograniczenie
Klasyczne ACK w TCP informuje przede wszystkim o najbliższym oczekiwanym numerze sekwencyjnym. Jeśli segment wcześniejszy zaginął, ale kilka późniejszych dotarło, odbiorca nadal sygnalizuje lukę. Nadawca wie, że czegoś brakuje, ale z samego kumulacyjnego ACK nie dostaje pełnej mapy wszystkich późniejszych fragmentów już obecnych u odbiorcy.
SACK dodaje mapę odebranych wysp
RFC 2018 definiuje opcję Selective Acknowledgment. Odbiorca może przekazać bloki ciągłych zakresów danych, które już posiada. Jeśli strumień przypomina linię z kilkoma dziurami, SACK opisuje „wyspy” po drugiej stronie luk. Nadawca może dzięki temu wnioskować, które zakresy warto retransmitować, a których nie trzeba ponownie przesyłać.
To szczególnie ważne na szybkich i długich łączach
Gdy w locie znajduje się dużo danych, pojedyncze okno transmisji może zawierać wiele segmentów. Jeśli kilka z nich zginie, powtarzanie dużej części prawidłowo odebranego materiału marnowałoby przepustowość i zwiększało czas odzyskiwania po stracie. RFC 2018 został zaprojektowany właśnie po to, by TCP lepiej radził sobie z wieloma utraconymi segmentami na raz.
Odbiorca nie retransmituje
Warto rozdzielić role. To odbiorca informuje, co ma, a nadawca decyduje o ponownym wysłaniu brakujących danych. Routery w środku Internetu zazwyczaj nie prowadzą rejestru segmentów TCP konkretnej sesji i nie przechowują ich na wypadek późniejszej utraty. Mechanizm naprawczy działa przede wszystkim między końcami połączenia.
Retransmisja nadal kosztuje czas
SACK nie sprawia, że strata pakietu staje się darmowa. Brakujące bajty muszą zostać ponownie wysłane, a kontrola przeciążenia może dodatkowo zmniejszyć tempo transmisji. Zysk polega na ograniczeniu niepotrzebnej pracy i szybszym zorientowaniu się, gdzie znajdują się luki. Na połączeniach o dużym RTT każdy zbędny cykl oczekiwania jest szczególnie kosztowny.
Niezawodność jest warstwą zbudowaną nad stratami
Sieć IP może gubić i przestawiać pakiety, ale aplikacja korzystająca z TCP zwykle widzi poprawny strumień bajtów. SACK pokazuje, jak wiele dodatkowej logiki potrzeba, żeby stworzyć tę iluzję. Internet nie eliminuje wszystkich strat w rdzeniu; często pozwala końcom wykryć je i naprawić na tyle inteligentnie, by aplikacja nie musiała się nimi zajmować.
SACK nie mówi „wyślij ten pakiet”, tylko opisuje stan odbiorcy
Bloki SACK są informacją pomocniczą: odbiorca raportuje zakresy bajtów, które znalazły się już w jego buforze. Nadawca łączy tę wiedzę z własnym stanem retransmisji, potwierdzeniami kumulacyjnymi i algorytmem kontroli przeciążenia. Dzięki temu może oszacować, co rzeczywiście zaginęło. To subtelna różnica, bo sieć nadal może przestawiać pakiety, a późno docierający segment nie musi oznaczać trwałej straty. Mechanizm powinien więc naprawić luki bez pochopnego zalewania sieci duplikatami. RFC 2018 powstał jako rozszerzenie negocjowane podczas zestawiania połączenia, co pokazuje też ewolucyjność TCP: podstawowy protokół może zachować kompatybilność, a końcówki dodają opcje poprawiające zachowanie w nowoczesnych warunkach transmisji. Ta selektywność ma największą wartość wtedy, gdy sieć przenosi dużo danych pomiędzy kolejnymi potwierdzeniami. Im większa ilość informacji pozostaje jednocześnie w locie, tym więcej poprawnie odebranych segmentów mogłoby zostać niepotrzebnie powtórzonych po kilku stratach. SACK zmniejsza ten koszt, przekazując nadawcy znacznie bogatszy obraz stanu odbiorcy.