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)

Podobne dokumenty