Agordo de TCP-Konekto
Kiam ni foliumas la reton, sendas retpoŝton, aŭ ludas retan ludon, ni ofte ne pensas pri la kompleksa retkonekto malantaŭ ĝi. Tamen, ĝuste ĉi tiuj ŝajne malgrandaj paŝoj certigas stabilan komunikadon inter ni kaj la servilo. Unu el la plej gravaj paŝoj estas la agordo de la TCP-konekto, kaj la kerno de ĉi tio estas la tridirekta manpremo.
Ĉi tiu artikolo detale diskutos la principon, procezon kaj gravecon de la tridirekta manpremo. Paŝon post paŝo, ni klarigos kial la tridirekta manpremo estas necesa, kiel ĝi certigas konektan stabilecon kaj fidindecon, kaj kiom grava ĝi estas por datumtransigo. Kun pli profunda kompreno de la tridirekta manpremo, ni akiros pli bonan komprenon pri la subestaj mekanismoj de retkomunikado kaj pli klaran vidon pri la fidindeco de TCP-konektoj.
TCP Tridirekta Manprema Procezo kaj Ŝtataj Transiroj
TCP estas konekt-orientita transportprotokolo, kiu postulas konekto-establon antaŭ datumtranssendo. Ĉi tiu konekto-establoprocezo estas farata per tridirekta manpremo.
Ni rigardu pli detale la TCP-pakaĵetojn, kiuj estas senditaj en ĉiu konekto.
Komence, kaj la kliento kaj la servilo estas FERMITAJ. Unue, la servilo aktive aŭskultas ĉe haveno kaj estas en la stato AŬSKULTU, kio signifas, ke la servilo devas esti startigita. Poste, la kliento estas preta komenci aliri la retpaĝon. Ĝi bezonas establi konekton kun la servilo. La formato de la unua konektpakaĵo estas jena:
Kiam kliento iniciatas konekton, ĝi generas hazardan komencan sekvencnumeron (client_isn) kaj metas ĝin en la kampon "Sekvencnumero" de la TCP-kaplinio. Samtempe, la kliento agordas la SYN-flagpozicion al 1 por indiki, ke la eliranta pakaĵeto estas SYN-pakaĵeto. La kliento indikas, ke ĝi volas establi konekton kun la servilo sendante la unuan SYN-pakaĵeton al la servilo. Ĉi tiu pakaĵeto ne enhavas aplikaĵtavolajn datumojn (tio estas, senditajn datumojn). Ĉe tiu punkto, la stato de la kliento estas markita kiel SYN-SENT.
Kiam servilo ricevas SYN-pakaĵeton de kliento, ĝi hazarde inicialigas sian propran serian numeron (server_isn) kaj poste metas tiun numeron en la kampon "Seria numero" de la TCP-kaplinio. Poste, la servilo enigas client_isn + 1 en la kampon "Agnoska numero" kaj metas ambaŭ SYN- kaj ACK-bitojn al 1. Fine, la servilo sendas la pakaĵeton al la kliento, kiu enhavas neniujn aplikaĵ-tavolajn datumojn (kaj neniujn datumojn por la servilo sendi). Tiam, la servilo estas en SYN-RCVD-stato.
Post kiam la kliento ricevas la pakaĵeton de la servilo, ĝi bezonas plenumi la jenajn optimumigojn por respondi al la fina respondpakaĵeto: Unue, la kliento agordas la ACK-biton de la TCP-kaplinio de la respondpakaĵeto al 1; Due, la kliento enigas la valoron server_isn + 1 en la kampon "Konfirmi respondnumeron"; Fine, la kliento sendas la pakaĵeton al la servilo. Ĉi tiu pakaĵeto povas porti datumojn de la kliento al la servilo. Post kompletigo de ĉi tiuj operacioj, la kliento eniros la ESTABLISHED-staton.
Post kiam la servilo ricevas la respondpakaĵeton de la kliento, ĝi ankaŭ ŝanĝas al la stato ESTABLITA.
Kiel vi povas vidi el la supra procezo, dum tridirekta manpremo, la tria manpremo rajtas porti datumojn, sed la unuaj du manpremoj ne. Ĉi tiu demando ofte estas farata en intervjuoj. Post kiam la tridirekta manpremo finiĝas, ambaŭ partioj eniras la staton ESTABLITA, indikante ke la konekto estis sukcese establita, kaj tiam la kliento kaj servilo povas komenci sendi datumojn unu al la alia.
Kial tri manpremoj? Ne dufoje, kvarfoje?
La ofta respondo estas, "Ĉar la tridirekta manpremo garantias la kapablon ricevi kaj sendi." Ĉi tiu respondo estas ĝusta, sed ĝi estas nur la supraĵa kialo, ne prezentas la ĉefan kialon. En la sekvanta, mi analizos la kialojn de la triobla manpremo el tri aspektoj por profundigi nian komprenon pri ĉi tiu afero.
La tridirekta manpremo povas efike eviti la inicialigon de historie ripetitaj konektoj (la ĉefa kialo)
La tridirekta manpremo garantias, ke ambaŭ partioj ricevis fidindan komencan sekvencnumeron.
La tridirekta manpremo evitas malŝparon de rimedoj.
Kialo 1: Evitu historiajn duobligitajn kunigojn
Mallonge, la ĉefa kialo por la tridirekta manpremo estas eviti konfuzon kaŭzitan de la inicialigo de malnova duobla konekto. En kompleksa retmedio, la dissendo de datenpakaĵoj ne ĉiam estas sendita al la cela gastiganto laŭ la specifita tempo, kaj malnovaj datenpakaĵoj povas alveni al la cela gastiganto unue pro retŝtopiĝo kaj aliaj kialoj. Por eviti tion, TCP uzas tridirektan manpremon por establi la konekton.
Kiam kliento sendas plurajn SYN-konektajn establpakaĵojn sinsekve, en situacioj kiel retoŝtopiĝo, povas okazi la sekvanta:
1- La malnovaj SYN-pakaĵoj alvenas al la servilo antaŭ la plej novaj SYN-pakaĵoj.
2- La servilo respondos per SYN + ACK-pakaĵeto al la kliento post ricevo de la malnova SYN-pakaĵeto.
3- Kiam la kliento ricevas la SYN + ACK-pakaĵon, ĝi determinas, ke la konekto estas historia konekto (sekvencnumero eksvalidiĝis aŭ tempolimo finiĝis) laŭ sia propra kunteksto, kaj poste sendas la RST-pakaĵon al la servilo por ĉesigi la konekton.
Kun du-manprema konekto, ne eblas determini ĉu la nuna konekto estas historia konekto. La tri-manprema konekto permesas al la kliento determini ĉu la nuna konekto estas historia konekto surbaze de la kunteksto kiam ĝi pretas sendi la trian pakaĵeton:
1- Se temas pri historia konekto (sekvencnumero eksvalidiĝis aŭ templimo finiĝis), la pakaĵeto sendita de la tria manpremo estas RST-pakaĵeto por ĉesigi la historian konekton.
2- Se ĝi ne estas historia konekto, la pakaĵeto sendita por la tria fojo estas ACK-pakaĵeto, kaj la du komunikantaj partioj sukcese establas la konekton.
Tial, la ĉefa kialo, ke TCP uzas la tridirektan manpremon, estas ke ĝi inicialigas la konekton por malhelpi historiajn konektojn.
Kialo 2: Sinkronigi la komencajn sekvencnumerojn de ambaŭ partioj
Ambaŭ flankoj de la TCP-protokolo devas konservi sekvencnumeron, kio estas ŝlosila faktoro por certigi fidindan transdonon. Sekvencnumeroj ludas gravan rolon en TCP-konektoj. Ili faras la jenon:
La ricevilo povas forigi duplikatajn datumojn kaj certigi la precizecon de la datumoj.
La ricevilo povas ricevi pakaĵetojn laŭ la ordo de la sekvencnumero por certigi la integrecon de la datumoj.
● La sekvencnumero povas identigi la datenpakaĵeton ricevitan de la alia partio, ebligante fidindan datentransdonon.
Tial, post establado de TCP-konekto, la kliento sendas SYN-pakaĵetojn kun la komenca sekvencnumero kaj postulas, ke la servilo respondu per ACK-pakaĵeto indikanta sukcesan ricevon de la SYN-pakaĵeto de la kliento. Poste, la servilo sendas la SYN-pakaĵeton kun la komenca sekvencnumero al la kliento kaj atendas, ke la kliento respondu, unufoje por ĉiam, por certigi, ke la komencaj sekvencnumeroj estas fidinde sinkronigitaj.
Kvankam kvarflanka manpremo ankaŭ eblas por fidinde sinkronigi la komencajn sekvencnumerojn de ambaŭ partioj, la dua kaj tria paŝoj povas esti kombinitaj en unu solan paŝon, rezultante en tridirekta manpremo. Tamen, la du manpremoj povas nur garantii, ke la komenca sekvencnumero de unu partio estas sukcese ricevita de la alia partio, sed ne estas garantio, ke la komenca sekvencnumero de ambaŭ partioj povas esti konfirmita. Tial, la tridirekta manpremo estas la plej bona elekto por certigi la stabilecon kaj fidindecon de TCP-konektoj.
Kialo 3: Evitu Malŝpari Rimedojn
Se estas nur "du-manpremo", kiam la klienta SYN-peto estas blokita en la reto, la kliento ne povas ricevi la ACK-pakaĵeton senditan de la servilo, do la SYN estos resendita. Tamen, ĉar ne estas tria manpremo, la servilo ne povas determini ĉu la kliento ricevis ACK-agnoskon por establi la konekton. Tial, la servilo povas nur proaktive establi konekton post ricevo de ĉiu SYN-peto. Tio kondukas al la sekva:
Malŝparo de rimedoj: Se la SYN-peto de la kliento estas blokita, rezultante en ripeta dissendo de pluraj SYN-pakaĵoj, la servilo establos plurajn redundajn malvalidajn konektojn post ricevo de la peto. Tio kondukas al nenecesa malŝparo de servilaj rimedoj.
Mesaĝa reteno: Pro la manko de tria manpremo, la servilo ne havas manieron scii ĉu la kliento ĝuste ricevis la ACK-konfirmon por establi la konekton. Rezulte, se mesaĝoj blokiĝas en la reto, la kliento daŭre sendos SYN-petojn denove kaj denove, kaŭzante ke la servilo konstante establos novajn konektojn. Tio pliigos retŝtopiĝon kaj prokraston kaj negative influos la ĝeneralan retrendimenton.
Tial, por certigi la stabilecon kaj fidindecon de la retkonekto, TCP uzas la tridirektan manpremon por establi la konekton por eviti la okazon de ĉi tiuj problemoj.
Resumo
LaReta Pakaĵa PerantoTCP-konekto-establo okazas per tridirekta manpremo. Dum la tridirekta manpremo, la kliento unue sendas pakaĵeton kun la SYN-flago al la servilo, indikante ke ĝi volas establi konekton. Post ricevo de la peto de la kliento, la servilo respondas pakaĵeton kun la SYN- kaj ACK-flagoj al la kliento, indikante ke la konekto-peto estas akceptita, kaj sendas sian propran komencan sekvencnumeron. Fine, la kliento respondas per ACK-flago al la servilo por indiki ke la konekto estis sukcese establita. Tiel, la du partioj estas en la ESTABLITA stato kaj povas komenci sendi datumojn unu al la alia.
Ĝenerale, la tridirekta manpremo-procezo por establado de TCP-konekto estas desegnita por certigi konekto-stabilecon kaj fidindecon, eviti konfuzon kaj malŝparon de rimedoj super historiaj konektoj, kaj certigi, ke ambaŭ partioj kapablas ricevi kaj sendi datumojn.
Afiŝtempo: Jan-08-2025