Configurarea conexiunii TCP
Când navigăm pe web, trimitem un e -mail sau jucăm un joc online, de multe ori nu ne gândim la conexiunea complexă de rețea din spatele acestuia. Cu toate acestea, acești pași aparent mici asigură o comunicare stabilă între noi și server. Unul dintre cei mai importanți pași este configurarea conexiunii TCP, iar nucleul aceasta este strângerea de mână cu trei căi.
Acest articol va discuta în detaliu principiul, procesul și importanța în detaliu a strângerii de mână cu trei căi. Pas cu pas, vom explica de ce este nevoie de strângere de mână cu trei căi, de cum asigură stabilitatea și fiabilitatea conexiunii și cât de important este pentru transferul de date. Cu o înțelegere mai profundă a strângerii de mână pe trei căi, vom obține o mai bună înțelegere a mecanismelor de bază ale comunicării în rețea și o viziune mai clară a fiabilității conexiunilor TCP.
Procesul de strângere de mână cu trei căi TCP și tranzițiile de stat
TCP este un protocol de transport orientat către conexiune, care necesită stabilirea conexiunii înainte de transmiterea datelor. Acest proces de stabilire a conexiunii se face de o strângere de mână cu trei căi.
Să aruncăm o privire mai atentă la pachetele TCP care sunt trimise în fiecare conexiune.
Inițial, atât clientul, cât și serverul sunt închise. În primul rând, serverul ascultă în mod activ un port și este în starea de ascultare, ceea ce înseamnă că serverul trebuie pornit. În continuare, clientul este gata să înceapă să acceseze pagina web. Trebuie să stabilească o conexiune cu serverul. Formatul primului pachet de conexiune este următorul:
Când un client inițiază o conexiune, generează un număr de secvență inițială aleatorie (client_ISN) și îl plasează în câmpul „Număr de secvență” al antetului TCP. În același timp, clientul stabilește poziția Syn Flag la 1 pentru a indica faptul că pachetul de ieșire este un pachet Syn. Clientul indică faptul că dorește să stabilească o conexiune cu serverul trimițând primul pachet Syn către server. Acest pachet nu conține date de strat de aplicație (adică date trimise). În acest moment, starea clientului este marcată ca syn-aduse.
Când un server primește un pachet Syn de la un client, inițializează la întâmplare propriul său număr de serie (server_isn) și apoi pune acest număr în câmpul „număr de serie” al antetului TCP. În continuare, serverul introduce client_isn + 1 în câmpul „Număr de confirmare” și stabilește atât biți Syn, cât și ACK la 1. În cele din urmă, serverul trimite pachetul către client, care nu conține date despre stratul de aplicație (și nici datele pe care serverul să le trimită). În acest moment, serverul este în stare Syn-RCVD.
Odată ce clientul primește pachetul de la server, trebuie să efectueze următoarele optimizări pentru a răspunde la pachetul de răspuns final: În primul rând, clientul stabilește bitul ACK al antetului TCP al pachetului de răspuns la 1; În al doilea rând, clientul introduce valoarea server_isn + 1 în câmpul „Confirmați numărul de răspuns”; În cele din urmă, clientul trimite pachetul către server. Acest pachet poate transporta date de la client la server. După finalizarea acestor operațiuni, clientul va intra în starea consacrată.
Odată ce serverul primește pachetul de răspuns de la client, acesta trece și la starea stabilită.
După cum puteți vedea din procesul de mai sus, atunci când efectuați o strângere de mână cu trei căi, a treia strângere de mână este permisă să transporte date, dar primele două strângeri de mână nu sunt. Aceasta este o întrebare care este adesea pusă în interviuri. Odată ce strângerea de mână cu trei căi este completă, ambele părți intră în starea consacrată, ceea ce indică faptul că conexiunea a fost stabilită cu succes, moment în care clientul și serverul pot începe să trimită date reciproc.
De ce trei strângeri de mână? Nu de două ori, de patru ori?
Răspunsul comun este „pentru că strângerea de mână cu trei căi garantează capacitatea de a primi și trimite”. Acest răspuns este corect, dar este doar motivul de suprafață, nu prezintă motivul principal. În cele ce urmează, voi analiza motivele pentru tripla strângere de mână din trei aspecte pentru a ne aprofunda înțelegerea acestei probleme.
Strângerea de mână cu trei căi poate evita în mod eficient inițializarea conexiunilor repetate istoric (motivul principal)
Strângerea de mână cu trei căi garantează că ambele părți au primit un număr de secvență inițială fiabilă.
Strângerea de mână cu trei căi evită să irosească resursele.
Motivul 1: Evitați îmbinările duplicate istorice
Pe scurt, principalul motiv pentru strângerea de mână pe trei căi este de a evita confuzia cauzată de vechea inițializare a conexiunii duplicate. Într -un mediu complex de rețea, transmiterea pachetelor de date nu este întotdeauna trimisă la gazda de destinație în conformitate cu timpul specificat, iar pachetele de date vechi pot ajunge mai întâi la gazda de destinație din cauza congestiei rețelei și a altor motive. Pentru a evita acest lucru, TCP folosește o strângere de mână cu trei căi pentru a stabili conexiunea.
Atunci când un client trimite mai multe pachete de unitate de conexiune Syn în succesiune, în situații precum congestionarea rețelei, pot apărea următoarele:
1- Vechile pachete Syn ajung la server înainte de ultimele pachete Syn.
2- Serverul va răspunde la un pachet Syn + ACK pentru client după ce a primit vechiul pachet Syn.
3- Când clientul primește pachetul Syn + ACK, determină că conexiunea este o conexiune istorică (numărul de secvență expirat sau expirare) în funcție de contextul propriu, apoi trimite pachetul RST către server pentru a anula conexiunea.
Cu o conexiune cu două părți, nu există nicio modalitate de a determina dacă conexiunea curentă este o conexiune istorică. Strângerea de mână cu trei căi permite clientului să stabilească dacă conexiunea curentă este o conexiune istorică bazată pe context atunci când este gata să trimită al treilea pachet:
1- Dacă este o conexiune istorică (numărul de secvență expirat sau expirare), pachetul trimis de a treia strângere de mână este un pachet RST pentru a anula conexiunea istorică.
2- Dacă nu este o conexiune istorică, pachetul trimis pentru a treia oară este un pachet ACK, iar cele două părți comunicante stabilesc cu succes conexiunea.
Prin urmare, principalul motiv pentru care TCP folosește strângerea de mână cu trei căi este că inițializează conexiunea pentru a preveni conexiunile istorice.
Motivul 2: Pentru a sincroniza numerele de secvență inițiale ale ambelor părți
Ambele părți ale protocolului TCP trebuie să mențină un număr de secvență, care este un factor cheie pentru a asigura o transmisie fiabilă. Numerele de secvență joacă un rol important în conexiunile TCP. Ei fac următoarele:
Receptorul poate elimina datele duplicate și poate asigura exactitatea datelor.
Receptorul poate primi pachete în ordinea numărului de secvență pentru a asigura integritatea datelor.
● Numărul de secvență poate identifica pachetul de date care a fost primit de cealaltă parte, permițând transmisia fiabilă a datelor.
Prin urmare, la stabilirea unei conexiuni TCP, clientul trimite pachete SYN cu numărul de secvență inițială și necesită serverului să răspundă cu un pachet ACK care indică recepția cu succes a pachetului Syn al clientului. Apoi, serverul trimite pachetul SYN cu numărul de secvență inițială către client și așteaptă ca clientul să răspundă, o dată pentru toate, pentru a se asigura că numerele de secvență inițiale sunt sincronizate în mod fiabil.
Deși este posibilă și o strângere de mână cu patru căi pentru a sincroniza în mod fiabil numărul de secvențe inițiale ale ambelor părți, al doilea și al treilea pași pot fi combinați într-o singură etapă, rezultând o strângere de mână cu trei căi. Cu toate acestea, cele două strângeri de mână nu pot garanta decât că numărul de secvență inițială de o parte este primit cu succes de cealaltă parte, dar nu există nicio garanție că numărul de secvență inițială de ambele părți poate fi confirmat. Prin urmare, strângerea de mână cu trei căi este cea mai bună alegere de luat pentru a asigura stabilitatea și fiabilitatea conexiunilor TCP.
Motivul 3: Evitați irosirea resurselor
Dacă există doar un „Two-Rothort”, atunci când cererea SYN Client este blocată în rețea, clientul nu poate primi pachetul ACK trimis de server, astfel încât Syn va fi resentit. Cu toate acestea, întrucât nu există o a treia strângere de mână, serverul nu poate determina dacă clientul a primit o confirmare ACK pentru a stabili conexiunea. Prin urmare, serverul poate stabili proactiv o conexiune numai după ce a primit fiecare solicitare SYN. Acest lucru duce la următoarele:
Deșeuri de resurse: Dacă cererea SYN a clientului este blocată, ceea ce duce la transmiterea repetată a mai multor pachete SYN, serverul va stabili mai multe conexiuni nevalide redundante după ce a primit cererea. Acest lucru duce la o risipă inutilă de resurse de server.
Păstrarea mesajelor: Din cauza lipsei unei a treia strângeri de mână, serverul nu are cum să știe dacă clientul a primit corect confirmarea ACK pentru a stabili conexiunea. Drept urmare, dacă mesajele se blochează în rețea, clientul va continua să trimită din nou cereri SYN de mai multe ori, determinând serverul să stabilească constant conexiuni noi. Acest lucru va crește congestia și întârzierea rețelei și va afecta negativ performanța generală a rețelei.
Prin urmare, pentru a asigura stabilitatea și fiabilitatea conexiunii de rețea, TCP folosește strângerea de mână cu trei căi pentru a stabili conexiunea pentru a evita apariția acestor probleme.
Rezumat
Broker de pachete de rețeaUnitatea de conectare TCP se face cu o strângere de mână cu trei căi. În timpul strângerii de mână cu trei căi, clientul trimite mai întâi un pachet cu steagul Syn către server, ceea ce indică faptul că dorește să stabilească o conexiune. După ce a primit solicitarea de la client, serverul răspunde unui pachet cu steaguri Syn și ACK către client, ceea ce indică faptul că cererea de conectare este acceptată și trimite propriul său număr de secvență inițială. În cele din urmă, clientul răspunde cu un steag ACK la server pentru a indica faptul că conexiunea a fost stabilită cu succes. Astfel, cele două părți sunt în starea stabilită și pot începe să -și trimită date reciproc.
În general, procesul de strângere de mână cu trei căi pentru unitatea de conectare TCP este conceput pentru a asigura stabilitatea și fiabilitatea conexiunii, pentru a evita confuzia și risipa de resurse peste conexiunile istorice și să se asigure că ambele părți sunt capabile să primească și să trimită date.
Timpul post: 08-2025 ianuarie