Warstwa transportowa TCP/IP
Okienkowanie

Aby zapewnić niezawodność zorientowanego połączeniowo transferu danych, pakiety danych muszą być dostarczane do odbiorcy w tej samej kolejności, w której zostały wysłane. Przesyłanie danych za pomocą danego protokołu nie powiedzie się, jeśli jakieś pakiety danych zostaną utracone, uszkodzone, powielone lub odebrane w innej kolejności. Łatwym rozwiązaniem jest potwierdzanie przez odbiorcę odbioru każdego pakietu przed wysłaniem kolejnego.

Gdyby nadawca musiał czekać na potwierdzenie po wysłaniu każdego pakietu, przepustowość byłaby niska. Z tego powodu w przypadku większości niezawodnych protokołów zorientowanych połączeniowo dozwolone jest pozostawanie więcej niż jednego pakietu bez potwierdzenia w danym czasie. Czas pozostały po zakończeniu transmisji pakietu danych przez nadawcę i przed zakończeniem przetwarzania otrzymanego przez niego potwierdzenia jest wykorzystywany do przesłania większej ilości danych. Liczba pakietów danych, które nadawca może wysłać przed otrzymaniem potwierdzenia, jest określana jako rozmiar okna lub okno.

Protokół TCP wykorzystuje potwierdzenia typu expectational. Potwierdzenia typu expectational oznaczają, że numer potwierdzenia odnosi się do pakietu, który jest oczekiwany jako następny. Obrazowym pojęciem opisującym dynamiczną negocjację rozmiaru okna podczas sesji TCP jest okienkowanie. Okienkowanie to mechanizm kontroli przepływu. Wymaga ono, żeby urządzenie źródłowe otrzymywało od adresata potwierdzenie po wysłaniu określonej ilości danych. Odbierający proces TCP zgłasza „okno" do wysyłającego procesu TCP. Okno to określa liczbę pakietów, poczynając od numeru potwierdzenia, do których odebrania jest obecnie gotów odbierający proces TCP.

Przy rozmiarze okna równym 3 urządzenie źródłowe może wysłać do adresata trzy bajty. Urządzenie źródłowe musi następnie czekać na potwierdzenie. Gdy adresat otrzyma trzy bajty, wysyła potwierdzenie do urządzenia źródłowego, które teraz może wysłać kolejne trzy bajty. Jeśli adresat z powodu przepełnienia buforów nie otrzyma tych trzech bajtów, to nie wyśle potwierdzenia. Ponieważ źródło nie otrzyma potwierdzenia, będzie to oznaczało, że bajty powinny być wysłane ponownie, a szybkość transmisji powinna zostać zmniejszona.

Jak pokazano na rysunku , nadawca wysyła trzy pakiety przed rozpoczęciem oczekiwania na potwierdzenie ACK. Jeśli odbiorca może obsłużyć okno o rozmiarze tylko dwóch pakietów, z okna odrzucony zostaje pakiet trzeci, określa się go jako następny, a nowa wartość rozmiaru okna jest określana jako dwa. Nadawca wysyła kolejne dwa pakiety, lecz ma ciągle ustawiony rozmiar okna równy trzy. Oznacza to, że nadawca będzie nadal oczekiwał potwierdzenia od odbiorcy po wysłaniu trzech pakietów. Odbiorca odpowiada, żądając piątego pakietu i nadal określając rozmiar okna równy dwa.