Sieci komputerowe Mechanizmy sterowania przebiegiem sesji TCP w Internecie Józef Woźniak Katedra Teleinformatyki Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej Opracowano na podstawie materiałów Andrzej Chydziński, Instytut Informatyki, Politechnika Śląska Tadeusz Czachórski, IITiS PAN Wydział Automatyki, Elektroniki i Informatyki Politechnika Śląska
Tematyka Mechanizmy typu flow control w protokole TCP Współzależność tych mechanizmów z zasadami kolejkowania w routerach Idea i cele aktywnego zarządzania kolejkami (AQM Active Queue Management) RED przykład algorytmu AQM 2
Kontrola przeciążenia w Internecie kolejka FIFO-DT protokół TCP protokół TCP 3
Z jaką częstością wysyłamy pakiety? Kolejne etapy transmisji pakietu Przepustowość na danym etapie przekazu datagramu Generator ruchu
Klasyczna kontrola przepływu okna kontrolne zasady sterowania przepływem (flow control) w małej sieci Receiver Window ( rwnd ): znane pod nazwą advertised window (awnd) używane przez odbiorcę do informowania o ilości wolnego miejsca w buforze tcp. Time-out y (ocena RTT) i pakiety ACK
Dlaczego przesuwne okno? snd_wnd snd_una snd_nxt
Sliding Window Flow Control Ilustracja algorytmu Sliding Window na poziomie bajtów (1 segment = 1 bajt): Advertised window 1 2 3 4 5 6 7 8 9 10 11 sent and acknowledged sent but not acknowledged can be sent USABLE WINDOW can't sent Tutaj: Nadajnik może transmitować kolejne bajty o numerach 6,7,8.
Sliding Window: zmniejszenie wymiaru okna Transmisja bajtu 6 (with SeqNo = 6) i odbiór powiadomienia o bajcie 5 (AckNo = 5; tu: numer bajtu oczekiwanego, Win=4): 1 2 3 4 5 6 7 8 9 10 11 Transmit Byte 6 1 2 3 4 5 6 7 8 9 10 11 AckNo = 5, Win = 4 is received 1 2 3 4 5 6 7 8 9 10 11
Sliding Window: Poszerzenie okna Odebrane zostaje powiadomienie, które zwiększa rozmiar okna przesuwa okno na prawo (AckNo = 5, Win=6): 1 2 3 4 5 6 7 8 9 10 11 AckNo = 5, Win = 6 is received 1 2 3 4 5 6 7 8 9 10 11 Odbiornik otwiera poszerza okno, gdy bufor TCP opróżnia się (oznacza to dostarczenie danych do aplikacji).
Sliding Window: Zmniejszenie szerokości okna Odebrane zostaje powiadomienie, które ogranicza okno z prawej strony (AckNo = 5, Win=3): 1 2 3 4 5 6 7 8 9 10 11 AckNo = 5, Win = 3 is received 1 2 3 4 5 6 7 8 9 10 11 Zmniejszanie okna nie jest korzystne...
Zarządzanie oknem w TCP Odbiornik przesyła zwrotnie do nadajnika dwa parametry: AckNo window size (win) 32 bits 16 bits Jest to interpretowane w następujacy sposób: Jestem gotowy do odbioru danych o numerach: SeqNo= AckNo, AckNo+1,., AckNo+Win-1 Odbiornik może potwierdzić dane bez zmiany szerokości okna; Odbiornik może zmienić okno bez potwierdzania danych.
Sliding Window: Przykład Sender sends 2K of data 2K SeqNo=0 Receiver Buffer 0 4K Sender sends 2K of data Sender blocked AckNo=2048 Win=2048 2K SeqNo=2048 AckNo=4096 Win=0 AckNo=4096 Win=1024 2K 4K 3K
TCP - Kontrola przeciążenia Congestion Control
Kontrola przepływu okna kontrolne Receiver Window ( rwnd ): znane pod nazwą advertised window (awnd) używane przez odbiorcę do informowania o ilości wolnego miejsca w buforze tcp. Congestion Window (cwnd ): wartość zależna od stanu sieci ( tj. ilości wystąpień zatorów w sieci ). Sender Window ( snd_wnd ): snd_wnd = min( awnd, cwnd ) Time-out y (ocena RTT) i pakiety ACK
TCP - Kontrola przeciążenia TCP posiada mechanizm kontroli przeciążenia - implementowany po stronie nadawczej; Nadawca dysponuje dwoma parametrami: Congestion Window (cwnd) Slow-start threshhold Value (ssthresh) Początkowa wartość jest równa wartości advertised window; Kontrola przeciążenia działa w dwóch trybach: slow start (cwnd < ssthresh) congestion avoidance (cwnd >= ssthresh)
Slow Start Wartość początkowa: Set cwnd = 1» Uwaga:Jednostką jest segment. TCP bazuje na bajtach i mechanizm zwiększa okno o 1 MSS (maximum segment size) Odbiornik przesyła powiadomienia (ACK) dla każdego pakietu» Uwaga: Generalnie, odbiornik TCP przesyła powiadomienie ACK dla każdego segmentu. Każdorazowo, gdy ACK zostanie odebrane przez nadawcę, okno congestion window jest zwiększane o 1 segment: cwnd = cwnd + 1» Jeżeli nawet ACK potwierdza 2 segmenty, cwnd jest zwiększane tylko o 1 segment.» Nawet, gdy ACK potwierdza segment mniejszy niż 1MSS bajtów, to cwnd wzrasta o 1. Czy zatem okno Slow Start rośnie wolno? Niekoniecznie. W rzeczywistości wzrost cwnd jest eksponencjalny!
Slow Start - przykład Rozmiar congestion window wzrasta szybko Dla każdego ACK, zwiększamy cwnd o 1, bez względu na liczbę potwierdzanych segmentów. TCP spowalnia wzrost cwnd gdy cwnd > ssthresh cwnd = 1 cwnd = 2 cwnd = 4 cwnd = 7 segment 1 ACK for segment 1 segment 2 segment 3 ACK for segments 2 ACK for segments 3 segment 4 segment 5 segment 6 ACK for segments 4 ACK for segments 5 ACK for segments 6
Slow Start
Unikanie przeciążenia - Congestion Avoidance Faza congestion avoidance jest inicjowana, gdy cwnd osiąga, w przypadku slow-start, wartość progową, czyli: Jeżeli cwnd >= ssthresh wówczas każdorazowo gdy ACK jest odbierane, wartość cwnd zwiększana jest w sposób następujący: cwnd = cwnd + 1/ [cwnd] Gdzie [cwnd] jest największą liczbą całkowitą mniejszą niż cwnd. Tym samym cwnd wzrasta o 1 tylko wtedy, gdy wszystkie cwnd segmentów zostało potwierdzonych.
Cwnd (in segments) Slow Start i Congestion Assume that ssthresh = 8 Avoidance cwnd = 1 cwnd = 2 cwnd = 4 14 12 10 8 6 4 2 0 t=0 ssthresh t=2 t=4 Roundtrip times t=6 cwnd = 8 cwnd = 9 cwnd = 10
Congestion avoidance
Reakcje na przeciążenie Mechanizm TCP przyjmuje, że wystąpiło przeciążenie, gdy wykryje utratę pakietu Nadawca TCP może wykryć utratę pakietu poprzez: Timeout (upływ czasu) zegara retransmisji Odbiór duplikatu ACK TCP interpretuje Timeout jako binarny sygnał przeciążenia. W takim przypadku nadawca postępuje następująco: cwnd jest zmniejszane do wartości 1: cwnd = 1 ssthresh jest ustalana jako ½ aktualnej wartości cwnd: ssthressh = cwnd / 2 Inicjowany jest slow start
Kontrola przeciążenia TCP powolny start (slow start) i unikanie przeciążenia (congestion avoidence) Oparta na regulacji rozmiaru okna przeciążenia (W) Idea - zwiększaj okno przeciążenia aż do wystąpienia straty pakietu (w ten sposób sonduj dostępną szybkość transmisji). W powolny start straty unikanie przeciążenia W 1 W+1 4 W W 1 /2 2 1 23 RTT RTT czas
Fast Retransmit Jeżeli odebrane zostaną 3 lub więcej (pod rząd) duplikaty ACK nadawca TCP uważa, że segment został stracony. AckNo=1024 1K SeqNo=0 1K SeqNo=1024 1K SeqNo=2048 TCP realizuje wówczas (przed upływem timeout u) retransmisję brakującego segmentu. duplicate duplicate AckNo=1024 AckNo=1024 1K SeqNo=3072 Realizuje przy tym zwykle procedurę slow start: ssthresh = cwnd/2 cwnd = 1 1K 1K SeqNo=1024 SeqNo=4096
Procedura Fast recovery pozwala uniknąć realizacji slow start po zainicjowaniu fast retransmit Intuicja mówi: Duplikaty ACK wskazują, że dane są przesyłane!! Fast Recovery cwnd=12 sshtresh=5 cwnd=12 sshtresh=5 AckNo=1024 1K SeqNo=0 1K SeqNo=1024 1K SeqNo=2048 Po odbiorze 3 duplikatów ACK set nadawca realizuje: Retransmisję straconego packetu ssthresh = cwnd/2 cwnd = cwnd+3 Dalej stosuje congestion avoidance Zwiększając cwnd o 1 po odbiorze każdego kolejnego duplikatu ACK cwnd=12 sshtresh=5 cwnd=12 sshtresh=5 AckNo=1024 AckNo=1024 1K 1K 1K SeqNo=3072 SeqNo=1024 SeqNo=4096 Gdy napływa ACK potwierdzające nowe dane (tutaj: AckNo=2028), set: cwnd=ssthresh enter congestion avoidance cwnd=9 sshtresh=9 AckNo=2048
Pojedyncza utrata pakietu Utrata pakietu 14 Slow Start Retransmisja pakietu Congestion Avoidance 3 zduplikowane ACK cwnd cwnd = 2*mss = 4*mss cwnd = 1*mss cwnd = 2*mss cwnd = 1*mss 339 396 Fast Recovery & Fast Retransmission cwnd Congestion = ssthresh Avoidance ssthresh = cwnd/2 Retransmisja pakietu 3 zduplikowane ACK
cwnd cwnd TCP Tahoe and TCP Reno (dla pojedynczych strat segmentów) Taho time Reno time
Zduplikowane ACK: Fast retransmit TCP Reno Fast recovery Fast Recovery unikamy procedury slow start Timeout: Retransmit Slow Start TCP Reno poprawia wyraźnie TCP Tahoe, gdy pojedyncze pakiety są tracone w czasie RTT.
TCP Congestion Control TCP Tahoe (1988, FreeBSD 4.3 Tahoe) Slow Start Congestion Avoidance Fast Retransmit TCP Reno (1990, FreeBSD 4.3 Reno) Fast Recovery New Reno (1996) SACK (1996) RED (Floyd and Jacobson 1993)