Tīkla pakešu brokera TCP savienojumu galvenās mistērijas: atklājās trīskāršās rokasspiediena nepieciešamība

TCP savienojuma iestatīšana
Pārlūkojot tīmekli, nosūtot e-pastu vai spēlējot tiešsaistes spēli, mēs bieži neaizdomājamies par sarežģīto tīkla savienojumu, kas tam seko. Tomēr tieši šie šķietami mazie soļi nodrošina stabilu saziņu starp mums un serveri. Viens no svarīgākajiem soļiem ir TCP savienojuma iestatīšana, un tā pamatā ir trīspusēja rokasspiediena procedūra.

Šajā rakstā tiks detalizēti aplūkots trīspusējo rokasspiedienu princips, process un nozīme. Soli pa solim mēs paskaidrosim, kāpēc ir nepieciešama trīspusējo rokasspiedienu kombinācija, kā tā nodrošina savienojuma stabilitāti un uzticamību, un cik svarīga tā ir datu pārsūtīšanai. Dziļāk izprotot trīspusējo 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īspusējo rokasspiedienu process un stāvokļu pārejas
TCP ir uz savienojumiem orientēts transporta protokols, kam pirms datu pārraides ir nepieciešams izveidot savienojumu. Šis savienojuma izveides process tiek veikts ar trīspusēju rokasspiedienu.

 TCP trīspusēja rokasspiediena

Aplūkosim tuvāk TCP paketes, kas tiek nosūtītas katrā savienojumā.

Sākotnēji gan klients, gan serveris ir SLĒGTI. Vispirms serveris aktīvi klausās portā un atrodas KLAUSĪŠANĀS stāvoklī, kas nozīmē, ka serverim ir jābūt ieslēgtam. Pēc tam klients ir gatavs sākt piekļuvi tīmekļa lapai. Tam ir jāizveido savienojums ar serveri. Pirmā savienojuma paketes formāts ir šāds:

 SYN pakete

Kad klients uzsāk savienojumu, tas ģenerē nejaušu sākotnējo secības numuru (client_isn) un ievieto to TCP galvenes laukā "Secības numurs". Vienlaikus klients iestata SYN karodziņa 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 paketi klientam, kurā nav lietojumprogrammas slāņa datu (un nav datu, ko serverim būtu jānosūta). Šajā laikā serveris atrodas SYN-RCVD stāvoklī.

ACK pakete

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

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

Kā redzams no iepriekš minētā procesa, veicot trīspusējo rokasspiedienu, trešajam rokasspiedienam ir atļauts pārsūtīt datus, bet pirmajiem diviem rokasspiedieniem tas nav atļauts. Šis ir jautājums, kas bieži tiek uzdots intervijās. Kad trīspusēja rokasspiediena pabeigšana ir pabeigta, abas puses pāriet IZVEIDOTĀ stāvoklī, kas norāda, ka savienojums ir veiksmīgi izveidots, un pēc tam klients un serveris var sākt sūtīt datus viens otram.

Kāpēc trīs rokasspiedieni? Nevis divreiz, bet četras reizes?
Visbiežākā atbilde ir: "Tāpēc, ka trīspusēja rokasspiediena gadījumā tiek garantēta iespēja saņemt un sūtīt." Šī atbilde ir pareiza, taču tā ir tikai virspusēja, nevis galvenais iemesls. Turpmāk es analizēšu trīspusējas rokasspiediena iemeslus no trim aspektiem, lai padziļinātu mūsu izpratni par šo jautājumu.

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

1. iemesls: izvairieties no vēsturiskiem dublikātu savienojumiem
Īsumā, galvenais trīspusējo rokasspiedienu mērķis ir izvairīties no neskaidrībām, ko rada vecā, dublētā savienojuma inicializācija. Sarežģītā tīkla vidē datu pakešu pārraide ne vienmēr tiek nosūtīta uz mērķa resursdatoru atbilstoši norādītajam laikam, un vecās datu paketes var ierasties mērķa resursdatorā pirmās tīkla pārslodzes un citu iemeslu dēļ. Lai no tā izvairītos, TCP savienojuma izveidei izmanto trīspusējo rokasspiedienu.

trīspusēja rokasspiediena metode ļauj izvairīties no vēsturiskiem dublētiem savienojumiem

Kad klients pēc kārtas nosūta vairākus SYN savienojuma izveides paketes, tādās situācijās kā tīkla pārslodze, var notikt sekojošais:

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

Ar divu rokasspiedienu savienojumu nav iespējams noteikt, vai pašreizējais savienojums ir vēsturisks savienojums. Trīspusēja rokasspiediena gadījumā klients var 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 ir iestājies taimauts), trešās 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 saziņas puses veiksmīgi izveido savienojumu.

Tāpēc galvenais iemesls, kāpēc TCP izmanto trīspusējo rokasspiedienu, ir savienojuma inicializācija, lai novērstu vēsturisku savienojumu veidošanos.

2. iemesls: Lai sinhronizētu abu pušu sākotnējos secības numurus
Abām TCP protokola pusēm ir jāuztur secības 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:

Saņēmējs var novērst datu dublikātus un nodrošināt datu precizitāti.

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

● Secības numurs var identificēt datu paketi, ko saņēmusi otra puse, tādējādi nodrošinot uzticamu datu pārraidi.

Tāpēc, izveidojot TCP savienojumu, klients nosūta SYN paketes ar sākotnējo secības numuru un pieprasa serverim atbildēt ar ACK paketi, kas norāda uz klienta SYN paketes veiksmīgu saņemšanu. Pēc tam serveris nosūta SYN paketi ar sākotnējo secības numuru klientam un gaida klienta atbildi reizi par visām reizēm, lai nodrošinātu, ka sākotnējie secības numuri ir droši sinhronizēti.

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

Lai gan četru pušu rokasspiediens arī ir iespējams droši sinhronizēt abu pušu sākotnējos secības numurus, otro un trešo soli var apvienot vienā solī, iegūstot trīspusēju rokasspiedienu. Tomēr abi rokasspiedieni var garantēt tikai to, ka vienas puses sākotnējo secības numuru veiksmīgi saņem otra puse, bet nav garantijas, ka abu pušu sākotnējo secības numuru var apstiprināt. Tāpēc trīspusēja rokasspiediena metode 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 rokasspiedienu" saņemšana, kad klienta SYN pieprasījums tīklā ir bloķēts, klients nevar saņemt servera nosūtīto ACK paketi, tāpēc SYN tiks nosūtīts atkārtoti. Tomēr, tā kā nav trešās rokasspiediena, serveris nevar noteikt, vai klients ir saņēmis ACK apstiprinājumu savienojuma izveidei. Tāpēc serveris var izveidot savienojumu tikai proaktīvi 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 pārsū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šās saziņas trūkuma dēļ serverim nav iespējas zināt, vai klients ir pareizi saņēmis ACK apstiprinājumu savienojuma izveidei. Tā 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 kavēšanos, kā arī 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 izmanto trīspusējo rokasspiedienu, lai izveidotu savienojumu un izvairītos no šo problēmu rašanās.

Kopsavilkums
TheTīkla pakešu brokerisTCP savienojuma izveide tiek veikta ar trīspusēju rokasspiedienu. Trīspusējas rokasspiediena laikā klients vispirms nosūta serverim paketi ar SYN karodziņu, norādot, ka vēlas izveidot savienojumu. Pēc pieprasījuma saņemšanas no klienta serveris atbild klientam ar paketi ar SYN un ACK karodziņiem, norādot, ka savienojuma pieprasījums ir pieņemts, un nosūta savu sākotnējo secības 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 ESTABLISHED stāvoklī un var sākt sūtīt datus viena otrai.

Kopumā trīspusējas saziņas process TCP savienojuma izveidei ir izstrādāts, lai nodrošinātu savienojuma stabilitāti un uzticamību, izvairītos no neskaidrībām un resursu izšķērdēšanas vēsturisko savienojumu dēļ, kā arī nodrošinātu, ka abas puses spēj saņemt un nosūtīt datus.


Publicēšanas laiks: 2025. gada 8. janvāris