W swojej podstawowej postaci, TCP może mieć rozmiar okna 1,
co oznacza, że dla każdego segmentu nadawanego
przez nadawcę, odbiornik wysyła potwierdzenie dla tego pojedynczego segmentu.
Powoduje to jednak znaczne
spowolnienie przepustowości, ponieważ nadawca nie może
przesyłać więcej danych, dopóki nie otrzyma potwierdzenia wysłania tego pojedynczego segmentu.
Przepustowość będzie bardzo niska w zależności
od czasu wyjazdu
w obie strony między wysłaniem danych a odebraniem potwierdzenia.
Protokół TCP pozwala jednak na większe rozmiary okien, aby umożliwić przesłanie większej
liczby segmentów przed odebraniem
potwierdzenia. 12
Okno to liczba segmentów
danych, które nadawca może wysłać bez otrzymania potwierdzenia od odbiorcy.
W tym przypadku
ustawiliśmy go na 1, co oznacza, że gdy host
A chce wysłać ruch do hosta B, może wysłać 1 segment, ponieważ rozmiar
okna jest ustawiony na 1 host B, po otrzymaniu tego segmentu, wysyła potwierdzenie.
W tym przykładzie, załóżmy, że host A, wyśle segment z numerem sekwencji 1 hosta
B, który potwierdzi dla segmentu 2.
Host A następnie wyśle segment
2 i host B, po pomyślnym otrzymaniu tego segmentu potwierdzi
lub potwierdzi dla segmentu 3.
Host A następnie wyśle segment 3 do hosta B.
Proces ten będzie kontynuowany przez cały czas trwania sesji, co
oczywiście jest bardzo wiarygodne, ale przepustowość jest bardzo niska.
A musiałby buforować wychodzące segmenty, dopóki
nie otrzyma potwierdzenia dla transmitowanego segmentu.
teraz dla argumentu załóżmy, że trwa
1 sekunda dla ruchu z
początkiem z małym rozmiarem okna,
a następnie wykładniczo zwiększa rozmiar okna, aby ocenić
ilość danych, które odbiornik może odbierać i co sieć może obsłużyć.
Zauważyłeś to prawdopodobnie, gdy pobierasz plik z Internetu, początkowo
prędkość pobierania jest wolna,
ale z czasem wzrasta do określonego punktu.
Wynika to z faktu, że rozmiar okna początkowo jest mały,
ale następnie wzrasta wykładniczo, aż do momentu, gdy pakiet
zostanie upuszczony lub host odbierający nie będzie w stanie obsłużyć ilości danych, które odbiera.
Początkowo zauważysz, że prędkość pobierania jest bardzo wolna,
wzrasta bardzo szybko, a następnie osiąga punkt, a następnie utrzymuje się
na tym poziomie.
Przypuśćmy więc, że
hosty w tym przykładzie mają stały rozmiar okna wynoszący 3.
Oznacza to, że A może wysłać 3 segmenty przed otrzymaniem potwierdzenia.
Tak więc w tym przypadku host A
wysyła segmenty 1, 2 i 3 potwierdzeń hosta B dla
segmentu 4, dzięki czemu A wie, że pomyślnie odebrał segmenty
1, 2 i 3 hosta A, a następnie wysyła segmenty 4,5 i 6,
ponieważ ma rozmiar okna poprawki 3 i
B potwierdzają dla segmentu 7, pozwalając A, że otrzymał segmenty 4,5 i 6.
Zapamiętaj z potwierdzeniami, potwierdzaj następny segment, który chcesz otrzymać, a nie segment,
który już otrzymałeś. 80 Tak więc host B nie potwierdza dla segmentu
6, ale uznaje segment 7.
Jak już wspomniałem, przesuwne okno pozwala gospodarzom zmierzyć ilość danych, które
odbiornik może odbierać i co może obsłużyć sieć.
Tak więc w tym przykładzie załóżmy, że host
używa okna przesuwnego w taki sposób, że określa,
co sieć może obsłużyć, gdy pakiet zostanie upuszczony przez sieć, host zwolni.
Informacje te są bardziej
szczegółowo omówione na kursach zawierających jakość usług.
W tym kursie
zakładamy, że po
upuszczeniu pakietu zmniejszyły one dramatycznie rozmiar okna, rozmiar okna to okno nadane przez nadawcę przez odbiorcę
lub okno obliczeniowe zwane oknem przeciążenia lub CWND okno ruchu
lub CWND początkowo ustawiony na bardzo niską wartość przy ustanawianiu połączenia,
a następnie wzrasta w tempie wykładniczym.
Dla każdego zgubionego segmentu, okno zatoru jest
o połowę po tym, jak utracony segment
został pomyślnie ponownie przesłany, okno zatoru rośnie
ponownie, aż osiągnie wartość połowy oryginalnego
okna przeciążenia, a następnie spowalnia jego wzrost, stosując algorytm zwany unikaniem przeciążenia.
To wykładniczo rośnie do połowy oryginalnego rozmiaru okna przeciążenia, a następnie
zwiększa się powoli z prędkością liniową.
W jakości usługi Ważone Losowe Wczesne Wykrywanie lub WRED mogą być wykorzystane
do poprawy wydajności transmisji TCP przez łącze, ponieważ pakiety są losowo usuwane
z różnych przepływów lub różnych sesji przechodzących przez indywidualny interfejs, a nie
pakietów z
wielu nadawców spada w tym samym czasie.
w ten sposób unika się problemu zwanego globalną synchronizacją, w którym pakiety
z wielu sesji TCP upuszczają się w tym samym czasie i dlatego wiele hostów zmniejsza jednocześnie ich
rozmiar okna i spowolnienie 110 a następnie stopniowo
zwiększają rozmiar okna, a tym samym ich przepustowość w tym samym czasie.
Więc wielu gospodarzy zwalnia i przyspiesza jednocześnie z
WRED, niektóre hosty
będą zwalniać, a inni gospodarze zwiększą przepustowość, ponieważ losowo spadną.
Więcej informacji na temat WRED można znaleźć w dokumentacji jakości usług.
W tym przykładzie załóżmy, że zaczynamy od początkowego rozmiaru okna 3.
A przekazuje 3 segmenty do B, jednak tylko segment 1 i 2 dociera do segmentu
3 hosta B.
Host B może zmniejszyć rozmiar okna w tym przykładzie do 2 i potwierdzić segment 3.
Pamiętaj, że potwierdzenie dotyczy następnego pakietu, który hosty spodziewają się odebrać, a ponieważ host
B nie otrzymał segmentu
3, potwierdza pomyślne odebranie segmentów 1 i 2.
Host A przekaże ponownie segment 3 i w tym przykładzie wyśle segment 4, ale także zażąda rozmiaru
okna 3.
Oba te segmenty zostały pomyślnie odebrane przez hosta B, więc host B
potwierdzi dla segmentu 5, ale
w tym przykładzie nadal chce mieć rozmiar okna 2.
Host A wyśle tylko 2 segmenty, ponieważ wynegocjowany rozmiar okna wynosi
2, ale A może zażądać zwiększenia rozmiaru okna do 3.
Przy przesuwanym oknie istnieje dynamiczna negocjacja rozmiaru okna i rozmiar okna może
się radykalnie zmienić podczas sesji, w zależności od tego,
co może obsłużyć odbiornik i co może obsłużyć sieć.