Navázání a přerušení TCP spojení. Vytvoření a ukončení TCP spojení

Protokolový zásobník, nebo hovorově TCP/IP, je síťová architektura moderních zařízení navržená pro použití v síti. Stoh je zeď, ve které každá složka cihly leží na druhé a závisí na ní. Protokolový zásobník se začal nazývat „zásobník TCP/IP“ díky dvěma hlavním implementovaným protokolům – samotnému IP a na něm založenému TCP. Jsou to však pouze ty hlavní a nejčastější. Když ne stovky, tak desítky dalších se dodnes používají k různým účelům.

Světový web, který známe, je založen na HTTP (hyper-text transfer protocol), který zase funguje na TCP. Toto je klasický příklad použití zásobníku protokolů. Existují také e-mailové protokoly IMAP/POP a SMTP, protokoly vzdáleného shellu SSH, protokoly vzdálené plochy RDP, databáze MySQL, SSL/TLS a tisíce dalších aplikací s vlastními protokoly (..)

Jak se všechny tyto protokoly liší? Je to docela jednoduché. Kromě různých cílů stanovených během vývoje (například rychlost, bezpečnost, stabilita a další kritéria) jsou za účelem diferenciace vytvářeny protokoly. Existují například protokoly na aplikační úrovni, které se pro různé aplikace liší: IRC, Skype, ICQ, Telegram a Jabber jsou vzájemně nekompatibilní. Jsou navrženy tak, aby vykonávaly konkrétní úkol, a v tomto případě není schopnost volat přes WhatsApp v ICQ jednoduše technicky definována, protože aplikace používají jiný protokol. Ale jejich protokoly jsou založeny na stejném protokolu IP.

Protokol lze nazvat plánovanou standardní posloupností akcí v procesu, ve kterém je v síti několik subjektů, které se nazývají peers (partneři), méně často - klient a server, zdůrazňující vlastnosti konkrétního protokolu. Nejjednodušší příklad protokolu pro ty, kteří stále nerozumí, je podání ruky na schůzce. Oba vědí jak a kdy, ale otázka proč je otázkou pro vývojáře, nikoli pro uživatele protokolu. Mimochodem, handshake je k dispozici pro téměř všechny protokoly, například pro zajištění oddělení protokolů a ochrany proti „létání ve špatné rovině“.

Zde je to, co TCP/IP používá jako příklad nejpopulárnější protokoly. To ukazuje hierarchii závislostí. Je třeba říci, že aplikace používají pouze uvedené protokoly, které mohou, ale nemusí být implementovány v rámci OS.

Velmi, velmi jednoduše řečeno, toto je poštovní služba.

Každý člen sítě kompatibilní s IP má svou vlastní adresu, která vypadá asi takto: 162.123.058.209. Celkový počet takových adres pro protokol IPv4 je 4,22 miliardy.

Předpokládejme, že jeden počítač chce kontaktovat druhý a poslat mu zprávu – „paket“. Obrátí se na „poštovní službu“ TCP/IP a předá jí svůj balíček s uvedením adresy, na kterou je třeba jej doručit. Na rozdíl od adres v reálném světě jsou stejné IP adresy často postupně přidělovány různým počítačům, což znamená, že „pošťák“ neví, kde se požadovaný počítač fyzicky nachází, a tak balík odešle na nejbližší „poštu“ - k desce síťového počítače. Možná tam jsou informace o tom, kde se nachází počítač, který potřebujete, nebo možná taková informace není. Pokud tam není, odešle se žádost o adresu na všechny blízké „pošty“ (ústředny). Tento krok opakují všechny „pošty“, dokud nenajdou požadovanou adresu, přičemž si pamatují, kolik „pošt“ před nimi tento požadavek prošel a pokud projde určitým (dostatečně velkým) počtem z nich, pak bude vráceno zpět se značkou „adresa nenalezena“. Na první „poštu“ brzy přijde hromada odpovědí z dalších „poboček“ s možnostmi cest k adresátovi. Pokud nebude nalezena dostatečně krátká cesta (obvykle 64 zásilek, maximálně však 255), bude balík vrácen odesílateli. Pokud je nalezena jedna nebo více cest, bude balík odeslán po nejkratší z nich, zatímco „pošty“ si tuto cestu budou na chvíli pamatovat, což umožní rychlé odeslání následujících balíků, aniž by se kohokoli zeptali na adresu. Po doručení „pošťák“ definitivně donutí příjemce podepsat „stvrzenku“ o tom, že zásilku převzal a předat tuto „stvrzenku“ odesílateli jako důkaz, že zásilka byla doručena neporušená – ověření doručení v TCP je povinné. Pokud odesílatel po určité době takovou účtenku neobdrží nebo na účtence bude uvedeno, že balík byl poškozen nebo ztracen při přepravě, pokusí se balík odeslat znovu.

TCP/IP je sada protokolů.

Protokol je pravidlem. Například, když vás někdo pozdraví, pozdravíte zpět (spíše než abyste se rozloučili nebo vám přáli štěstí). Programátoři řeknou, že používáme například protokol hello.

Jaký druh TCP/IP (teď to bude velmi jednoduché, nenechte své kolegy bombardovat):

Informace se do vašeho počítače dostávají přes dráty (rádio nebo cokoli jiného není důležité). Pokud dráty prochází proud, znamená to 1. Pokud je vypnutý, znamená to 0. Ukazuje se 10101010110000 a tak dále. 8 nul a jedniček (bitů) je bajt. Například 00001111. To může být reprezentováno jako číslo v binární podobě. V desítkovém tvaru je byte číslo od 0 do 255. Tato čísla jsou mapována na písmena. Například 0 je A, 1 je B. (Tomu se říká kódování).

Tak. Aby mohly dva počítače efektivně přenášet informace po drátech, musí dodávat proud podle nějakých pravidel – protokolů. Musí se například dohodnout na tom, jak často lze proud měnit, aby dokázali rozlišit 0 od druhé 0.

Toto je první protokol.

Počítače nějak chápou, že jeden z nich přestal poskytovat informace (jako „řekl jsem všechno“). K tomu mohou počítače na začátku datové sekvence 010100101 odeslat několik bitů, tedy délku zprávy, kterou chtějí přenést. Například prvních 8 bitů může udávat délku zprávy. To znamená, že nejprve je přeneseno kódované číslo 100 v prvních 8 bitech a poté 100 bytech. Přijímající počítač pak počká na dalších 8 bitů a další zprávu.

Zde máme další protokol, s jeho pomocí můžete přenášet zprávy (ty počítačové).

Existuje mnoho počítačů, aby pochopili, kdo potřebuje odeslat zprávu, používají jedinečné adresy počítačů a protokol, který jim umožňuje pochopit, komu je tato zpráva určena. Například prvních 8 bitů bude udávat adresu příjemce, dalších 8 bude udávat délku zprávy. A pak ta zpráva. Právě jsme strčili jeden protokol do druhého. Za adresování je zodpovědný protokol IP.

Komunikace není vždy spolehlivá. Pro spolehlivé doručování (počítačových) zpráv se používá TCP. Při spuštění protokolu TCP se počítače budou navzájem ptát, zda obdržely správnou zprávu. Existuje také UDP - to je situace, kdy se počítače neptají, zda jej obdržely. Proč je to nutné? Zde posloucháte internetové rádio. Pokud dorazí několik bajtů s chybami, uslyšíte například „psh“ a poté znovu hudbu. Není fatální a není nijak zvlášť důležitý - k tomu se používá UDP. Pokud se ale při načítání webu poškodí pár bajtů, na monitoru se vám bude motat blbost a nebudete ničemu rozumět. Stránka používá TCP.

TCP/IP (UDP/IP) jsou vnořené protokoly, na kterých funguje internet. V konečném důsledku tyto protokoly umožňují přenést počítačovou zprávu neporušenou a přesně na adresu.

Existuje také protokol http. První řádek je adresa webu, další řádky jsou text, který na web odešlete. Všechny řádky http jsou text. Což vloží zprávu do TCP, která je adresována pomocí IP a tak dále.

Na úrovni dopravy zásobník TCP/IP používají se dva hlavní protokoly: TCP A UDP. Obecnou představu o funkcích transportní vrstvy lze získat v odpovídajícím článku. Tento text se zaměří na TCP (Transmission Control Protocol), který se používá k zajištění spolehlivého doručení dat na transportní vrstvě.

Existují běžné úlohy transportní vrstvy, které zpracovávají TCP i UDP. Ve skutečnosti existují dva hlavní úkoly: segmentace dat, pocházející z aplikační úrovně a adresování aplikace(vysílání a přijímání) pomocí portů. Více si o tom můžete přečíst v článku o transportní vrstvě.

Kromě toho TCP poskytuje:

  • Spolehlivé dodání segmentů.
  • Objednávání segmentů po obdržení.
  • Práce s relacemi.
  • Regulace rychlosti převodovky.

Podívejme se na tyto možnosti podrobněji.

Spolehlivé dodání segmentů

Spolehlivé doručení znamená automatické opětovné vysílání neúspěšných segmentů. Každý segment je označen pomocí speciálního pole - pořadového čísla. Po odeslání určitého počtu segmentů čeká TCP na odesílajícím uzlu na potvrzení od přijímacího uzlu, které udává pořadové číslo dalšího segmentu, který si příjemce přeje přijmout. Pokud takové potvrzení neobdrží, odeslání se automaticky opakuje. Po určitém počtu neúspěšných pokusů se TCP domnívá, že cíl není dosažitelný a relace je ukončena.

Spolehlivé doručení tedy neznamená, že vaše data projdou, pokud někdo vytáhne kabel z přepínače. Znamená to, že softwarový vývojář používající TCP na transportní úrovni ví, že pokud relace není ukončena, pak vše, co dal pokyn k odeslání, bude doručeno příjemci beze ztrát. Existuje mnoho dat, která jsou kritická pro ztrátu jakékoli informace. Pokud si například stáhnete aplikaci z internetu, ztráta jednoho bajtu bude znamenat, že nebudete moci používat to, co jste si stáhli. Z tohoto důvodu mnoho protokolů aplikační vrstvy používá pro přenos TCP.

Objednávání segmentů po obdržení

Jak asi tušíte, každý segment na nižších úrovních TCP/IP je zpracováván samostatně. To znamená, že bude minimálně zabalen v jednotlivém balení. Pakety putují po síti a zprostředkující směrovače už obecně nevědí nic o tom, co je v těchto paketech zabaleno. Pakety pro účely vyvažování zátěže mohou často cestovat po síti po různých cestách, přes různá mezilehlá zařízení, různými rychlostmi. Příjemce tedy po jejich dekapsulaci může obdržet segmenty v jiném pořadí, než v jakém byly odeslány.

TCP je automaticky znovu sestaví v požadovaném pořadí pomocí stejného pole pořadových čísel a po nalepení je přenese na aplikační úroveň.

Práce s relacemi

Před zahájením přenosu užitečných dat vám TCP umožňuje ujistit se, že příjemce existuje, naslouchá portu, který odesílatel potřebuje, a je připraven přijímat data, je vytvořena relace pomocí mechanismu třícestného handshake, který může se dočtete v příslušném článku. Dále jsou v rámci relace přenášena užitečná uživatelská data. Jakmile je přenos dokončen, relace se uzavře, čímž je příjemce informován, že již nebudou k dispozici žádná data, a odesílatel je informován, že příjemce byl informován.

Řízení přenosové rychlosti

Řízení přenosové rychlosti umožňuje upravit rychlost odesílání dat v závislosti na možnostech příjemce. Pokud například rychlý server odesílá data pomalému telefonu, server přenese data rychlostí povolenou pro telefon.

Díky mechanismu posuvného okna může TCP pracovat se sítěmi různé spolehlivosti. Mechanismus plovoucího okna umožňuje změnit počet odeslaných bajtů, pro které musí příjemce obdržet potvrzení. Čím větší je velikost okna, tím více informací bude přeneseno před přijetím potvrzení. U spolehlivých sítí lze potvrzení zasílat jen zřídka, aby se nepřidával provoz, takže velikost okna v takových sítích se automaticky zvětšuje. Pokud TCP zjistí, že dochází ke ztrátě dat, velikost okna se automaticky zmenší. Je to dáno tím, že pokud jsme přenesli např. 3 kilobajty informací a nedostali potvrzení, tak nevíme, která jejich konkrétní část k nám nedorazila a jsme nuceni odeslat všechny tři kilobajty znovu. U nespolehlivých sítí by tedy měla být velikost okna minimální.

Mechanismus posuvného okna umožňuje TCP neustále měnit velikost okna – zvětšovat ji, dokud je vše v pořádku, a zmenšovat, když segmenty nedorazí. V každém daném okamžiku tedy bude velikost okna víceméně adekvátní stavu sítě.

TCP struktura

Hlavička TCP segmentu má následující strukturu:

  • Zdrojový port a Cílový port jsou čísla portu příjemce a odesílatele, která identifikují aplikace na odesílacích a přijímajících uzlech.
  • Pořadové číslo a číslo potvrzení jsou pořadové číslo segmentu a číslo potvrzení, které se používají pro spolehlivé doručení. Pokud například odesílatel odešle segment s SN 100, může na něj příjemce odpovědět ACK 101 SN200, což znamená: „Dostal jsem od vás segment číslo 100 a čekám na 101., mimochodem, mám moje vlastní číslování. Moje čísla začínají 200.“ Odesílatel může na oplátku odpovědět SN101 ACK201, což znamená „Dostal jsem od vás segment s číslem 200, mohu přijmout další 201, ale zde je můj 101. segment, na který čekáte. pro." A tak dále.
  • Délka hlavičky – Toto je čtyřbitové pole obsahující délku hlavičky TCP segmentu.
  • Rezervováno - 6 bitů vyhrazeno pro případ.
  • Control - pole s příznaky, které se používají v procesu výměny informací a popisují další účel segmentu. Například příznak FIN se používá k ukončení připojení, SYN a ACK k nastavení.
  • Okno - obsahuje velikost okna, jak je uvedeno výše.
  • Checksumm - kontrolní součet hlavičky a dat.
  • Urgentní – znak důležitosti (naléhavosti) tohoto segmentu.
  • Options je další volitelné pole, které lze použít například k testování protokolu.
  • Datová část obsahuje aktuální data přijatá z protokolu aplikační vrstvy nebo jejich část, pokud bylo nutné data rozdělit.

Když dva hostitelé komunikují pomocí TCP, je navázáno spojení předtím, než může začít výměna dat. Po dokončení komunikace se relace ukončí a spojení se ukončí. Mechanismy připojení a relace umožňují funkci spolehlivosti TCP.

Podle obrázku postupujte podle kroků pro vytvoření a ukončení připojení TCP.

Hostitel sleduje každý segment dat v rámci relace a sděluje, jaká data každý hostitel přijal pomocí informací v hlavičce TCP.

Každé připojení zahrnuje jednosměrné komunikační toky neboli relace k navázání a ukončení procesu TCP mezi koncovými zařízeními. Pro navázání spojení provedou hostitelé třístupňové podání ruky. Řídicí bity v hlavičce TCP udávají průběh a stav připojení. Třífázové podání ruky:

  • Zjistí, že cílové zařízení je přítomno v síti
  • Ověřuje, že cílové zařízení má aktivní službu a přijímá požadavky na číslo cílového portu, které klient hodlá použít pro relaci
  • Sděluje cílovému zařízení, že zdrojový klient zamýšlí navázat komunikační relaci na tomto čísle portu

Při připojení TCP hostitel, který vystupuje jako klient, zahájí relaci se serverem. Abyste pochopili, jak funguje třícestný handshake používaný procesem připojení TCP, měli byste zvážit různé hodnoty vyměňované mezi oběma uzly. Tři kroky při vytváření připojení TCP jsou:

1. Iniciující klient odešle segment obsahující počáteční pořadové číslo, které slouží jako požadavek serveru na zahájení komunikační relace.

2. Server odpoví segmentem obsahujícím potvrzovací hodnotu rovnající se přijatému pořadovému číslu plus 1 plus jeho vlastní synchronizační sekvenční hodnota. Tato hodnota je o jednu větší než pořadové číslo, protože ACK (potvrzení) je vždy další očekávaný bajt nebo oktet. Tato potvrzovací hodnota umožňuje klientovi svázat odpověď zpět s původním segmentem, který je odeslán na server.

3. Původní klient odpoví potvrzovací hodnotou rovnou pořadovému číslu, které obdržel, plus jedna. Tento krok dokončí proces navázání připojení.

Uvnitř záhlaví segmentu TCP je šest 1bitových polí, která obsahují řídicí informace používané k řízení procesů TCP. Toto jsou pole:

URG- Pole "Ukazatel důležitosti" je aktivní

ACK- Pole "Číslo potvrzení" je aktivní

P.S.H.- Funkce Push (vložení dat nashromážděných ve vyrovnávací paměti do uživatelské aplikace)

RST- Reset připojení

PLOUTEV- Od odesílatele již nejsou žádná data, spojení je ukončeno

Tato pole se nazývají příznaky, protože každé z těchto polí zabírá pouze jeden bit, a proto může nabývat pouze dvou hodnot: 1 nebo 0. Když je hodnota bitu nastavena na 1, indikuje to, jaké řídicí informace jsou v segmentu.

Ukončení TCP spojení probíhá ve čtyřech krocích v důsledku výměny odpovídajících hodnot těchto příznaků.

Před tím, než mohou být data odeslána mezi dvěma hostiteli pomocí TCP protokol, musí být navázáno spojení. Jeden hlavní server, nazývaný server, poslouchá požadavky na připojení. Hostitel požaduje připojení a nazývá se klient. V případě požadavku na připojení klient odešle segment TCP s uvedením čísla portu a k čemu se chce připojit. SYN (Synchronize Sequence Numbers), nastavený příznak, zdrojová datová sekvence klienta označuje číslo.

Pro zajištění komunikace server odpoví segmentem, který obsahuje záhlaví původní číselné datové sekvence. Jsou nastaveny příznaky SYN a ACK. Pro potvrzení přijetí klientských dat obsahuje pořadové číslo v potvrzovacím poli tuto hodnotu plus jedna.
K dokončení protokolu navázání spojení klient potvrdí pořadové číslo dat serveru odesláním zpět segmentu s nastaveným příznakem ACK a polem potvrzení obsahující data serveru a pořadové číslo plus jedna.
TCP segmenty jsou přenášeny pouze mezi klientem a serverem, pokud jsou v proudu data. Stav je dotazován. Pokud komunikační linka selže, konec bude o poruše informován až do odeslání dat. V praxi použití časového limitu obvykle ukončí připojení, pokud uplynula určitá doba bez aktivity. Je však možné pokračovat v neúspěšné relaci, jako by se nic nestalo, pokud můžete znovu navázat spojení. (Všimněte si, že to platí pouze v případě, že vám váš ISP poskytne pevnou IP adresa. Li IP adresa je přidělována dynamicky po přihlášení, nebudete moci obnovit komunikaci, protože váš soket (který, jak jsme již uvedli, se skládá z vašeho IP adresy a čísla portů) by byla jiná.
Přenos dat
Po navázání spojení lze data odeslat. TCP protokol Posuvné okno znamená, že není třeba čekat na potvrzení jednoho segmentu, než bude možné odeslat další. Potvrzení se zasílají pouze v případě potřeby ihned nebo po uplynutí určitého intervalu. To ano TCP efektivní protokol pro hromadný přenos dat.
Jedním příkladem je, když je potvrzení odesláno okamžitě, když odesílatel zaplní vstupní vyrovnávací paměť příjemce. Tok je řízen pomocí pole velikosti okna v záhlaví TCP. V části obsahující rozpoznávání bude velikost okna nulová. Když může přijímač znovu přijímat data, je odesláno druhé potvrzení s uvedením nových velikostí okna. Toto rozpoznání se nazývá aktualizační okno.
Během interaktivního sezení Telnet, jeden znak zadaný na klávesnici lze odeslat ve vlastním segmentu TCP. Každá postava může být rozpoznána jako úvodní segment na druhou stranu. Pokud se vstupní znaky projeví na vzdáleném hostiteli, může být přijato několik dalších segmentů, první vzdáleným hostitelem a druhý, jeho rozpoznání, prostřednictvím klienta Telnet. Takže jeden zadaný znak může vést ke čtyřem IP pakety, každý obsahuje 20 bajtů IP hlavička, 20 bajtů záhlaví TCP a pouze jeden bajt dat přenášených přes internet.
TCP má některé funkce, které se snaží věci trochu zefektivnit. Potvrzení zpoždění až 500 ms může být specifikováno v naději, že během této doby mohou být některá data směrována opačně a spolu s tím potvrzení řídicích dat.
Neefektivnost odesílání mnoha velmi malých segmentů je snížena tím, co se nazývá Nagleův algoritmus. To znamená, že segment TCP obsahující méně dat, než je velikost inzerovaného okna příjemce, lze odeslat pouze v případě, že byla akceptována předchozí část. Malé množství dat je sloučeno, pokud se buď rovná velikosti okna, nebo pokud je akceptován předchozí segment. Čím pomalejší připojení, tím delší bude období, za které lze data kombinovat, a tím méně jednotlivých segmentů TCP bude odesláno při obsazeném odkazu.
Oprava chyb
Důležitá výhoda TCP na UDP je, že jde o spolehlivý protokol pro přenos dat. Dokáže detekovat data, která byla úspěšně přijata na druhém konci, a pokud přijata nebyla, TCP může podniknout kroky k nápravě situace. Pokud vše ostatní selže, může problém nahlásit odesláním, takže ví, že přenos selhal.
Nejčastější problém je ten TCP segment ztracené nebo poškozené. TCP provádí to sledováním přijatých dat, která odesílá. Pokud potvrzení není přijato v intervalu stanoveném protokolem, data se přenesou znovu.
Interval, TCP bude čekat před opětovným přenosem dat a závisí na rychlosti připojení. Protokol monitoruje čas, který obvykle trvá přijetí rozpoznání, a používá časovač k výpočtu periody pro opakovaný přenos. Pokud po opětovném odeslání dat jednou není přijato potvrzení, je znovu zasíláno ve stále se zvyšujících intervalech, dokud není přijata odpověď nebo (obvykle) není překročena použitá hodnota časového limitu.
Jak již bylo zmíněno, TCP implementuje řídicí tok pomocí pole velikosti okna v záhlaví. Potenciální zablokování nastane, pokud přijímač zastaví datový tok nastavením velikosti okna na nulu a segment aktualizačního okna, který je určen ke spuštění datového toku, se opět ztratí. Na každém konci spoje budou zastávky, kde se čeká, až ostatní něco udělají.
Potvrzení samotná nejsou ACK potvrzována, v takovém případě přenosová strategie problém nevyřeší. Chcete-li předejít situaci uvíznutí, TCP odesílá v pravidelných intervalech sondu zpráv okna, aby se svého přijímače zeptala na velikost okna.
Uzavření spojení
Když je čas ukončit spojení TCP, musí být každý směr toku dat uzavřen samostatně. Jeden konec komunikace odešle segment s nastaveným příznakem FIN (dokončený přenos dat). Příjem tohoto segmentu je potvrzen a přijímající strana oznámí jeho použití, aby druhá strana spojení uzavřela, protože polovina spojení zůstala.
Přijímač může, pokud si to přeje, pokračovat v přenosu dat opačným směrem. Obvykle to přijímající aplikace vynutí TCP zavřete druhou polovinu spojení stejným postupem.

Mnoho lidí zná zkratku TCP, mnohem méně lidí ví, že jde o protokol pro přenos dat. Ale skoro nikdo neví, jak to funguje.

Pozornost! Tento materiál je určen těm, které skutečně zajímá otázka: „Jak síť funguje a co mohu dělat, když to vím.“ Pokud vás stále pletou slova jako DNS, Telnet, Socket, pak na tento materiál můžete rovnou zapomenout - taková „děsivá“ slova se zde určitě neobjeví, ale to obsah nijak nezpřehlední...

Pro ty co zůstali:

Pravděpodobně mnozí z vás slyšeli slova jako SYN-flooding nebo IP-spoofing. Všechno to jsou typy útoků – první D.O.S., druhý
spočívá ve falšování IP adresy. Na první pohled mezi těmito příklady není nic společného, ​​ale zatím tomu tak není - oba tyto útoky nejsou možné bez hluboké znalosti protokolu TCP, na kterém
Inet.

Specifikace protokolu TCP je popsána v RFC793. Doporučuji si tento dokument přečíst, protože se vám sice pokusím sdělit to nejdůležitější, opatřit toto důležité relevantními komentáři, které v návodu nenajdete, ale přesto, vzhledem k malému objemu a praktickému úhlu pohledu , mohou mi chybět některé jemnosti .

Data jsou přenášena ve formě paketů. Tato organizace přenosu znamená, že data, bez ohledu na to, jak jsou velká, jsou rozdělena do samostatných fragmentů, které jsou formovány do paketů (tvorba paketů předpokládá, že k datům je přidána hlavička služby), po kterých jsou data přenášena ve formě paketů po síti (a pořadí přenosu paketů může být porušeno). Přijímající systém „sestavuje“ počáteční datové pole z paketů na základě hlaviček paketů. To není moc jasné, ale jen do té doby, než se podíváme na strukturu balíčků.

Struktura paketu TCP:

Vysvětlím pouze to nejdůležitější:

Adresa příjemce, port příjemce a adresa odesílatele, port odesílatele - doufám, že je to jasné.

Sequence Number (SYN) - číslo fronty nebo sériové číslo, ukazuje pořadové číslo paketu během přenosu, proto přijímající systém sbírá pakety přesně tak, jak mají, a ne v pořadí, v jakém přišly.

Acknowledgement Number (ACK) - číslo potvrzení, ukazuje, na který paket s kterým SYN vzdálený systém odpovídá, takže máme představu, že vzdálený systém přijal náš paket s těmito daty
SYN.

Řídicí bity - 6 bitů (ve schématu mezi obráceným a oknem). Bitové hodnoty:

URG: pole urgentního ukazatele povoleno
ACK: pole potvrzení povoleno
PSH: funkce push
RST: Restartujte toto připojení
SYN: synchronizace čísel ve frontě
FIN: žádná další data k přenosu

DATA jsou přímo data, která chceme přenést.

Myslím, že to je vše, s čím musíte začít, abyste pochopili, jak protokol funguje. Více o významu zbývajících polí si můžete přečíst v RFC793. Dobře, lépe pochopíme, jak to funguje v praxi.

Když chceme navázat spojení, odešleme do vzdáleného systému paket s následující strukturou:

Klient - SYN (856779) - Host

Kde klient jsme my a hostitel je vzdálený systém. Jak vidíte, posíláme paket pouze indikující SYN - to znamená, že tento paket je první, na nic nereagujeme (není ACK). Tento balíček vypadá asi takto:

20 53 52 43 00 00 44 45 53 54 00 00 08 00 45 00 00 2C C3 00 40 00 20 06 10 0C CB 5E FD BA CB 5E F3 071 0 04 07 00 0 00 00 60 02 20 00 D9 70 00 00 02 04 05 B4 2D

Zajímavé je, odkud SYN pochází. SYN je odvozen od počátečního čísla fronty
(ISN) je 32bitové číslo od 1 do 4294967295 (2 až 32. mocnina). ISN při restartu systému je 1, pak se každou sekundu zvýší o 128 000 (přesně řečeno ke změně dochází každé 4 mikrosekundy) + s každým navázaným připojením se zvýší o 64 000. Ukazuje se, že cyklus jedinečnosti ISN za předpokladu, že žádná spojení byly stanoveny, je přibližně 4,55 hodiny. Protože žádný paket neputuje po síti tak dlouho, můžeme předpokládat, že SYN bude zcela unikátní.

Po přijetí našeho paketu vzdálený systém odpoví, že jej přijal a je připraven navázat spojení. Datový balíček vypadá takto:

Host – SYN (758684758) a ACK (856780) – klient

Jak vidíte, vzdálený systém dává jasně najevo, že přijal náš paket. K tomu nám pošle ACK s číslem „náš SYN+1“. Kromě toho nám vzdálený systém pošle svůj SYN (také odpovíme). A naše odpověď bude takto:

Klient – ​​SYN (856780) a ACK (758684759) – hostitel

Myslím, že už by vám mělo být vše jasné. Pokud někdo nerozumí, paket znamená následující: váš paket se SYN (758684758) byl přijat, spojení bylo navázáno, naše SYN je 856780.

Tento postup se nazývá „trojité potvrzení“ nebo „trojité podání ruky“. První dva kroky jsou nutné k synchronizaci SYN našich systémů a třetím je potvrzení, že k synchronizaci došlo.

Dále nás čeká výměna dat, tzn. kvůli tomu bylo spojení navázáno. Navíc je třeba poznamenat, že ve všech fázích se zajištění bezpečnosti dat přenášených pomocí protokolu TCP provádí následovně: odeslaný paket je umístěn do vyrovnávací paměti a pokud do určité doby nedorazí potvrzovací paket (ACK). ze vzdáleného systému, pak je paket odeslán znovu; pokud potvrzení dorazilo, paket je považován za úspěšně odeslaný a je odstraněn z vyrovnávací paměti.

No, připojení už nepotřebujeme, můžeme ho uzavřít. Tato fáze se bude opakovat
skládají se z několika fází – doufám, že si tyto balíčky již dokážete přečíst sami.

Klient – ​​FIN(4894376) a ACK (1896955378) – hostitel

Host – ACK (4894377) – klient

Host – FIN (1896955378) a ACK (4894377) – klient

Klient - ACK (1896955378) - Host

Myslím, že zde není nic složitého. Jediné, co stojí za zmínku, je příznak FIN, který znamená touhu ukončit spojení.

Shrneme-li výše uvedené, poznamenejme, v jakých případech se sériová čísla mění/nemění:

Přenos jednoho FIN paketu = +1
Přenos jednoho SYN paketu = +1
Přenos jednoho ACK paketu = 0
Přenos jednoho SYN/ACK paketu = +1
Přenos jednoho FIN/ACK paketu = +1
Změna za 1 sekundu = +128 000
Navázání jednoho spojení = +64 000

Možná se někdo zeptá: "Co se stane, když stroj přijme paket s ACK, který tam nebyl?" (SYN=ACK-1, ale neposlali jsme paket s takovým SYN). Poté, co obdržíme odpověď na něco nejasného, ​​odpovíme vzdálenému systému paketem NACK (to znamená „nevím, o čem mluvíte“, žádné spojení není navázáno), ale doufám, o tom si povíme podrobněji příště.




Horní