TCP -konekta agordo
Kiam ni foliumas la retejon, sendas retpoŝton aŭ ludas interretan ludon, ni ofte ne pensas pri la kompleksa reto -konekto malantaŭ ĝi. Tamen ĉi tiuj ŝajne malgrandaj paŝoj certigas stabilan komunikadon inter ni kaj la servilo. Unu el la plej gravaj paŝoj estas la aranĝo de TCP-konekto, kaj la kerno de ĉi tio estas la tri-mana manplato.
Ĉi tiu artikolo diskutos detale la principon, procezon kaj gravecon de la tri-mana manplato. Paŝo post paŝo, ni klarigos kial necesas la tri-mana manplato, kiel ĝi certigas ligan stabilecon kaj fidindecon, kaj kiom gravas por transdono de datumoj. Kun pli profunda kompreno de la tri-mana manplato, ni akiros pli bonan komprenon pri la subaj mekanismoj de reta komunikado kaj pli klara vido de la fidindeco de TCP-ligoj.
TCP tri-mana manplata procezo kaj ŝtataj transiroj
TCP estas ligo-orientita transporta protokolo, kiu postulas konektan establadon antaŭ transdono de datumoj. Ĉi tiu procezo de establado estas farita per tri-mana manplato.
Ni rigardu pli detale la TCP -pakaĵojn, kiuj estas senditaj en ĉiu rilato.
Komence, ambaŭ la kliento kaj servilo estas fermitaj. Unue, la servilo aktive aŭskultas en haveno kaj estas en la aŭskulta stato, kio signifas, ke la servilo devas esti komencita. Tuj poste, la kliento pretas komenci aliri la retpaĝon. Ĝi bezonas establi rilaton kun la servilo. La formato de la unua konekta pakaĵo estas kiel sekvas:
Kiam kliento iniciatas rilaton, ĝi generas hazardan komencan sekvencan numeron (kliento_isn) kaj lokas ĝin en la "sekvenca nombro" kampo de la TCP -kaplinio. Samtempe, la kliento fiksas la SYN -flagan pozicion al 1 por indiki, ke la eliranta pakaĵo estas SYN -pakaĵo. La kliento indikas, ke ĝi volas establi rilaton kun la servilo sendante la unuan SYN -pakaĵon al la servilo. Ĉi tiu pakaĵo ne enhavas datumojn pri aplikaj tavoloj (tio estas sendita datumoj). Je ĉi tiu punkto, la stato de la kliento estas markita kiel SYN-sendita.
Kiam servilo ricevas SYN -pakaĵon de kliento, ĝi hazarde inicialigas sian propran serian numeron (Server_ISN) kaj tiam metas tiun numeron en la "seria numero" kampo de la TCP -kaplinio. Tuj poste, la servilo eniras klienton_isn + 1 en la kampo "Agnosko-Numero" kaj fiksas ambaŭ bitojn SYN kaj ACK al 1. Fine, la servilo sendas la paketon al la kliento, kiu enhavas neniujn aplikajn tavolajn datumojn (kaj neniujn datumojn por la servilo por sendi). Ĉi-foje, la servilo estas en SYN-RCVD-stato.
Post kiam la kliento ricevas la pakaĵon de la servilo, ĝi devas plenumi la jenajn optimumigojn por respondi al la fina responda pakaĵo: Unue, la kliento fiksas la ACK -iom de la TCP -kaplinio de la responda pakaĵo al 1; Due, la kliento eniras la valoron servilo_isn + 1 en la kampo "Konfirmi Respondan Numeron"; Fine la kliento sendas la pakaĵon al la servilo. Ĉi tiu pakaĵo povas porti datumojn de la kliento al la servilo. Post la kompletigo de ĉi tiuj operacioj, la kliento eniros la establitan staton.
Post kiam la servilo ricevas la respondan pakaĵon de la kliento, ĝi ankaŭ ŝanĝas al la establita stato.
Kiel vi povas vidi el la supra procezo, kiam vi plenumas tri-manan manplaton, la tria manplato rajtas porti datumojn, sed la unuaj du manplatoj ne estas. Jen demando, kiun oni ofte faras en intervjuoj. Post kiam la triflanka manplato estas kompleta, ambaŭ partioj eniras la establitan staton, indikante ke la rilato estis sukcese establita, ĉe kiu punkto la kliento kaj servilo povas komenci sendi datumojn unu al la alia.
Kial tri manplatoj? Ĉu ne dufoje, kvar fojojn?
La komuna respondo estas, "ĉar la tri-mana manplato garantias la kapablon ricevi kaj sendi." Ĉi tiu respondo estas ĝusta, sed ĝi estas nur la surfaca kialo, ne antaŭenigas la ĉefan kialon. En la sekva, mi analizos la kialojn de la triobla manplato el tri aspektoj por profundigi nian komprenon pri ĉi tiu afero.
La tri-mana manplato povas efike eviti la inicializon de historie ripetaj ligoj (la ĉefa kialo)
La triflanka manplato garantias, ke ambaŭ partioj ricevis fidindan komencan sekvencan numeron.
La triflanka manplato evitas malŝpari rimedojn.
Kialo 1: Evitu historiajn duplikatajn aliĝojn
En kelkaj vortoj, la ĉefa kialo de la tri-mana manplato estas eviti konfuzon kaŭzitan de la malnova duobliga ligo-inicialigo. En kompleksa reto -medio, la transdono de datumpakaĵoj ne ĉiam estas sendita al la celloko -gastiganto konforme al la specifita tempo, kaj malnovaj datumpakaĵoj povas alveni al la celloko -gastiganto unue pro reto -kongesto kaj aliaj kialoj. Por eviti tion, TCP uzas tri-manan manplaton por establi la rilaton.
Kiam kliento sendas multoblajn SYN -konektajn pakaĵojn sinsekve, en situacioj kiel reta kongesto, la sekva povas okazi:
1- La malnovaj SYN-pakaĵoj alvenas al la servilo antaŭ la plej novaj SYN-pakaĵoj.
2- La servilo respondos SYN + ACK-pakaĵon al la kliento post ricevado de la malnova SYN-pakaĵo.
3- Kiam la kliento ricevas la SYN + ACK-pakaĵon, ĝi determinas, ke la rilato estas historia konekto (sekvenca nombro eksvalidigita aŭ tempodaŭro) laŭ sia propra kunteksto, kaj tiam sendas la unuan pakaĵon al la servilo por aborti la rilaton.
Kun du-mana ligo, ekzistas neniu maniero determini ĉu la nuna rilato estas historia rilato. La triflanka manplato permesas al la kliento determini ĉu la nuna rilato estas historia rilato bazita sur la kunteksto kiam ĝi pretas sendi la trian pakaĵon:
1- Se ĝi estas historia rilato (sekvenca numero eksvalidiĝis aŭ tempodaŭro), la paketo sendita de la tria manplato estas unua pakaĵo por aborti la historian ligon.
2- Se ĝi ne estas historia rilato, la pakaĵo sendita por la tria fojo estas ACK-pakaĵo, kaj la du komunikantaj partioj sukcese establas la rilaton.
Tial la ĉefa kialo, ke TCP uzas la tri-manan manplaton, estas ke ĝi inicialigas la rilaton por malebligi historiajn ligojn.
Kialo 2: Por sinkronigi la komencajn sekvencajn nombrojn de ambaŭ partioj
Ambaŭ flankoj de la TCP -protokolo devas konservi sekvencan nombron, kio estas ŝlosila faktoro por certigi fidindan transdonon. Sekvencaj nombroj ludas gravan rolon en TCP -ligoj. Ili faras la jenon:
La ricevilo povas forigi duplikatajn datumojn kaj certigi la precizecon de la datumoj.
La ricevilo povas ricevi pakaĵojn laŭ la ordo de la sekvenca nombro por certigi la integrecon de la datumoj.
● La sekvenca nombro povas identigi la datuman pakaĵon ricevitan de la alia partio, ebligante fidindajn datumajn transdono.
Sekve, starigante TCP -konekton, la kliento sendas SYN -pakaĵojn kun la komenca sekvenca numero kaj postulas, ke la servilo respondu per ACK -pakaĵo indikanta sukcesan ricevon de la SYN -pakaĵo de la kliento. Poste, la servilo sendas la SYN -pakaĵon kun la komenca sekvenca numero al la kliento kaj atendas, ke la kliento respondu, unu fojon por ĉiam, por certigi, ke la komencaj sekvencaj nombroj estas fidinde sinkronigitaj.
Kvankam kvarflanka manplato ankaŭ eblas fidinde sinkronigi la komencajn sekvencajn nombrojn de ambaŭ partioj, la dua kaj tria paŝoj povas esti kombinitaj en ununuran paŝon, rezultigante tri-manan manplaton. Tamen, la du manplatoj nur povas garantii, ke la komenca sekvenca nombro de unu partio estas sukcese ricevita de la alia partio, sed estas neniu garantio, ke la komenca sekvenca nombro de ambaŭ partioj povas esti konfirmita. Tial la tri-mana manplato estas la plej bona elekto por certigi la stabilecon kaj fidindecon de TCP-ligoj.
Kialo 3: Evitu malŝpari rimedojn
Se estas nur "du-mana", kiam la kliento SYN-peto estas blokita en la reto, la kliento ne povas ricevi la ACK-pakaĵon senditan de la servilo, do la Syn resentos. Tamen, ĉar ne ekzistas tria manplato, la servilo ne povas determini ĉu la kliento ricevis ACK -agnoskon por establi la rilaton. Tial la servilo nur povas proaktive establi rilaton post ricevado de ĉiu SYN -peto. Ĉi tio kondukas al la jenaj:
Malŝparo de Rimedoj: Se la SYN -peto de la kliento estas blokita, rezultigante ripetan transdonon de multnombraj SYN -pakaĵoj, la servilo starigos multoblajn redundajn nevalidajn ligojn post ricevado de la peto. Ĉi tio kondukas al nenecesa malŝparo de servilaj rimedoj.
Mesaĝa reteno: Pro la manko de tria manplato, la servilo havas neniun manieron scii, ĉu la kliento ĝuste ricevis la agnoskon de ACK por establi la rilaton. Rezulte, se mesaĝoj restas en la reto, la kliento daŭre sendos SYN -petojn denove kaj denove, kaŭzante la servilon konstante establi novajn ligojn. Ĉi tio pliigos retan kongeston kaj prokraston kaj negative influos la ĝeneralan retan rendimenton.
Tial, por certigi la stabilecon kaj fidindecon de la reto-konekto, TCP uzas la tri-manan manplaton por establi la rilaton por eviti la aperon de ĉi tiuj problemoj.
Resumo
LaReto -paka makleristoTCP-konekta establado estas farita per tri-mana manplato. Dum la tri-mana manplato, la kliento unue sendas pakaĵon kun la SYN-flago al la servilo, indikante, ke ĝi volas establi rilaton. Post ricevado de la peto de la kliento, la servilo respondas paketon kun SYN kaj ACK -flagoj al la kliento, indikante ke la konekta peto estas akceptita, kaj sendas sian propran komencan sekvencan numeron. Fine, la kliento respondas per ACK -flago al la servilo por indiki, ke la rilato estis sukcese establita. Tiel, la du partioj estas en la establita stato kaj povas komenci sendi datumojn unu al la alia.
Ĝenerale, la tri-mana mana procezo por TCP-konekta establado estas desegnita por certigi ligan stabilecon kaj fidindecon, eviti konfuzon kaj malŝparon de rimedoj per historiaj ligoj kaj certigi, ke ambaŭ partioj kapablas ricevi kaj sendi datumojn.
Afiŝotempo: Jan-08-2025