În primii ani ai internetului, Internet Protocol (IP) a fost singurul protocol folosit de oameni pentru a se conecta la internet. Problema cu IP-ul era că puteai trimite un mesaj și nu fii sigur dacă destinatarul îl va primi sau nu. Din acest motiv, a fost stabilit TCP/IP.

TCP/IP asigură că toate datele pe care le trimiteți ajung la destinatar. Face acest lucru furnizând clientului și serverului o conexiune securizată înainte de a trimite date. Această conexiune securizată este stabilită printr-un proces cunoscut sub numele de strângere de mână în trei căi, cunoscut și ca strângere de mână TCP/IP.

Ce este o strângere de mână în trei căi?

Credit imagine: Fleshgrinder/Wikimedia

O strângere de mână în trei căi (strângere de mână TCP/IP) reprezintă primele trei interacțiuni dintre un client și un server care încearcă să stabilească o conexiune TCP. Aceste interacțiuni inițiale sunt esențiale pentru realizarea unei conexiuni sigure. În această fază, atât clientul, cât și serverul vor conveni asupra parametrilor pe care îi vor folosi pentru a verifica și a verifica pachetele de date primite și ieșite. Acești parametri vor fi sub formă de segmente TCP.

instagram viewer

Ce este un segment TCP?

Într-o conexiune TCP/IP, toate datele trimise trebuie să fie tăiate și structurate pe ceea ce este cunoscut sub numele de segmente TCP. Aceste segmente conțin informații precum adrese IP, porturi, biți de semnalizare, numere de secvență, numere de confirmare și date opționale sau încărcare utilă.

Primele trei interacțiuni (strângere de mână în trei direcții) vor conține doar anteturi de segment TCP fără încărcătură utilă sau date atașate. Iată o mostră a unui segment TCP

Credit imagine: Ere/Wikimedia

Rețineți că ilustrația de mai sus este doar pentru TCP. Un segment TCP/IP complet necesită ambele adrese IP de la expeditor și receptor deasupra segmentului TCP de mai sus.

Ori de câte ori trimiteți un colet unei persoane, serviciul de livrare vă solicită să completați un formular de informații și apoi să îl atașați la colet înainte de expediere. În mod similar, TCP cere expeditorului să atașeze un cap de segment (formular de informații) la date (pachet) înainte de a începe să trimită segmentul (pachet) către destinatar.

Ori de câte ori un client comunică cu un server, ambele părți vor trebui să-și formateze interacțiunile sub forma unui segment TCP. Un segment TCP cuprinde un cap de segment TCP atașat la datele pe care încercați să le trimiteți. Expeditorul va trebui să completeze informațiile cerute de capul de segment.

Pentru o strângere de mână în trei căi, expeditorul va trebui să completeze următoarele:

  • Port sursă: Identifică portul expeditorului
  • Portul de destinație: Identifică portul receptorului
  • Număr de secvență: Indică secvența de segmente
  • Număr de confirmare: Indică faptul că un segment a fost confirmat prin adăugarea unuia la numărul de ordine dat

Pe lângă completarea câmpurilor de cap de segment, expeditorul trebuie să selecteze și un bit de semnalizare. Există șase biți de semnalizare în total, dar pentru o strângere de mână în trei căi, veți avea nevoie doar de următorii doi:

  1. SYN: Oferă un număr de ordine. Acest număr de secvență va fi folosit pentru a număra secvența tuturor segmentelor de intrare pentru restul interacțiunii.
  2. ACK: Indică faptul că receptorul numărului SYN acceptă cererea de conectare adăugând unul (1) la numărul SYN dat.

Acum că știți ce este un segment TCP, să vedem cum este utilizat într-o strângere de mână în trei căi.

Cum funcționează o strângere de mână în trei căi

O strângere de mână în trei căi este stabilită atunci când atât clientul, cât și gazda au schimbat informații și au confirmat reciproc numerele de secvență. După cum sugerează și numele, o strângere de mână în trei căi se face în trei pași.

În primul rând, clientul trimite un segment SYN pur indicând că dorește o conexiune. În al doilea rând, serverul răspunde cu un segment SYN-ACK, ceea ce înseamnă că a confirmat cererea și trimite propriul său număr SYN pentru ca clientul să-l recunoască. În al treilea rând, clientul trimite un segment ACK către server pentru a-l notifica că numărul SYN al serverului a fost confirmat și va fi folosit pentru conexiunea ulterioară.

O strângere de mână în trei direcții va arăta cam așa:

Credit pentru active: Fleshgrinder/Wikimedia

Să o descompunem și să ne uităm la segmente, astfel încât să știți ce se întâmplă exact când clientul și serverul schimbă și recunoaște numerele de secvență.

Pasul 1: Clientul trimite un segment SYN

Credit pentru active: Fleshgrinder/Wikimedia

Clientul trimite o conexiune de solicitare prin trimiterea unui segment SYN către server. Clientul folosește adresa IP a clientului pentru a localiza serverul și a trimite segmentul TCP.

Pentru a reduce complexitatea segmentului, să ignorăm câteva câmpuri de segment și să ne concentrăm asupra strictului necesar pentru o conexiune de strângere de mână în trei căi. Aceasta include portul sursă, portul destinație, numărul de secvență, numărul de confirmare și tipul de bit de semnalizare utilizat.

Și cu asta, un segment SYN/cerere ar trebui să arate astfel:

Imagine realizată de scriitor 

Portul client este un număr aleatoriu între 49152 și 65536. Acest interval de porturi este intervalul convenit pe care dispozitivele publice îl pot folosi dinamic pentru a se conecta la internet. Intervalele de porturi de la 1024 la 49151 sunt private. Acestea vor trebui să fie înregistrate de o entitate pentru a utiliza un port în intervalul specificat. Numerele de porturi sub 1024 sunt porturi rezervate pentru diferite funcții și protocoale de internet, cum ar fi FTP (portul 20), SMTP (portul 25), DNS (portul 53) și HTTP (portul 80).

În viața reală, un număr de secvență este un număr aleatoriu. Pentru exemplu, am folosit 0000000000 pentru a facilita vizualizarea.

Luați notă de numărul de secvență pe măsură ce trecem prin pași. În prezent, este 000000000. În prezent, nu există un număr de confirmare, deoarece nu există ceva de confirmat.

Pasul 2: Serverul răspunde cu un segment SYN-ACK

Credit pentru active: Fleshgrinder/Wikimedia

Odată ce serverul primește un segment SYN, acesta va răspunde prin trimiterea unui segment ACK care conține numărul de confirmare. Numărul de confirmare va fi numărul de ordine al clientului plus unu (1).

Imagine realizată de scriitor

Uită-te la portul sursă. Arată că segmentul este de la portul 20, indicând că a venit de la server ca răspuns.

Acum, uită-te la numărul de confirmare. Este 0000000001, care este numărul de ordine al clientului (0000000000) plus unu (1). Acesta este modul în care este urmărit un segment. Să presupunem că clientul a primit un răspuns de segment ACK unde numărul de confirmare este 0000000002. Acest lucru ar indica clientului că segmentul 0000000001 lipsește și că clientul va trebui să aștepte până sosește astfel încât să nu experimentați pierderea pachetelor.

După cum puteți vedea, sunt activați doi biți de semnalizare - SYN și ACK.

Pe lângă confirmarea numărului de secvență al clientului, serverul va trimite și propriul său număr de secvență pentru ca clientul să confirme numărul de secvență al serverului plus unu (1). În exemplul nostru, am folosit 1111111111 ca număr de secvență al serverului. Din nou, în lumea reală, acest număr este aleatoriu.

Rețineți că numerele de secvență ale clientului și ale serverului nu trebuie să se potrivească. Atâta timp cât ambele părți își recunosc reciproc numărul unic de secvență, conexiunea va fi fiabilă.

Pasul 3: Clientul răspunde cu un segment ACK

Credit pentru active: Fleshgrinder/Wikimedia

În cele din urmă, clientul confirmă numărul de ordine al serverului.

Imagine realizată de scriitor

Segmentul final este un segment ACK de la client.

După cum puteți, clientul va confirma numărul de secvență al serverului, răspunzând cu numărul de secvență al serverului (1111111111) plus unu (1), care este 1111111112.

Clientul și serverul nu vor mai trimite un număr de secvență, deoarece începutul secvenței a fost deja confirmat. Ambele părți se vor aștepta, totuși, la segmente de confirmare continuând numerele de secvență plus unu (1) și numărul octeților pe parcursul interacțiunii. În acest caz, clientul se așteaptă ca următorul răspuns al serverului să aibă un ACK de 0000000002 (dacă nu există date atașate).

După care se stabilește strângerea de mână în trei căi!

Înțelegerea modului în care funcționează conexiunile de rețea

Acum că ați învățat cum funcționează o strângere de mână în trei căi, veți avea, de asemenea, mai ușor să înțelegeți cum funcționează TCP după strângere de mână. Clientul și serverul vor începe să trimită date când este stabilită strângerea de mână. De data aceasta va fi folosit formatul de segment complet, plus datele opționale sau încărcarea utilă.

Datele sunt de obicei segmentate/decupate în bucăți mai mici pentru transferuri mai ușoare. Fiecare segment de date are propriul său cap de segment, care conține un număr de secvență și un număr de confirmare. Motivul pentru un număr de secvență este de a cunoaște secvența segmentelor când acestea vor fi în cele din urmă reasamblate. Numerele de confirmare sunt acolo pentru a verifica împreună cu expeditorul că segmentul lor a fost primit și că se potrivește cu succesiunea segmentelor primite.

Luarea numărului unui număr de secvență și verificarea acestora cu o confirmare este modul în care TCP poate transporta în mod fiabil bucăți uriașe de date fără a lipsi pachete de date.

Și cu asta, ar trebui să aveți o idee destul de bună despre cum funcționează TCP.