Transmission Control Protocol (TCP)

Cíl kapitoly

V této kapitole si připomenete vlastnosti protokolu TCP a prohloubíte znalosti o jeho dynamickém chování. Tyto znalosti jsou důležité hlavně pro pochopení mechanismů, které se v síti používají pro nepřímé řízení chování zdrojů datových toků využívajících protokolu TCP.

Prekrekvizity

Před prostudováním této kapitoly se seznamte s úvodním popisem protokolu TCP (Dostálek, kap. 9).

Funkce TCP - opakování

Záhlaví TCP a jeho enkapsulace

Sliding Window

Bajty v datovém proudu se číslují (v obou směrech nezávisle), sekvenční číslo je číslem prvního bajtu v daném segmentu.

Délka segmentu

Potvrzování

Detekce ztraceného segmentu na vysílači:

Nagleův algoritmus

Používá se pro interaktivní aplikace generující krátké pakety (tzv. tinygramy).

Strategie retransmisí, výpočet timeoutu

Retransmission Timeout (RTO) odvozen z vyhlazeného Round-trip Time (RTT).

Chápání RTT:
čas mezi odesláním segmentu s určitým sekvenčním číslem a prvním ACK potvrzujícím toto sekvenční číslo (přímo nebo inkluzivně).

Výpočet RTO - původní verze

Nechť M je aktuální změřený RTT, R je vyhlazovaný RTT.
R=a.R+(1-a).M
RTO=R.b
a je koeficient pro vyhlazení, obvykle 0.9.
b je faktor variance zpoždění, doporučuje se hodnota 2.

Výpočet RTO - aktualizovaná verze pro vyšší fluktuaci RTT

Využívá se průměru a střední odchylky RTT.
A je vyhlazená hodnota RTT
D je vyhlazená variance
Err=M-A
A=A+g.Err               (g=1/8)
D=D+h.(|Err|-D)         (h=1/4)
RTO=A+4.D

Karnův algoritmus

Pokud vyprší timeout a dojde k retransmisi, nepřispívá RTT od následujícího ACK k výpočtu vyhlazeného RTT. Nelze totiž rozlišit, zda jde o opožděný ACK původních nebo již opakovaných dat.

Fast Retransmit

Navazování spojení

Three-way handshake:

Stavový diagram TCP - stavy při navazování spojení:

Listening Queue

Ukončování spojení

Stavy stavového diagramu TCP při ukončování spojení:

Stav 2MSL (Maximum Segment Lifetime)

Odmítnutí spojení

Indikuje se příznakem RST

Řízení toku dat

Syndrom hloupého okna (Silly Window Syndrome)

K syndromu hloupého okna dochází, pokud přijímač opakovaně nabízí krátké přijímací okno, namísto aby počkal, až bude moci nabídnout větší. Syndrom vede k neefektivnímu vysílání po krátkých segmentech.

Pomalý náběh (Slow start)

Vysílač upravuje šířku vysílacího okna (CWND,"Congestion Window"), ta se udržuje v bajtech.
Také udržuje hodnotu SSTHRESH, což je hodnota velikosti CWND, od které již začíná hrozit zahlcení.
Cílem je udržovat CWND blízko nad hodnotou SSTHRESH, kde však ještě nedochází k zahlcení

Postup:

  • na počátku CWND inicializováno na 1 segment (MSS bajtů)
  • při přijetí každého ACK k vyslanému segmentu (možná inkluzivního) zvětšení CWND o jeden segment (MSS)
  • pokračuje se do ztráty prvního segmentu

    Výsledkem je exponenciální řada počtu vysílaných segmentů (1,2,4,8,16,...).

    Předcházení zahlcení (Congestion Avoidance)

    Možné důvody zahlcení

    Implementace algoritmů Congestion Avoidance a Slow Start se obvykle spojuje.

    Pomalý start se znovu spouští při detekci výpadku segmentu timeoutem, ne při detekci duplicitním ACK (při tom stále ještě nějaké segmenty procházejí).

    Persist Timer

    Keepalive Timer