Misteret kryesore të lidhjeve TCP të ndërmjetësit të paketave të rrjetit: Demistifikoi nevojën për shtrëngim duarsh të trefishtë

Konfigurimi i Lidhjes TCP
Kur shfletojmë internetin, dërgojmë një email ose luajmë një lojë online, shpesh nuk mendojmë për lidhjen komplekse të rrjetit që fshihet pas saj. Megjithatë, janë këto hapa në dukje të vegjël që sigurojnë komunikim të qëndrueshëm midis nesh dhe serverit. Një nga hapat më të rëndësishëm është konfigurimi i lidhjes TCP, dhe thelbi i kësaj është shtrëngimi i dorës në tre drejtime.

Ky artikull do të diskutojë në detaje parimin, procesin dhe rëndësinë e shtrëngimit të dorës në tre drejtime. Hap pas hapi, do të shpjegojmë pse është i nevojshëm shtrëngimi i dorës në tre drejtime, si siguron stabilitetin dhe besueshmërinë e lidhjes dhe sa i rëndësishëm është për transferimin e të dhënave. Me një kuptim më të thellë të shtrëngimit të dorës në tre drejtime, do të fitojmë një kuptim më të mirë të mekanizmave themelorë të komunikimit në rrjet dhe një pamje më të qartë të besueshmërisë së lidhjeve TCP.

Procesi i shtrëngimit të dorës në tre drejtime në TCP dhe tranzicionet e gjendjes
TCP është një protokoll transporti i orientuar drejt lidhjes, i cili kërkon vendosjen e lidhjes përpara transmetimit të të dhënave. Ky proces vendosjeje lidhjeje bëhet me anë të një shtrëngimi duarsh trepalësh.

 Shtrëngim duarsh trepalësh TCP

Le të hedhim një vështrim më të afërt në paketat TCP që dërgohen në secilën lidhje.

Fillimisht, si klienti ashtu edhe serveri janë TË MBYLLUR. Së pari, serveri dëgjon në mënyrë aktive në një port dhe është në gjendjen LISTEN, që do të thotë se serveri duhet të niset. Më pas, klienti është gati të fillojë të hyjë në faqen e internetit. Ai duhet të krijojë një lidhje me serverin. Formati i paketës së parë të lidhjes është si më poshtë:

 Paketa SYN

Kur një klient fillon një lidhje, ai gjeneron një numër rendor fillestar të rastësishëm (client_isn) dhe e vendos atë në fushën "Numri i sekuencës" të kokës TCP. Në të njëjtën kohë, klienti e vendos pozicionin e flamurit SYN në 1 për të treguar se paketa dalëse është një paketë SYN. ​​Klienti tregon se dëshiron të krijojë një lidhje me serverin duke dërguar paketën e parë SYN në server. Kjo paketë nuk përmban të dhëna të shtresës së aplikacionit (domethënë, të dhëna të dërguara). Në këtë pikë, statusi i klientit shënohet si SYN-SENT.

Paketa SYN+ACK

Kur një server merr një paketë SYN nga një klient, ai inicializon rastësisht numrin e vet serial (server_isn) dhe më pas e vendos atë numër në fushën "Numri serial" të kokës TCP. Më pas, serveri fut client_isn + 1 në fushën "Numri i konfirmimit" dhe i vendos bitët SYN dhe ACK në 1. Së fundmi, serveri ia dërgon paketën klientit, e cila nuk përmban të dhëna të shtresës së aplikacionit (dhe asnjë të dhënë që serveri të dërgojë). Në këtë kohë, serveri është në gjendjen SYN-RCVD.

Paketa ACK

Pasi klienti merr paketën nga serveri, ai duhet të kryejë optimizimet e mëposhtme për t'iu përgjigjur paketës përfundimtare të përgjigjes: Së pari, klienti e vendos bitin ACK të kokës TCP të paketës së përgjigjes në 1; Së dyti, klienti fut vlerën server_isn + 1 në fushën "Konfirmo numrin e përgjigjes"; Së fundmi, klienti e dërgon paketën te serveri. Kjo paketë mund të mbajë të dhëna nga klienti te serveri. Pas përfundimit të këtyre operacioneve, klienti do të hyjë në gjendjen ESTABLISHED.

Pasi serveri merr paketën e përgjigjes nga klienti, ai gjithashtu kalon në gjendjen ESTABLISHED.

Siç mund ta shihni nga procesi i mësipërm, kur kryhet një shtrëngim duarsh trepalësh, shtrëngimi i tretë i dorës lejohet të mbajë të dhëna, por dy shtrëngimet e para nuk lejohen. Kjo është një pyetje që bëhet shpesh në intervista. Pasi të përfundojë shtrëngimi i dorës trepalësh, të dyja palët hyjnë në gjendjen E VENDOSUR, duke treguar se lidhja është vendosur me sukses, në të cilën pikë klienti dhe serveri mund të fillojnë të dërgojnë të dhëna tek njëri-tjetri.

Pse tre shtrëngime duarsh? Jo dy herë, por katër herë?
Përgjigja e zakonshme është: "Sepse shtrëngimi i dorës në tre drejtime garanton aftësinë për të marrë dhe dërguar". Kjo përgjigje është e saktë, por është vetëm arsyeja sipërfaqësore, nuk paraqet arsyen kryesore. Më poshtë, do të analizoj arsyet e shtrëngimit të dorës në tre drejtime nga tre aspekte për të thelluar kuptimin tonë të kësaj çështjeje.

Shtrëngimi i dorës në tre drejtime mund të shmangë në mënyrë efektive inicializimin e lidhjeve historikisht të përsëritura (arsyeja kryesore)
Shtrëngimi i dorës në tre drejtime garanton që të dyja palët kanë marrë një numër rendor fillestar të besueshëm.
Shtrëngimi i dorës në tre drejtime shmang shpërdorimin e burimeve.

Arsyeja 1: Shmangni bashkimet historike të dyfishta
Me pak fjalë, arsyeja kryesore për shtrëngimin e dorës në tre drejtime është shmangia e konfuzionit të shkaktuar nga inicializimi i lidhjes së vjetër të dyfishtë. Në një mjedis kompleks rrjeti, transmetimi i paketave të të dhënave nuk dërgohet gjithmonë te hosti i destinacionit në përputhje me kohën e specifikuar, dhe paketat e vjetra të të dhënave mund të mbërrijnë të parat te hosti i destinacionit për shkak të mbingarkesës së rrjetit dhe arsyeve të tjera. Për të shmangur këtë, TCP përdor një shtrëngim duarsh në tre drejtime për të vendosur lidhjen.

Shtrëngimi i dorës trepalësh shmang lidhjet historike të dyfishta

Kur një klient dërgon disa paketa vendosjeje lidhjesh SYN njëra pas tjetrës, në situata të tilla si mbingarkesa e rrjetit, mund të ndodhin këto:

1- Paketat e vjetra SYN mbërrijnë në server para paketave të fundit SYN.
2- Serveri do t'i përgjigjet klientit me një paketë SYN + ACK pasi të marrë paketën e vjetër SYN.
3- Kur klienti merr paketën SYN + ACK, ai përcakton që lidhja është një lidhje historike (numri i sekuencës ka skaduar ose koha ka mbaruar) sipas kontekstit të vet, dhe më pas dërgon paketën RST në server për të ndërprerë lidhjen.

Me një lidhje me dy shtrëngime duarsh, nuk ka asnjë mënyrë për të përcaktuar nëse lidhja aktuale është një lidhje historike. Shtrëngimi i duarve trepalësh i lejon klientit të përcaktojë nëse lidhja aktuale është një lidhje historike bazuar në kontekst kur është gati të dërgojë paketën e tretë:

1- Nëse është një lidhje historike (numri i sekuencës ka skaduar ose ka skaduar koha), paketa e dërguar nga shtrëngimi i tretë i dorës është një paketë RST për të ndërprerë lidhjen historike.
2- Nëse nuk është një lidhje historike, paketa e dërguar për herë të tretë është një paketë ACK dhe të dy palët që komunikojnë e krijojnë me sukses lidhjen.

Prandaj, arsyeja kryesore pse TCP përdor shtrëngimin e dorës trepalëshe është se ai inicializon lidhjen për të parandaluar lidhjet historike.

Arsyeja 2: Për të sinkronizuar numrat fillestarë të sekuencës së të dyja palëve
Të dyja anët e protokollit TCP duhet të ruajnë një numër rendor, i cili është një faktor kyç për të siguruar transmetim të besueshëm. Numrat rendor luajnë një rol të rëndësishëm në lidhjet TCP. Ata bëjnë sa vijon:

Marrësi mund të eliminojë të dhënat e dyfishta dhe të sigurojë saktësinë e të dhënave.

Marrësi mund të marrë paketa sipas rendit të numrit rendor për të siguruar integritetin e të dhënave.

● Numri rendor mund të identifikojë paketën e të dhënave që është marrë nga pala tjetër, duke mundësuar transmetim të besueshëm të të dhënave.

Prandaj, pas vendosjes së një lidhjeje TCP, klienti dërgon paketa SYN me numrin fillestar të sekuencës dhe kërkon që serveri të përgjigjet me një paketë ACK që tregon marrjen me sukses të paketës SYN të klientit. Pastaj, serveri i dërgon paketën SYN me numrin fillestar të sekuencës klientit dhe pret që klienti të përgjigjet, një herë e përgjithmonë, për të siguruar që numrat fillestarë të sekuencës janë sinkronizuar në mënyrë të besueshme.

Sinkronizoni numrat fillestarë serialë të të dyja palëve

Edhe pse një shtrëngim duarsh katërpalësh është gjithashtu i mundur për të sinkronizuar në mënyrë të besueshme numrat fillestarë të sekuencës së të dyja palëve, hapi i dytë dhe i tretë mund të kombinohen në një hap të vetëm, duke rezultuar në një shtrëngim duarsh trepalësh. Megjithatë, të dy shtrëngimet duarsh mund të garantojnë vetëm që numri fillestar i sekuencës së njërës palë të pranohet me sukses nga pala tjetër, por nuk ka garanci se numri fillestar i sekuencës së të dyja palëve mund të konfirmohet. Prandaj, shtrëngimi duarsh trepalësh është zgjedhja më e mirë për t'u marrë për të siguruar stabilitetin dhe besueshmërinë e lidhjeve TCP.

Arsyeja 3: Shmangni shpërdorimin e burimeve
Nëse ka vetëm një "shtrëngim duarsh me dy palë", kur kërkesa SYN e klientit bllokohet në rrjet, klienti nuk mund ta marrë paketën ACK të dërguar nga serveri, kështu që SYN do të ridërgohet. Megjithatë, meqenëse nuk ka një shtrëngim duarsh të tretë, serveri nuk mund të përcaktojë nëse klienti ka marrë një konfirmim ACK për të vendosur lidhjen. Prandaj, serveri mund të krijojë një lidhje në mënyrë proaktive vetëm pasi të marrë çdo kërkesë SYN. ​​Kjo çon në sa vijon:

Humbje burimesh: Nëse kërkesa SYN e klientit bllokohet, duke rezultuar në transmetim të përsëritur të paketave të shumëfishta SYN, serveri do të krijojë lidhje të shumëfishta të pavlefshme të tepërta pas marrjes së kërkesës. Kjo çon në një humbje të panevojshme të burimeve të serverit.

Ruajtja e mesazhit: Për shkak të mungesës së një shtrëngimi të tretë duarsh, serveri nuk ka asnjë mënyrë për të ditur nëse klienti e ka marrë saktë konfirmimin ACK për të vendosur lidhjen. Si rezultat, nëse mesazhet ngecin në rrjet, klienti do të vazhdojë të dërgojë kërkesa SYN vazhdimisht, duke bërë që serveri të krijojë vazhdimisht lidhje të reja. Kjo do të rrisë mbingarkesën dhe vonesën e rrjetit dhe do të ndikojë negativisht në performancën e përgjithshme të rrjetit.

Shmangni shpërdorimin e burimeve

Prandaj, për të siguruar stabilitetin dhe besueshmërinë e lidhjes së rrjetit, TCP përdor shtrëngimin e dorës trepalëshe për të vendosur lidhjen dhe për të shmangur shfaqjen e këtyre problemeve.

Përmbledhje
I/E/Të/TëNdërmjetësi i Paketave të RrjetitVendosja e lidhjes TCP bëhet me një shtrëngim duarsh trepalësh. Gjatë shtrëngimit duarsh trepalësh, klienti së pari dërgon një paketë me flamurin SYN te serveri, duke treguar se dëshiron të krijojë një lidhje. Pas marrjes së kërkesës nga klienti, serveri i përgjigjet klientit me një paketë me flamuj SYN dhe ACK, duke treguar se kërkesa për lidhje është pranuar, dhe dërgon numrin e tij fillestar të sekuencës. Së fundmi, klienti i përgjigjet serverit me një flamur ACK për të treguar se lidhja është vendosur me sukses. Kështu, të dy palët janë në gjendjen ESTABLISHED dhe mund të fillojnë të dërgojnë të dhëna te njëra-tjetra.

Në përgjithësi, procesi i shtrëngimit të dorës në tre drejtime për krijimin e lidhjes TCP është projektuar për të siguruar stabilitetin dhe besueshmërinë e lidhjes, për të shmangur konfuzionin dhe shpërdorimin e burimeve mbi lidhjet historike dhe për të siguruar që të dyja palët janë në gjendje të marrin dhe dërgojnë të dhëna.


Koha e postimit: 08 Janar 2025