Počas predchádzajúcich rokov internetu bol internetový protokol (IP) jediným protokolom, ktorý ľudia používali na pripojenie k internetu. Problém s IP bol v tom, že ste mohli poslať správu a neboli ste si istí, či ju príjemca dostane alebo nie. Z tohto dôvodu bol vytvorený protokol TCP/IP.
TCP/IP zaisťuje, že všetky odosielané údaje sa dostanú k príjemcovi. Robí to tak, že klientovi a serveru poskytuje zabezpečené pripojenie pred odoslaním údajov. Toto zabezpečené pripojenie sa vytvorí prostredníctvom procesu známeho ako trojstranné nadviazanie spojenia, ktoré je tiež známe ako nadviazanie spojenia TCP/IP.
Čo je to trojsmerné podanie ruky?
Trojstranný handshake (TCP/IP handshake) sú prvé tri interakcie medzi klientom a serverom, ktoré sa pokúšajú nadviazať TCP spojenie. Tieto počiatočné interakcie sú nevyhnutné na vytvorenie bezpečného spojenia. V tejto fáze sa klient aj server dohodnú na parametroch, ktoré budú používať na kontrolu a overenie prichádzajúcich a odchádzajúcich paketov údajov. Tieto parametre budú vo forme segmentov TCP.
Čo je to segment TCP?
Pri pripojení TCP/IP musia byť všetky odosielané údaje vyrezané a štruktúrované podľa toho, čo je známe ako segmenty TCP. Tieto segmenty obsahujú informácie ako IP adresy, porty, vlajkové bity, poradové čísla, čísla potvrdení a voliteľné údaje alebo užitočné zaťaženie.
Prvé tri interakcie (trojstranné nadviazanie spojenia) budú obsahovať iba hlavičky segmentov TCP bez užitočného zaťaženia alebo pripojených údajov. Tu je ukážka segmentu TCP
Upozorňujeme, že vyššie uvedený obrázok je len pre TCP. Úplný segment TCP/IP vyžaduje oboje IP adresy od odosielateľa a príjemcu nad segmentom TCP vyššie.
Kedykoľvek posielate balík osobe, doručovacia služba vás požiada, aby ste pred odoslaním vyplnili informačný formulár a priložili ho k balíku. Podobne TCP vyžaduje, aby odosielateľ pripojil hlavičku segmentu (informačný formulár) k údajom (balíku) predtým, ako začne segment (balík) odosielať príjemcovi.
Kedykoľvek klient komunikuje so serverom, obe strany budú musieť naformátovať svoje interakcie vo forme segmentu TCP. Segment TCP obsahuje hlavu segmentu TCP pripojenú k údajom, ktoré sa pokúšate odoslať. Odosielateľ bude musieť vyplniť informácie, ktoré hlava segmentu vyžaduje.
Pri trojstrannom podaní ruky bude musieť odosielateľ vyplniť nasledovné:
- Zdrojový port: Identifikuje port odosielateľa
- Cieľový prístav: Identifikuje port prijímača
- Poradové číslo: Označuje sekvenciu segmentov
- Číslo potvrdenia: Znamená, že segment bol potvrdený pridaním jednotky k danému poradovému číslu
Okrem vyplnenia polí hlavičky segmentu musí odosielateľ vybrať aj príznak. Celkovo je k dispozícii šesť bitov príznaku, ale na trojstranné podanie ruky budete potrebovať iba tieto dva:
- SYN: Dáva poradové číslo. Toto poradové číslo sa použije na počítanie sekvencie všetkých prichádzajúcich segmentov po zvyšok interakcie.
- ACK: Označuje, že príjemca čísla SYN akceptuje požiadavku na pripojenie pridaním jednej (1) k uvedenému číslu SYN.
Teraz, keď viete, čo je segment TCP, pozrime sa, ako sa používa pri trojstrannom podaní ruky.
Ako funguje trojsmerné podanie ruky
Trojstranné podanie ruky sa vytvorí, keď si klient aj hostiteľ vymenia informácie a navzájom si potvrdia poradové čísla. Ako už názov napovedá, trojstranné podanie ruky prebieha v troch krokoch.
Najprv klient odošle čistý segment SYN, ktorý naznačuje, že chce pripojenie. Po druhé, server odpovie segmentom SYN-ACK, čo znamená, že potvrdil požiadavku a posiela svoje vlastné SYN číslo, ktoré má klient potvrdiť. Po tretie, klient odošle ACK segment serveru, aby ho upozornil, že SYN číslo servera bolo potvrdené a bude použité na ďalšie pripojenie.
Trojstranné podanie ruky bude vyzerať asi takto:
Poďme si to rozobrať a pozrieť sa na segmenty, aby ste vedeli, čo presne sa stane, keď si klient a server vymenia a potvrdí poradové čísla.
Krok 1: Klient odošle segment SYN
Klient odošle požiadavku na pripojenie odoslaním segmentu SYN na server. Klient používa IP adresu klienta na nájdenie servera a odoslanie segmentu TCP.
Aby sme znížili zložitosť segmentu, ignorujme niekoľko segmentových polí a sústreďme sa na to, čo je nevyhnutné pre trojstranné handshake spojenie. To zahŕňa zdrojový port, cieľový port, poradové číslo, číslo potvrdenia a typ použitého príznaku.
A s tým by segment SYN/request mal vyzerať takto:
Klientsky port je náhodné číslo medzi 49152 a 65536. Tento rozsah portov je dohodnutý rozsah, ktorý môžu verejné zariadenia dynamicky využívať na pripojenie k internetu. Rozsahy portov 1024 až 49151 sú súkromné. Na používanie portu v uvedenom rozsahu ich bude musieť zaregistrovať subjekt. Čísla portov pod 1024 sú porty vyhradené pre rôzne funkcie a internetové protokoly, ako sú FTP (port 20), SMTP (port 25), DNS (port 53) a HTTP (port 80).
V reálnom živote je poradové číslo náhodné číslo. Na uľahčenie vizualizácie sme napríklad použili 0000000000.
Všimnite si poradové číslo, keď postupujeme krokmi. V súčasnosti je to 0 000 000 000. Momentálne neexistuje žiadne číslo potvrdenia, pretože tu nie je čo potvrdiť.
Krok 2: Server odpovedá segmentom SYN-ACK
Keď server prijme segment SYN, odpovie odoslaním segmentu ACK obsahujúceho číslo potvrdenia. Číslo potvrdenia bude poradové číslo klienta plus jedna (1).
Pozrite sa na zdrojový port. Ukazuje, že segment pochádza z portu 20, čo znamená, že prišiel zo servera ako odpoveď.
Teraz sa pozrite na číslo potvrdenia. Je to 0000000001, čo je poradové číslo klienta (0000000000) plus jedna (1). Takto sa sleduje segment. Povedzme, že klient dostal odpoveď segmentu ACK, kde číslo potvrdenia je 0000000002. To by klientovi naznačovalo, že chýba segment 0000000001 a že klient bude musieť počkať, kým príde aby ste nezaznamenali stratu paketov.
Ako vidíte, aktivujú sa dva bity príznaku – SYN a ACK.
Okrem potvrdenia poradového čísla klienta server odošle aj svoje vlastné poradové číslo, aby klient potvrdil poradové číslo servera plus jedna (1). V našom príklade sme použili 1111111111 ako poradové číslo servera. V reálnom svete je toto číslo opäť náhodné.
Všimnite si, že poradové čísla klienta a servera sa nemusia zhodovať. Pokiaľ si obe strany navzájom uznajú svoje jedinečné poradové číslo, spojenie bude spoľahlivé.
Krok 3: Klient odpovedá segmentom ACK
Nakoniec klient potvrdí poradové číslo servera.
Posledným segmentom je segment ACK od klienta.
Ako môžete, klient potvrdí poradové číslo servera tak, že odpovie poradovým číslom servera (1111111111) plus jedným (1), čo je 1111111112.
Klient a server už nebudú posielať poradové číslo, pretože začiatok poradia už bol potvrdený. Obe strany však budú očakávať, že potvrdzovacie segmenty budú pokračovať v sekvenčných číslach plus jeden (1) a počet bajtov počas interakcie. V tomto prípade klient očakáva, že ďalšia odpoveď servera bude mať ACK 0000000002 (ak nie sú pripojené žiadne údaje).
Potom je nadviazané trojstranné podanie ruky!
Pochopenie fungovania sieťových pripojení
Teraz, keď ste sa naučili, ako funguje trojstranné podanie ruky, budete tiež ľahšie pochopiť, ako funguje protokol TCP po podaní ruky. Klient a server začnú odosielať údaje po nadviazaní spojenia. Tentoraz sa použije formát celého segmentu plus voliteľné údaje alebo užitočné zaťaženie.
Údaje sú zvyčajne segmentované/rozrezané na menšie časti pre jednoduchší prenos. Každý dátový segment má svoju vlastnú hlavu segmentu obsahujúcu poradové číslo a číslo potvrdenia. Dôvodom poradového čísla je poznať poradie segmentov, keď sa nakoniec znova poskladajú. Čísla potvrdenia slúžia na overenie u odosielateľa, že ich segment bol prijatý a že sa zhoduje so sekvenciou prichádzajúcich segmentov.
Počítanie sekvenčného čísla a jeho overenie s potvrdením je spôsob, akým môže TCP spoľahlivo prenášať obrovské množstvo dát bez chýbajúcich dátových paketov.
A s tým by ste mali mať celkom dobrú predstavu o tom, ako TCP funguje.