|
Przy pojedynczym wysyłaniu segmentów otrzymanie każdego z nich musi zostać potwierdzone przez adresata. Do tego czasu nadawca czeka z wysłaniem kolejnych segmentów. Nie jest to efektywne pod względem czasu potrzebnego na przesłanie wszystkich danych.
W celu poprawienia transmisji został zaproponowany algorytm przesuwanego okna (ang. sliding window). Zamiast wysyłać pojedyncze segmenty i czekać na potwierdzenie otrzymania każdego z nich przed wysłaniem następnego, host wysyła tyle segmentów ile wynosi parametr długość okna przesłany przez odległy komputer. Następnie czeka na potwierdzenie otrzymania przez host docelowy otrzymania przesłanych segmentów. Host, do którego były adresowane przesyłane segmenty odpowiada wysłaniem segmentu pozwalającego na dalszą transmisję.
Szczegółowo mechanizm przesuwanego okna zostanie omówiony na następnym slajdzie.
|
Na rysunku pokazano przykładowy strumień danych podzielony na segmenty. Rozmiar okna wynosi w tym przypadku osiem segmentów. Oznacza to, że nadawca może wysłać osiem segmentów przed otrzymaniem potwierdzenia. Okno pozostaje „nieruchome” do momentu uzyskania potwierdzenia o otrzymaniu segmentów przez odbiorcę. Istotny jest przy tym fakt, że okno zostanie przesunięte dopiero, gdy zostanie otrzymane potwierdzenie o dotarciu segmentu o najniższym numerze w danej serii.
I tak jak dotrze do nadawcy potwierdzenie o dotarciu pierwszego segmentu do adresata, to okno zostanie przesunięte o jedną pozycję w prawo. Po przesunięciu okna w prawo o jedną pozycję wysyłany jest kolejny segment, w tym przypadku 9. Podobnie będzie się realizowana procedura dla pozostałych segmentów.
Gdyby się okazało, że nadeszły potwierdzenia otrzymania segmentów 2, 4,5,6,7,8,9, a nie nadeszło potwierdzenie otrzymania segmentu 3, to okno zostanie przesunięte tylko do początku segmentu 3. Wbudowane mechanizmy kontroli przesyłu zadbają o retransmisję zagubionego okna po upływie określonego czasu. Dla każdego niepotwierdzonego segmentu utrzymywany jest osobny zegar. Po upływie określonego czasu ponawiana jest transmisja zagubionego segmentu.
Podobne okno jest również zaimplementowane w protokole TCP po stronie odbiorcy.
|
|
Tak jak o zostało wspomniane na poprzednim slajdzie mechanizm przesuwanego okna jest zaimplementowany po obu stronach kanału transmisji. Z tego powodu okno „dzieli” segmenty na 3 kategorie:
segmenty na lewo od okna - to te, które zostały już przesłane
segmenty wewnątrz okna - to te, które są przesyłane i oczekuje się na potwierdzenie ich przesłania.
segmenty na prawo od okna - to te, które dopiero będą wysyłane.
|
|
Jak już zostało to wcześniej wspomniane protokół TCP posiada mechanizmy sterowania przepływem. W przypadku, gdy host docelowy nie jest w stanie obsłużyć nadchodzących segmentów wysyła potwierdzenie z wpisanym mniejszym rozmiarem okna. Host wysyłający powinien wtedy zmniejszyć ilość wysyłanych segmentów (rozmiar okna). Sytuacja taka może mieć miejsce, gdy serwer odpytywany jest przez dużą liczbę klientów i nie jest w stanie jednocześnie obsłużyć tych żądań.
Inny przypadek zmniejszenia rozmiaru okna hosta nadającego ma miejsce, gdy z powodu przeciążenia sieci część pakietów nie dociera na czas do adresata. Nadawca kontroluje czas, który upłynął od wysłania segmentu do otrzymania potwierdzenia, że segment ten dotarł do adresata. Po przekroczeniu czasu segment jest wysyłany ponownie. Przy dużej liczbie retransmisji nadawca automatycznie zmniejsza rozmiar okna do wielkości okna przeciążenia (ang. congestion window). Mechanizm ten określany jest jako kontrola przeciążeń i działa następująco:
w przypadku utraty segmentu wielkość okna jest redukowana o połowę
przy dalszych stratach rozmiar okna jest zmniejszany wykładniczo
gdy straty nadal występują przesyłane są tylko pojedyncze segmenty, a czas oczekiwania przed ponowną transmisją jest podwajany.
|
|
W przypadku ustąpienia przeciążenia sieci można zwiększać rozmiar okna. W tym przypadku nie jest to działanie odwrotne do opisanego na poprzednim slajdzie, tzn. podwajanie wielkości okna, gdy nie występują ponowne retransmisje. Działanie takie mogłoby prowadzić do niestabilności. Zamiast tego protokół TCP stosuje algorytm powolnego startu (ang. slow start).
Algorytm ten polega na zwiększaniu rozmiaru okna o jeden segment po każdym otrzymanym potwierdzeniu przesłania poprzedniego okna. Algorytm ten jest stosowany po nawiązaniu połączenia oraz po wystąpieniu przeciążenia dla istniejącej sesji.
|
|
Protokół TCP wykorzystuje numery sekwencyjne zarówno przy nadawaniu jak i odbieraniu (numer potwierdzenia). Wynika to z potrzeby zapewnienia niezawodności przesyłania danych. Przy przesyłaniu danych pochodzących z wyższych warstw modelu dane są dzielone na segmenty, a następnie przesyłane do niższych warstw. Ze względu na specyfikę protokołu IP pakiety mogą być przesyłane różnymi ścieżkami. Część z nim może po drodze zostać odrzucona. Po dotarciu do adresata istnieje potrzeba złożenia w całość przesyłanych segmentów. Dzięki stosowanym numerom sekwencyjnym złożenie komunikatu nie jest trudne. Również zaginięcie segmentu łatwo zidentyfikować i dokonać powtórnej transmisji w razie potrzeby.
|
|
Mechanizm uzgadniania trójetapowego wykorzystywany jest nie tylko do ustanawiania połączenia, ale również w celu zablokowania dostępu do serwera dla innych klientów. Atak tego typu jest określany jako DoS (ang. Denial of Service) - odmowa świadczenia usługi.
Atak taki polega na zalewaniu (ang. flooding) serwera specjalnie spreparowanym segmentami w celu nawiązania połączenia. Jest to wykonywane przez jeden host (lub grupę hostów). Wysyłane masowo pakiety zawierają segment z ustawionym bitem SYN, ale adres IP źródła jest generowany automatycznie (nie jest to adres hosta wysyłającego pakiety). Serwer próbuje odpowiedzieć na te żądania wysyłając segmenty SYN,ACK i czekając na potwierdzenie od fałszywego klienta. W ten sposób wyczerpuje jednocześnie zasoby przeznaczone dla prawdziwych klientów.
Jednym ze sposobów zmniejszenia uciążliwości takiego typu działalności intruzów jest zmniejszenie czasu oczekiwanie na potwierdzenie i zwiększenie długości bufora przeznaczonego na kolejką połączeń.
|
|
Tabela na slajdzie przedstawia porównanie cech protokołów warstwy transportowej.
|
|