Sekvenční čísla a ustavení spojení TCP protokolu
TCP chápe datový tok jako sekvenci oktetů (bytes), které jsou pro transport seskupovány do segmentů.
Sekvenční čísla
TCP chápe datový tok jako sekvenci oktetů (bytes), které jsou pro transport seskupovány do segmentů. Každý datový oktet má své sekvenční číslo. Sekvenční číslo prvního oktetu je určeno při ustavení spojení (je vygenerováno náhodně). Příslušné sekvenční číslo pak zvyšováno podle počtu oktetů, které byly po ustavení spojení odeslány. Rozsah sekvenčního čísla je mezi 0 a 231.
Sekvenční číslo, které je v TCP hlavičce odpovídá prvnímu oktetu v příslušném segmentu. Protože je číslován každý oktet, nabízí se potvrzování přijetí každého oktetu. Nicméně TCP (logicky) používá kumulativní metodu potvrzování. Potvrzení přijetí čísla X znamená, že uzel přijal všechny oktety až do čísla o jedno menšího než X. Výhodou tohoto potvrzovacího mechanismu je to, že přijaté oktety není nutné posílat znovu.
Každá strana plně duplexního spojení začíná od svého náhodně vygenerovaného sekvenčního čísla.
Ustavení spojení
Pokus o navázání spojení prováděný aplikačním procesem specifikuje zda jde aktivní nebo pasivní požadavek.
Pasivní otevření (passive open) spojení je jakousi obdobou zpětného volání. Je iniciován procesem nabízejícím službu ostatním volajícím. Znamená to, že prostřednictvím služby pasivního otevření upozorní uzly na to, že pokud si to přejí, mohou aktivně navázat proces na známém TCP portu.
Aktivní otevření (active open) je prováděno klientem, který se chce spojit s procesem na vzdáleném serveru. Na základě přijetí požadavku aktivního otevření vytváří server TCP proces pro správu kontrolních informací datového toku. Spojení je vytvořeno po úspěšné výměně synchronizačních paketů (SYN). Synchronizační pakety zajišťují výměnu počátečních sekvenčních čísel a základních kontrolních informací, na kterých se obě komunikující strany musí shodnout před zahájením přenosu dat.
Proces ustavení spojení má 4 základní funkce :
· výměnou požadavku a odpovědi ujišťuje obě strany procesu, že ta druhá existuje;
· zajišťuje výměnu volitelných parametrů jako jsou velikost paketu, velikost okna (window) a úroveň služeb (QoS);
· alokuje transportní zdroje jako je např. velikost bufferu;
· vytváří vstupní informace do tabulky spojení.
Three-Way Handshake je název procesu, který je používán pro ustavení spojení. Tato procedura je normálně vyvolána zdrojovou (aktivní) částí TCP software a je směrována na cílový (pasivní) TCP software. Zdrojovou část TCP software lze také označit za klientskou a cílovou část za serverovou.
Handshake je navržen tak, aby fungoval i v případě, že oba uzly mají jak klientskou i serverovou část a pokoušejí se navázat spojení najednou.
Prvním krokem, který klientský proces provádí při vytváření nového spojení je definování datové struktury známé jako Transport Connection Block (TCB). Lokální TCB musí vytvořit aktivní i pasivní konec spojení.
TCB obsahuje tyto informace:
· typ spojení (aktivní, pasivní);
· číslo vzdáleného a místního TCP portu;
· vzdálenou a místní IP adresu;
· stav spojení;
· ukazatel do vstupního bufferu na místo kde začíná počáteční SYN paket (pouze pasivní strana spojení).
Ve své vlastní inicializační proceduře TCP vytváří dvě schránky – jednu pro data přijímaná od klientské aplikace a druhou data přijímaná od sítě. Potom navazuje socket s IP, alokuje paměť a generuje sekvenčí číslo a velikost okna.
TCP handshake krok za krokem
Petr Odvárka Tutoriály 3. prosince 2000
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ů.