cwnd = 1 -
Transkrypt
cwnd = 1 -
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 3 protokół TCP Z jaką częstością wysyłamy pakiety? Kolejne etapy transmisji pakietu Generator ruchu Przepustowość na danym etapie przekazu datagramu 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 sent and acknowledged 3 4 5 sent but not acknowledged 6 7 8 can be sent USABLE WINDOW 9 10 11 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 • Zmniejszanie okna nie jest korzystne.... 8 9 10 11 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 Receiver Buffer Sender sends 2K of data 0 4K 2K SeqNo=0 2K Sender blocked Sender sends 2K of data Win=2048 AckNo=2048 2K SeqNo=2 048 4K Win=0 AckNo=4096 3K Win=1024 AckNo=4096 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 ): min( awnd, cwnd ) snd_wnd = 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. cwnd = 1 segment 1 t1 ACK for segmen cwnd = 2 cwnd = 4 • TCP spowalnia wzrost cwnd gdy cwnd > ssthresh segment 2 segment 3 ts 2 ACK for segmen ts 3 ACK for segmen segment 4 segment 5 segment 6 ts 4 ACK for segmen ts 5 ACK for segmen ts 6 ACK for segmen cwnd = 7 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. Slow Start i Congestion Avoidance Assume that ssthresh = 8 cwnd = 1 cwnd = 2 cwnd = 8 ssthresh 6 t= 4 t= 2 cwnd = 9 t= 0 14 12 10 8 6 4 2 0 t= Cwnd (in segments) cwnd = 4 Roundtrip times 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 straty powolny start W1 unikanie przeciążenia W+1 W 4 W1/2 2 1 23 RTT RTT czas Fast Retransmit 1K SeqNo=0 • Jeżeli odebrane zostaną 3 lub więcej (pod rząd) duplikaty ACK nadawca TCP uważa, że segment został stracony. • TCP realizuje wówczas (przed upływem timeout’u) retransmisję brakującego segmentu. • Realizuje przy tym zwykle procedurę slow start: ssthresh = cwnd/2 cwnd = 1 AckNo=1024 1K SeqNo=1 024 1K SeqNo=2 048 duplicate AckNo=1024 1K SeqNo=3 072 duplicate AckNo=1024 1K SeqNo=1 024 1K SeqNo=4 096 Fast Recovery • • • Procedura Fast recovery pozwala uniknąć realizacji slow start po zainicjowaniu fast retransmit Intuicja mówi: Duplikaty ACK wskazują, że dane są przesyłane!! 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 • Gdy napływa ACK potwierdzające “nowe dane” (tutaj: AckNo=2028), set: cwnd=ssthresh enter congestion avoidance cwnd=12 sshtresh=5 cwnd=12 sshtresh=5 1K SeqNo=0 AckNo=1024 1K SeqNo=1 024 1K SeqNo=2 048 cwnd=12 sshtresh=5 AckNo=1024 1K SeqNo=3 072 cwnd=12 sshtresh=5 AckNo=1024 1K SeqNo=1 024 1K SeqNo=4 096 cwnd=9 sshtresh=9 AckNo=2048 Pojedyncza utrata pakietu 339 Utrata pakietu 14 cwnd = 2*mss Congestion Avoidance Retransmisja pakietu cwnd = 1*mss 3 zduplikowane ACK Slow Start cwnd cwnd = 2*mss = 4*mss cwnd = 1*mss Fast Recovery & Fast Retransmission cwnd = ssthresh Congestion Avoidance ssthresh = cwnd/2 Retransmisja pakietu 3 zduplikowane ACK 396 TCP Tahoe and TCP Reno cwnd (dla pojedynczych strat segmentów) Taho cwnd time Reno time TCP Reno • Zduplikowane ACK: • Fast retransmit • 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)