TCP handshake krok za krokem

Three-Way Handshake je název procesu, který je používán pro ustavení spojení.

Handshake krok č. 1

Nový TCP proces otevírá socket a používá při tom lokální a vzdálené číslo portu, specifikované v TCB. Jestliže TCP proces na aktivní straně přiřadí číslu lokálního portu hodnotu nula, IP zajistí socketu unikátní číslo lokálního portu. Pasivní strana odpovídá aktivní straně s použitím čísel portů, které byly zajištěny aktivní stranou.

Je-li lokální socket vytvořen, TCP posílá vzdálenému socketu inicializační paket SYN, nastavuje časovač pro opětovné poslání (retransmission timer) a čeká na návrat odpovědi od vzdáleného soketu. Nejdéle však po dobu danou časovačem. SYN paket obsahuje prázdný TCP segment a má nastavený příznak SYNv TCP hlavičce.

Na obrázku č. 1 posílá aktivní strana požadavek na spojení se sekvenčním číslem 350.

Handshake krok č. 2

Když dorazí SYN paket na serverovou stranu procesu, IP proces zjišťuje zda je socket možné přijmout. Je-li vše v pořádku, postoupí paket poslouchajícímu procesu, který verifikuje nastavení příznaku SYN a kontrolní součet. Pokud je paket vhodný k přijetí požadavku, naslouchající proces zajišťuje vytvoření TCP procesu na této (pasivní) straně. Je vytvořen TCB, TCP software z paketu vybere IP adresu odesílatele a čísla TCP portů a zajistí vytvoření bufferu. Nově vytvořený proces odesílá aktivní straně SYN-ACK paket. Při tom nastavuje časovač pro opětovné poslání (retransmission timer) za stejným účelem jako první strana.

Pasivní strana generuje vlastní sekvenční číslo (např. 500) a dává na vědomí aktivní straně, že další paket očekává pod sekvenčním číslem 351.

Handshake krok č. 3

Když TCP proces, který vyvolal spojení obdrží ze serverové (pasivní) strany paket potvrzení synchronizace (SYN-ACK), posílá zpět paket potvrzující přijetí potvrzení. Mezi tímto paketem a paketem, který jako potvrzení obdržel sám je rozdíl v tom, že tento paket má nastaven pouze příznak ACK, nikoliv SYN.

Pokud serverový proces obdrží ACK paket, je spojení ustaveno a může být zahájen přenos dat.

Důležité poznámky

Pro všechny kroky platí, že po pokud nepřijde odpověď do vypršení časovače, je provedeno opětovné odeslání paketu. Počet možných opakování je uživatelsky ovlivnitelný a dojde-li k jeho překročení je pro vyšší vrstvy generována chyba.

Asi jste si všimli, že v kroku č. 1 je nastaven příznak SYN a v kroku č. 2 jsou společně nastaveny příznaky SYN a ACK. Jde o stavy uvedených příznaků, které jsou jedinečné pro proces ustavení spojení – nikdy jindy se v TCP procesu nevyskytují. Této znalosti lze použít pro zamezení jednosměrného navázání TCP spojení (např. povolit z intranetu do Internetu, ale zakázat z Internetu do intranetu) a tvoří  jeden ze základních principů filtračních firewallů.