Tīkla pakešu brokera TCP savienojumu galvenie noslēpumi: atklāja trīskāršā rokasspiediena nepieciešamību

TCP savienojuma iestatīšana
Pārlūkojot tīmekli, sūtot e-pastu vai spēlējot tiešsaistes spēli, mēs bieži nedomājam par sarežģīto tīkla savienojumu, kas ir aiz tā. Taču tieši šie šķietami mazie soļi nodrošina stabilu komunikāciju starp mums un serveri. Viens no svarīgākajiem soļiem ir TCP savienojuma iestatīšana, un tās pamatā ir trīsvirzienu rokasspiediens.

Šajā rakstā tiks detalizēti apskatīts trīsvirzienu rokasspiediena princips, process un nozīme. Soli pa solim paskaidrosim, kāpēc ir nepieciešams trīsvirzienu rokasspiediens, kā tas nodrošina savienojuma stabilitāti un uzticamību un cik tas ir svarīgi datu pārsūtīšanai. Padziļināti izprotot trīsvirzienu rokasspiedienu, mēs iegūsim labāku izpratni par tīkla komunikācijas pamatā esošajiem mehānismiem un skaidrāku priekšstatu par TCP savienojumu uzticamību.

TCP trīsvirzienu rokasspiediena process un stāvokļa pārejas
TCP ir uz savienojumu orientēts transporta protokols, kuram pirms datu pārraides ir nepieciešams savienojums. Šis savienojuma izveides process tiek veikts ar trīsvirzienu rokasspiedienu.

 TCP trīsvirzienu rokasspiediens

Sīkāk apskatīsim TCP paketes, kas tiek nosūtītas katrā savienojumā.

Sākotnēji gan klients, gan serveris ir SLĒGTI. Pirmkārt, serveris aktīvi klausās portā un atrodas LISTEN stāvoklī, kas nozīmē, ka serveris ir jāstartē. Pēc tam klients ir gatavs sākt piekļuvi tīmekļa lapai. Tam ir jāizveido savienojums ar serveri. Pirmās savienojuma paketes formāts ir šāds:

 SYN pakete

Kad klients uzsāk savienojumu, tas ģenerē nejaušu sākotnējo kārtas numuru (client_isn) un ievieto to TCP galvenes laukā "Sequence number". Tajā pašā laikā klients iestata SYN karoga pozīciju uz 1, lai norādītu, ka izejošā pakete ir SYN pakete. Klients norāda, ka vēlas izveidot savienojumu ar serveri, nosūtot serverim pirmo SYN paketi. Šī pakete nesatur lietojumprogrammas slāņa datus (tas ir, nosūtītos datus). Šajā brīdī klienta statuss tiek atzīmēts kā SYN-SENT.

SYN+ACK pakete

Kad serveris saņem SYN paketi no klienta, tas nejauši inicializē savu sērijas numuru (server_isn) un pēc tam ievieto šo numuru TCP galvenes laukā "Sērijas numurs". Pēc tam serveris laukā "Apstiprinājuma numurs" ievada client_isn + 1 un iestata gan SYN, gan ACK bitus uz 1. Visbeidzot serveris nosūta klientam paketi, kurā nav lietojumprogrammas slāņa datu (un servera datu nav). nosūtīt). Šobrīd serveris ir SYN-RCVD stāvoklī.

ACK pakete

Kad klients saņem paketi no servera, tam ir jāveic šādas optimizācijas, lai reaģētu uz galīgo atbildes paketi: Pirmkārt, klients iestata atbildes paketes TCP galvenes ACK bitu uz 1; Otrkārt, klients laukā "Apstiprināt atbildes numuru" ievada vērtību server_isn + 1; Visbeidzot, klients nosūta paketi uz serveri. Šī pakete var pārsūtīt datus no klienta uz serveri. Pēc šo darbību pabeigšanas klients nonāks IZVĒRTĒTAS stāvoklī.

Kad serveris saņem atbildes paketi no klienta, tas arī pārslēdzas uz IZVEIDOTS stāvokli.

Kā redzams no iepriekš minētā procesa, veicot trīsvirzienu rokasspiedienu, trešais rokasspiediens ir atļauts pārsūtīt datus, bet pirmie divi rokasspiedieni nav. Šis ir jautājums, kas bieži tiek uzdots intervijās. Kad trīsvirzienu rokasspiediens ir pabeigts, abas puses nonāk stāvoklī IZVEIDOTS, norādot, ka savienojums ir veiksmīgi izveidots, un tad klients un serveris var sākt sūtīt datus viens otram.

Kāpēc trīs rokasspiedieni? Nevis divas, četras reizes?
Kopējā atbilde ir: "Tā kā trīsvirzienu rokasspiediens garantē iespēju saņemt un nosūtīt." Šī atbilde ir pareiza, bet tas ir tikai virspusējs iemesls, nevis izvirza galveno iemeslu. Tālāk es analizēšu trīskāršā rokasspiediena iemeslus no trim aspektiem, lai padziļinātu mūsu izpratni par šo jautājumu.

Trīsvirzienu rokasspiediens var efektīvi izvairīties no vēsturiski atkārtotu savienojumu inicializācijas (galvenais iemesls)
Trīsvirzienu rokasspiediens garantē, ka abas puses ir saņēmušas uzticamu sākotnējo kārtas numuru.
Trīsvirzienu rokasspiediens ļauj izvairīties no resursu izšķērdēšanas.

1. iemesls: izvairieties no vēsturiskiem dublikātiem
Īsumā, galvenais trīsvirzienu rokasspiediena iemesls ir izvairīties no neskaidrībām, ko izraisa vecā savienojuma dublikāta inicializācija. Sarežģītā tīkla vidē datu pakešu pārsūtīšana ne vienmēr tiek nosūtīta galamērķa resursdatoram noteiktajā laikā, un vecās datu paketes vispirms var nonākt galamērķa resursdatorā tīkla pārslodzes un citu iemeslu dēļ. Lai no tā izvairītos, TCP savienojuma izveidošanai izmanto trīsvirzienu rokasspiedienu.

trīsvirzienu rokasspiediens ļauj izvairīties no vēsturiskiem dublētiem savienojumiem

Ja klients pēc kārtas nosūta vairākas SYN savienojuma izveides paketes, tādās situācijās kā tīkla pārslodze, var rasties šādas situācijas:

1. Vecās SYN paketes nonāk serverī pirms jaunākajām SYN paketēm.
2. Pēc vecās SYN paketes saņemšanas serveris klientam atbildēs uz SYN + ACK paketi.
3. Kad klients saņem SYN + ACK paketi, tas nosaka, ka savienojums ir vēsturisks savienojums (secības numurs ir beidzies vai taimauts) atbilstoši savam kontekstam, un pēc tam nosūta RST paketi serverim, lai pārtrauktu savienojumu.

Izmantojot divu rokasspiedienu savienojumu, nav iespējams noteikt, vai pašreizējais savienojums ir vēsturisks savienojums. Trīsvirzienu rokasspiediens ļauj klientam noteikt, vai pašreizējais savienojums ir vēsturisks savienojums, pamatojoties uz kontekstu, kad tas ir gatavs nosūtīt trešo paketi:

1. Ja tas ir vēsturisks savienojums (secības numurs ir beidzies vai taimauts), trešā rokasspiediena nosūtītā pakete ir RST pakete, lai pārtrauktu vēsturisko savienojumu.
2. Ja tas nav vēsturisks savienojums, trešo reizi nosūtītā pakete ir ACK pakete, un abas sazinošās puses veiksmīgi izveido savienojumu.

Tāpēc galvenais iemesls, kāpēc TCP izmanto trīsvirzienu rokasspiedienu, ir tas, ka tas inicializē savienojumu, lai novērstu vēsturiskus savienojumus.

2. iemesls: lai sinhronizētu abu pušu sākotnējos kārtas numurus
Abām TCP protokola pusēm ir jāsaglabā kārtas numurs, kas ir galvenais faktors, lai nodrošinātu uzticamu pārraidi. Secības numuriem ir svarīga loma TCP savienojumos. Tie veic šādas darbības:

Uztvērējs var novērst datu dublikātus un nodrošināt datu precizitāti.

Uztvērējs var saņemt paketes kārtas numura secībā, lai nodrošinātu datu integritāti.

● Ar kārtas numuru var identificēt datu paketi, ko ir saņēmusi otra puse, tādējādi nodrošinot drošu datu pārraidi.

Tāpēc, izveidojot TCP savienojumu, klients nosūta SYN paketes ar sākotnējo kārtas numuru un pieprasa serverim atbildēt ar ACK paketi, kas norāda uz veiksmīgu klienta SYN paketes saņemšanu. Pēc tam serveris nosūta klientam SYN paketi ar sākotnējo kārtas numuru un gaida, līdz klients atbildēs uz visiem laikiem, lai nodrošinātu sākotnējo kārtas numuru uzticamu sinhronizāciju.

Sinhronizējiet abu pušu sākotnējos sērijas numurus

Lai gan četrvirzienu rokasspiediens ir iespējams arī, lai ticami sinhronizētu abu pušu sākotnējos kārtas numurus, otro un trešo darbību var apvienot vienā darbībā, kā rezultātā tiek izveidots trīsvirzienu rokasspiediens. Tomēr divi rokasspiedieni var garantēt tikai to, ka otra puse veiksmīgi saņem vienas puses sākotnējo kārtas numuru, taču nav garantijas, ka abu pušu sākotnējais kārtas numurs tiks apstiprināts. Tāpēc trīsvirzienu rokasspiediens ir labākā izvēle, lai nodrošinātu TCP savienojumu stabilitāti un uzticamību.

3. iemesls: izvairieties no resursu izšķērdēšanas
Ja notiek tikai "divu roku spiediens", kad klienta SYN pieprasījums ir bloķēts tīklā, klients nevar saņemt servera nosūtīto ACK paketi, tāpēc SYN tiks nosūtīts atkārtoti. Tomēr, tā kā trešā rokasspiediena nav, serveris nevar noteikt, vai klients ir saņēmis ACK apstiprinājumu, lai izveidotu savienojumu. Tāpēc serveris var proaktīvi izveidot savienojumu tikai pēc katra SYN pieprasījuma saņemšanas. Tas noved pie sekojošā:

Resursu izšķērdēšana: ja klienta SYN pieprasījums tiek bloķēts, kā rezultātā tiek atkārtoti nosūtītas vairākas SYN paketes, serveris pēc pieprasījuma saņemšanas izveidos vairākus liekus nederīgus savienojumus. Tas noved pie nevajadzīgas servera resursu izšķērdēšanas.

Ziņojumu saglabāšana: trešā rokasspiediena trūkuma dēļ serveris nevar zināt, vai klients pareizi saņēma ACK apstiprinājumu, lai izveidotu savienojumu. Rezultātā, ja ziņojumi iestrēgst tīklā, klients atkal un atkal sūtīs SYN pieprasījumus, liekot serverim pastāvīgi izveidot jaunus savienojumus. Tas palielinās tīkla pārslodzi un aizkavēšanos un negatīvi ietekmēs kopējo tīkla veiktspēju.

Izvairieties no resursu izšķērdēšanas

Tāpēc, lai nodrošinātu tīkla savienojuma stabilitāti un uzticamību, TCP savienojuma izveidošanai izmanto trīsvirzienu rokasspiedienu, lai izvairītos no šo problēmu rašanās.

Kopsavilkums
TheTīkla pakešu brokerisTCP savienojuma izveide tiek veikta ar trīsvirzienu rokasspiedienu. Trīsvirzienu rokasspiediena laikā klients vispirms nosūta serverim paketi ar SYN karogu, norādot, ka vēlas izveidot savienojumu. Pēc pieprasījuma saņemšanas no klienta serveris klientam atbild uz paketi ar SYN un ACK karodziņiem, norādot, ka savienojuma pieprasījums ir pieņemts, un nosūta savu sākotnējo kārtas numuru. Visbeidzot, klients atbild ar ACK karodziņu serverim, lai norādītu, ka savienojums ir veiksmīgi izveidots. Tādējādi abas puses atrodas IZVEIDOTĀ stāvoklī un var sākt sūtīt datus viena otrai.

Kopumā trīsvirzienu rokasspiediena process TCP savienojuma izveidei ir paredzēts, lai nodrošinātu savienojuma stabilitāti un uzticamību, izvairītos no neskaidrībām un resursu izšķērdēšanas saistībā ar vēsturiskiem savienojumiem un nodrošinātu, ka abas puses var saņemt un nosūtīt datus.


Izlikšanas laiks: 08.01.2025