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 aiz tā. Tomēr tieši šie šķietami mazie soļi nodrošina stabilu saziņu starp mums un serveri. Viens no vissvarīgākajiem soļiem ir TCP savienojuma iestatīšana, un tā kodols ir trīsceļu rokasspiediens.
Šajā rakstā tiks sīki apskatīts trīsceļu rokasspiediena princips, process un nozīme. Soli pa solim mēs izskaidrosim, kāpēc ir nepieciešams trīsceļu rokasspiediens, kā tas nodrošina savienojuma stabilitāti un uzticamību un cik svarīgi tas ir datu pārsūtīšanai. Ar dziļāku izpratni par trīsceļu rokasspiedienu mēs iegūsim labāku izpratni par tīkla komunikācijas pamatā esošajiem mehānismiem un skaidrāku viedokli par TCP savienojumu uzticamību.
TCP trīsvirzienu rokasspiediena process un valsts pārejas
TCP ir uz savienojumu orientēts transporta protokols, kam nepieciešama savienojuma izveidošana pirms datu pārraides. Šo savienojuma izveidošanas procesu veic ar trīsceļu rokasspiedienu.
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 klausīšanās stāvoklī, kas nozīmē, ka serveris ir jāuzsāk. Tālāk klients ir gatavs sākt piekļuvi vietnei. Tam ir jāizveido savienojums ar serveri. Pirmās savienojuma paketes formāts ir šāds:
Kad klients ierosina savienojumu, tas ģenerē nejaušu sākotnējo secības numuru (Client_ISN) un ievieto TCP galvenes laukā "secības numurs". Tajā pašā laikā klients nosaka SYN karoga pozīciju uz 1, lai norādītu, ka izejošā pakete ir Syn pakete. Klients norāda, ka viņš vēlas izveidot savienojumu ar serveri, nosūtot pirmo SYN paketi uz serveri. Šajā paketē nav lietojumprogrammu slāņa dati (tas ir, nosūtīti dati). Šajā brīdī klienta statuss tiek apzīmēts kā sin-sents.
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āšanas numurs" ievada Client_ISN + 1 un iestata gan SYN, gan ACK bitus uz 1. Visbeidzot, serveris nosūta paketi klientam, kurā nav lietojumprogrammu slāņa datu (un nav datu, ko serveris sūtīt). Šajā laikā serveris atrodas Syn-RCVD stāvoklī.
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 galveni ACK bitu uz 1; Otrkārt, klients laukā "Apstiprināt atbildes numuru" ievada vērtības servera_isn + 1; Visbeidzot, klients nosūta paketi uz serveri. Šī pakete var pārnest datus no klienta uz serveri. Pabeidzot šīs operācijas, klients nonāks izveidotajā stāvoklī.
Kad serveris saņem atbildes paketi no klienta, tas arī pārslēdzas uz izveidoto stāvokli.
Kā redzat no iepriekšminētā procesa, veicot trīsceļu rokasspiedienu, trešajam rokasspiedienam ir atļauts nēsāt datus, bet pirmie divi rokasspiedieni nav. Šis ir jautājums, kas bieži tiek uzdots intervijās. Kad trīsceļu rokasspiediens ir pabeigts, abas puses nonāk izveidotajā stāvoklī, norādot, ka savienojums ir veiksmīgi izveidots, kurā klients un serveris var sākt sūtīt datus viens otram.
Kāpēc trīs rokasspiedieni? Ne divreiz, četras reizes?
Kopējā atbilde ir: "Tā kā trīsceļu rokasspiediens garantē iespēju saņemt un nosūtīt". Šī atbilde ir pareiza, bet tas ir tikai virsmas iemesls, neizvirza galveno iemeslu. Turpmāk es analizēšu trīskāršā rokasspiediena iemeslus no trim aspektiem, lai padziļinātu mūsu izpratni par šo jautājumu.
Trīsceļu rokasspiediens var efektīvi izvairīties no vēsturiski atkārtotu savienojumu inicializācijas (galvenais iemesls)
Trīsceļu rokasspiediens garantē, ka abas puses ir saņēmušas ticamu sākotnējās secības numuru.
Trīsceļu rokasspiediens izvairās no resursu izšķērdēšanas.
1. iemesls: izvairieties no vēsturiskiem dublikātu savienojumiem
Īsumā, galvenais trīsvirzienu rokasspiediena iemesls ir izvairīties no neskaidrībām, ko izraisa vecā dublikāta 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 saskaņā ar noteikto laiku, un vecās datu paketes vispirms var nonākt mērķa resursdatorā tīkla sastrēgumu un citu iemeslu dēļ. Lai no tā izvairītos, TCP izmanto trīsceļu rokasspiedienu, lai izveidotu savienojumu.
Kad klients pēc kārtas nosūta vairākas Syn savienojuma iestādes paketes, tādās situācijās kā tīkla sastrēgumi, var rasties šādi:
1- Vecās Syn paketes nonāk serverī pirms jaunākajām SYN paketēm.
2- Serveris atbildēs klientam Syn + ACK paketi pēc vecās Syn paketes saņemšanas.
3- Kad klients saņem SYN + ACK paketi, tas nosaka, ka savienojums ir vēsturisks savienojums (secības numura derīguma termiņš ir beidzies vai taimauts) atbilstoši tā kontekstam, un pēc tam nosūta pirmo paketi serverim, lai pārtrauktu savienojumu.
Izmantojot divu roku kratīšanas savienojumu, nav iespējams noteikt, vai pašreizējais savienojums ir vēsturisks savienojums. Trīsceļu 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 numura derīguma termiņš ir beidzies vai noilgums), trešais rokasspiediens nosūtītā pakete ir pirmā pakete, lai pārtrauktu vēsturisko savienojumu.
2- ja tas nav vēsturisks savienojums, pakete, kas nosūtīta trešo reizi, ir ACK pakete, un abas komunikācijas puses veiksmīgi izveido savienojumu.
Tāpēc galvenais iemesls, kāpēc TCP izmanto trīsceļu rokasspiedienu, ir tas, ka tas inicializē savienojumu, lai novērstu vēsturiskos savienojumus.
2. iemesls: sinhronizēt abu pušu sākotnējo secību skaitu
Abām TCP protokola pusēm jāuztur secības numurs, kas ir galvenais faktors, lai nodrošinātu uzticamu pārraidi. Secības numuriem ir liela nozīme TCP savienojumos. Viņi rīkojas šādi:
Uztvērējs var novērst datu dublikātu 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, kuru ir saņēmusi otra puse, ļaujot uzticamu datu pārraidi.
Tāpēc, izveidojot TCP savienojumu, klients nosūta Syn paketes ar sākotnējo secības numuru un pieprasa, lai serveris atbildētu ar ACK paketi, kas norāda uz veiksmīgu klienta sinholona paketes uztveršanu. Pēc tam serveris klientam nosūta SYN paketi ar sākotnējo secības numuru un gaida, kad klients vienreiz un uz visiem laikiem atbildēs, lai pārliecinātos, ka sākotnējās secības numuri tiek uzticami sinhronizēti.
Lai gan ir iespējama arī četru virzienu rokasspiediens, lai ticami sinhronizētu abu pušu sākotnējos secības numurus, otro un trešo posmu var apvienot vienā solī, kā rezultātā notiek trīsceļu rokasspiediens. Tomēr abi rokasspiedieni var tikai garantēt, ka otra puse veiksmīgi saņem vienas partijas sākotnējo secības numuru, taču nav garantijas, ka abu pušu sākotnējo secības numuru varētu apstiprināt. Tāpēc trīsceļu 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 ir tikai "divu roku likums", kad tīklā tiek bloķēts klienta SYN pieprasījums, klients nevar saņemt servera nosūtīto ACK paketi, tāpēc SYN tiks aizvainots. Tomēr, tā kā nav trešā rokasspiediena, serveris nevar noteikt, vai klients saņēma 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 šādiem:
Resursu izšķiešana: ja klienta SYN pieprasījums tiek bloķēts, kā rezultātā atkārtoti tiek pārsūtīti 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ņojuma saglabāšana: Trešā rokasspiediena trūkuma dēļ serverim nav iespējas zināt, vai klients pareizi saņēma ACK apstiprinājumu, lai izveidotu savienojumu. Rezultātā, ja ziņojumi iestrēgst tīklā, klients turpinās sūtīt SYN pieprasījumus atkal un atkal, liekot serverim pastāvīgi izveidot jaunus savienojumus. Tas palielinās tīkla sastrēgumus un kavēšanos un negatīvi ietekmēs kopējo tīkla veiktspēju.
Tāpēc, lai nodrošinātu tīkla savienojuma stabilitāti un uzticamību, TCP izmanto trīsceļu rokasspiedienu, lai izveidotu savienojumu, lai izvairītos no šo problēmu rašanās.
Kopsavilkums
LīdzTīkla pakešu brokerisTCP savienojuma izveidošana tiek veikta ar trīsceļu rokasspiedienu. Trīsceļu rokasspiediena laikā klients vispirms nosūta paketi ar SYN karogu uz serveri, norādot, ka viņš 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 tiek pieņemts, un nosūta savu sākotnējo secības numuru. Visbeidzot, klients atbild ar ACK karogu serverī, lai norādītu, ka savienojums ir veiksmīgi izveidots. Tādējādi abas puses atrodas noteiktā stāvoklī un var sākt sūtīt datus viena otrai.
Kopumā TCP savienojuma izveidošanas trīsceļu rokasspiediena process ir paredzēts, lai nodrošinātu savienojuma stabilitāti un uzticamību, izvairītos no neskaidrībām un resursu izšķērdēšanas, salīdzinot ar vēsturiskiem savienojumiem, un nodrošina, ka abas puses spēj saņemt un nosūtīt datus.
Pasta laiks: janvāris-08-2025