Opóźnione potwierdzenie TCP

Opóźnione potwierdzenie TCP jest techniką stosowaną przez niektóre implementacje protokołu kontroli transmisji w celu poprawy wydajności sieci . Zasadniczo kilka ACK można połączyć w jedną odpowiedź, zmniejszając obciążenie protokołu. Jednak w niektórych okolicznościach technika ta może zmniejszyć wydajność aplikacji.

Metoda i zalety

Jak opisano w dokumencie RFC 1122, host może opóźnić wysłanie odpowiedzi ACK nawet o 500 ms. Dodatkowo, przy strumieniu pełnowymiarowych przychodzących segmentów, odpowiedzi ACK powinny być wysyłane dla co drugiego segmentu.

Opóźnione potwierdzenia ACK mogą dać aplikacji możliwość zaktualizowania okna odbierania TCP , a także być może wysłania natychmiastowej odpowiedzi wraz z potwierdzeniem. W przypadku niektórych protokołów, takich jak Telnet , opóźnione potwierdzenia ACK mogą zmniejszyć liczbę odpowiedzi wysyłanych przez serwer trzykrotnie, łącząc potwierdzenie, aktualizację okna i dane odpowiedzi w jednym segmencie.

Problemy

Dodatkowy czas oczekiwania wprowadzony przez opóźnione potwierdzenie ACK może powodować dalsze opóźnienia podczas interakcji z niektórymi aplikacjami i konfiguracjami. Jeśli strona wysyłająca używa algorytmu Nagle'a , dane będą umieszczane w kolejce przez nadawcę do momentu otrzymania potwierdzenia ACK. Jeśli nadawca nie wyśle ​​wystarczającej ilości danych, aby wypełnić maksymalny rozmiar segmentu (na przykład, jeśli wykona dwa małe zapisy, a następnie odczyt blokujący), transfer zostanie wstrzymany do czasu opóźnienia ACK. Linux 2.4.4+ obsługuje TCP_QUICKACK , która wyłącza opóźnione potwierdzenie ACK.

Rozważmy na przykład sytuację, w której Bob wysyła dane do Carol. W warstwie gniazd Boba pozostało do wysłania mniej danych niż cały pakiet. Zgodnie z algorytmem Nagle'a, nie zostanie wysłany, dopóki nie otrzyma ACK dla danych, które zostały już wysłane. Jednocześnie warstwa aplikacji Carol nie wyśle ​​odpowiedzi, dopóki nie otrzyma wszystkich danych. Jeśli Carol używa opóźnionych ACK, jej warstwa gniazda nie wyśle ​​ACK, dopóki nie zostanie osiągnięty limit czasu.

Jeśli aplikacja przesyła dane w mniejszych porcjach i oczekuje okresowych odpowiedzi potwierdzających, taka negatywna interakcja może wystąpić. Aby zapobiec temu opóźnieniu, warstwa aplikacji musi stale wysyłać dane bez czekania na odpowiedzi potwierdzające. Alternatywnie algorytm Nagle'a może zostać wyłączony przez aplikację po stronie wysyłającej.