V dřívějších letech internetu byl internetový protokol (IP) jediným protokolem, který lidé používali k připojení k internetu. Problém s IP byl, že jste mohli poslat zprávu a nebyli si jisti, zda ji příjemce obdrží nebo ne. Z tohoto důvodu byl zaveden TCP/IP.

TCP/IP zajišťuje, že všechna data, která odesíláte, se dostanou ke svému příjemci. Dělá to tak, že před odesláním dat poskytuje klientovi a serveru zabezpečené připojení. Toto zabezpečené připojení je navázáno prostřednictvím procesu známého jako třícestný handshake, také známý jako TCP/IP handshake.

Co je třícestné podání ruky?

Obrazový kredit: Fleshgrinder/Wikimedia

Třícestný handshake (TCP/IP handshake) jsou první tři interakce mezi klientem a serverem, které se snaží navázat TCP spojení. Tyto počáteční interakce jsou nezbytné pro vytvoření zabezpečeného připojení. V této fázi se klient i server dohodnou na parametrech, které budou používat ke kontrole a ověření příchozích a odchozích paketů dat. Tyto parametry budou ve formě segmentů TCP.

Co je to segment TCP?

V připojení TCP/IP musí být všechna odesílaná data oříznuta a strukturována podle toho, co je známo jako segmenty TCP. Tyto segmenty obsahují informace jako IP adresy, porty, příznakové bity, sekvenční čísla, potvrzovací čísla a volitelná data nebo užitečné zatížení.

První tři interakce (třícestný handshake) budou obsahovat pouze záhlaví segmentů TCP bez datové zátěže nebo připojených dat. Zde je ukázka segmentu TCP

Obrazový kredit: Ere/Wikimedia

Všimněte si, že obrázek výše je pouze pro TCP. Úplný segment TCP/IP vyžaduje obojí IP adresy od odesílatele a příjemce nad segmentem TCP výše.

Kdykoli posíláte balík osobě, musíte doručovací službou vyplnit informační formulář a před odesláním jej přiložit k balíku. Podobně TCP vyžaduje, aby odesílatel připojil hlavičku segmentu (informační formulář) k datům (balíčku), než začne segment (balíček) odesílat příjemci.

Kdykoli klient komunikuje se serverem, obě strany budou muset formátovat své interakce ve formě segmentu TCP. Segment TCP obsahuje hlavu segmentu TCP připojenou k datům, která se pokoušíte odeslat. Odesílatel bude muset vyplnit informace, které hlava segmentu vyžaduje.

Pro třístranné podání ruky bude odesílatel muset vyplnit následující:

  • Zdrojový port: Identifikuje port odesílatele
  • Cílový přístav: Identifikuje port přijímače
  • pořadové číslo: Označuje sekvenci segmentů
  • Číslo potvrzení: Znamená, že segment byl potvrzen přidáním jedničky k danému pořadovému číslu

Kromě vyplňování polí záhlaví segmentu musí odesílatel také vybrat příznakový bit. Celkem je k dispozici šest příznakových bitů, ale pro třícestný handshake budete potřebovat pouze následující dva:

  1. SYN: Dává pořadové číslo. Toto pořadové číslo bude použito k počítání posloupnosti všech příchozích segmentů po zbytek interakce.
  2. ACK: Označuje, že příjemce čísla SYN přijímá požadavek na připojení přidáním jedné (1) k danému číslu SYN.

Nyní, když víte, co je to TCP segment, pojďme se podívat, jak se používá v třícestném handshake.

Jak funguje třícestné podání ruky

Třícestné navázání komunikace je navázáno, když si klient i hostitel vyměnili informace a vzájemně potvrdili svá pořadová čísla. Jak název napovídá, třístranné podání ruky se provádí ve třech krocích.

Nejprve klient odešle čistý segment SYN, který naznačuje, že chce připojení. Za druhé, server odpoví segmentem SYN-ACK, což znamená, že potvrdil požadavek a posílá své vlastní SYN číslo, které má klient potvrdit. Za třetí, klient odešle ACK segment serveru, aby jej informoval, že SYN číslo serveru bylo potvrzeno a bude použito pro další připojení.

Třístranné podání ruky bude vypadat nějak takto:

Aktivní kredit: Fleshgrinder/Wikimedia

Pojďme si to rozebrat a podívat se na segmenty, abyste věděli, co přesně se stane, když si klient a server vymění a potvrdí pořadová čísla.

Krok 1: Klient odešle segment SYN

Aktivní kredit: Fleshgrinder/Wikimedia

Klient odešle požadavek na připojení odesláním segmentu SYN na server. Klient používá adresu IP klienta k vyhledání serveru a odeslání segmentu TCP.

Abychom snížili složitost segmentu, ignorujme několik segmentových polí a soustřeďme se na holé nezbytnosti pro třícestné handshake spojení. To zahrnuje zdrojový port, cílový port, pořadové číslo, potvrzovací číslo a typ použitého příznakového bitu.

A s tím by segment SYN/požadavek měl vypadat takto:

Obrázek vytvořený spisovatelem 

Klientský port je náhodné číslo mezi 49152 a 65536. Tento rozsah portů je dohodnutý rozsah, který mohou veřejná zařízení dynamicky používat pro připojení k internetu. Rozsahy portů 1024 až 49151 jsou soukromé. Aby mohly používat port v uvedeném rozsahu, bude je muset zaregistrovat subjekt. Čísla portů pod 1024 jsou porty vyhrazené pro různé funkce a internetové protokoly, jako je FTP (port 20), SMTP (port 25), DNS (port 53) a HTTP (port 80).

V reálném životě je pořadové číslo náhodné číslo. Například jsme použili 0000000000, abychom usnadnili vizualizaci.

Při postupu v jednotlivých krocích si poznamenejte pořadové číslo. Aktuálně je to 000000000. Aktuálně neexistuje žádné číslo potvrzení, protože není co potvrzovat.

Krok 2: Server odpovídá segmentem SYN-ACK

Aktivní kredit: Fleshgrinder/Wikimedia

Jakmile server přijme segment SYN, odpoví odesláním segmentu ACK obsahujícího číslo potvrzení. Číslo potvrzení bude pořadové číslo klienta plus jedna (1).

Obrázek vytvořený spisovatelem

Podívejte se na zdrojový port. Ukazuje, že segment pochází z portu 20, což znamená, že přišel ze serveru jako odpověď.

Nyní se podívejte na číslo potvrzení. Je to 0000000001, což je pořadové číslo klienta (0000000000) plus jedna (1). Takto je sledován segment. Řekněme, že klient obdržel odpověď segmentu ACK, kde číslo potvrzení je 0000000002. To by klientovi naznačovalo, že segment 0000000001 chybí a že klient bude muset počkat, až dorazí abyste nezaznamenali ztrátu paketů.

Jak vidíte, jsou aktivovány dva příznakové bity – SYN a ACK.

Kromě potvrzení pořadového čísla klienta server také odešle své vlastní pořadové číslo, aby klient potvrdil pořadové číslo serveru plus jedna (1). V našem příkladu jsme jako pořadové číslo serveru použili 1111111111. V reálném světě je toto číslo opět náhodné.

Všimněte si, že pořadová čísla klienta a serveru se nemusí shodovat. Dokud si obě strany vzájemně potvrdí své jedinečné pořadové číslo, bude spojení spolehlivé.

Krok 3: Klient odpovídá segmentem ACK

Aktivní kredit: Fleshgrinder/Wikimedia

Nakonec klient potvrdí pořadové číslo serveru.

Obrázek vytvořený spisovatelem

Posledním segmentem je segment ACK od klienta.

Jak můžete, klient potvrdí pořadové číslo serveru tím, že odpoví pořadovým číslem serveru (1111111111) plus jedním (1), což je 1111111112.

Klient a server již nebudou posílat pořadové číslo, protože začátek sekvence již byl potvrzen. Obě strany však budou očekávat, že potvrzovací segmenty pokračují v pořadových číslech plus jedna (1) a počet bajtů během interakce. V tomto případě klient očekává, že další odpověď serveru bude mít ACK 0000000002 (pokud nejsou připojena žádná data).

Poté je navázáno třístranné podání ruky!

Pochopení toho, jak fungují síťová připojení

Nyní, když jste se naučili, jak funguje třístranné podání ruky, budete také snáze porozumět tomu, jak funguje protokol TCP po podání ruky. Klient a server začnou odesílat data po navázání handshake. Tentokrát bude použit celý formát segmentu plus volitelná data nebo užitečné zatížení.

Data jsou obvykle segmentována/rozřezána na menší části pro snadnější přenosy. Každý datový segment má svou vlastní hlavu segmentu obsahující pořadové číslo a potvrzovací číslo. Důvodem pro pořadové číslo je znát posloupnost segmentů, až budou nakonec znovu sestaveny. Čísla potvrzení slouží k ověření u odesílatele, že jejich segment byl přijat a že se shoduje s posloupností příchozích segmentů.

Počítání sekvenčního čísla a jeho ověření s potvrzením je způsob, jak může TCP spolehlivě přenášet obrovské kusy dat bez chybějících datových paketů.

A díky tomu byste měli mít docela dobrou představu o tom, jak TCP funguje.