Usanidi wa Muunganisho wa TCP
Tunapovinjari wavuti, kutuma barua pepe, au kucheza mchezo mtandaoni, mara nyingi hatufikirii kuhusu muunganisho tata wa mtandao ulio nyuma yake. Hata hivyo, ni hatua hizi zinazoonekana kuwa ndogo zinazohakikisha mawasiliano thabiti kati yetu na seva. Mojawapo ya hatua muhimu zaidi ni usanidi wa muunganisho wa TCP, na kiini cha hili ni kupeana mikono kwa pande tatu.
Makala haya yatajadili kwa undani kanuni, mchakato na umuhimu wa salamu ya mikono ya pande tatu. Hatua kwa hatua, tutaelezea kwa nini salamu ya mikono ya pande tatu inahitajika, jinsi inavyohakikisha uthabiti na uaminifu wa muunganisho, na jinsi ilivyo muhimu kwa uhamishaji data. Kwa uelewa wa kina wa salamu ya mikono ya pande tatu, tutapata uelewa bora wa mifumo ya msingi ya mawasiliano ya mtandao na mtazamo wazi wa uaminifu wa miunganisho ya TCP.
Mchakato wa Kushikana Mikono kwa Njia Tatu wa TCP na Mabadiliko ya Hali
TCP ni itifaki ya usafiri inayolenga muunganisho, ambayo inahitaji uanzishaji wa muunganisho kabla ya uwasilishaji wa data. Mchakato huu wa uanzishaji wa muunganisho unafanywa kwa kupeana mikono kwa pande tatu.
Hebu tuangalie kwa undani zaidi pakiti za TCP zinazotumwa katika kila muunganisho.
Mwanzoni, mteja na seva ZIMEFUNGWA. Kwanza, seva husikiliza kikamilifu kwenye mlango na iko katika hali ya SIKILIZA, ambayo ina maana kwamba seva lazima ianzishwe. Kisha, mteja yuko tayari kuanza kufikia ukurasa wa wavuti. Inahitaji kuanzisha muunganisho na seva. Umbizo la pakiti ya kwanza ya muunganisho ni kama ifuatavyo:
Mteja anapoanzisha muunganisho, hutoa nambari ya mfuatano wa awali bila mpangilio (mteja_isn) na kuiweka katika sehemu ya "Nambari ya Mfuatano" ya kichwa cha TCP. Wakati huo huo, mteja huweka nafasi ya bendera ya SYN hadi 1 ili kuonyesha kwamba pakiti inayotoka ni pakiti ya SYN. Mteja anaonyesha kwamba anataka kuanzisha muunganisho na seva kwa kutuma pakiti ya kwanza ya SYN kwenye seva. Pakiti hii haina data ya safu ya programu (yaani, data iliyotumwa). Katika hatua hii, hali ya mteja imewekwa alama kama SYN-SENT.
Seva inapopokea pakiti ya SYN kutoka kwa mteja, huanzisha nambari yake ya serial (server_isn) bila mpangilio na kisha huweka nambari hiyo katika sehemu ya "Nambari ya Serial" ya kichwa cha TCP. Kisha, seva huingiza client_isn + 1 katika sehemu ya "Nambari ya Shukrani" na kuweka biti za SYN na ACK kuwa 1. Hatimaye, seva hutuma pakiti kwa mteja, ambayo haina data ya safu ya programu (na hakuna data ya seva kutuma). Kwa wakati huu, seva iko katika hali ya SYN-RCVD.
Mara tu mteja anapopokea pakiti kutoka kwa seva, inahitaji kufanya uboreshaji ufuatao ili kujibu pakiti ya mwisho ya majibu: Kwanza, mteja anaweka sehemu ya ACK ya kichwa cha TCP cha pakiti ya majibu kuwa 1; Pili, mteja anaingiza thamani server_isn + 1 katika sehemu ya "Thibitisha nambari ya jibu"; Hatimaye, mteja hutuma pakiti kwenye seva. Pakiti hii inaweza kubeba data kutoka kwa mteja hadi kwenye seva. Baada ya shughuli hizi kukamilika, mteja ataingia katika hali ILIYOSIMAMA.
Mara tu seva inapopokea kifurushi cha majibu kutoka kwa mteja, pia hubadilika hadi hali ESTABLISHED.
Kama unavyoona kutoka kwa mchakato hapo juu, wakati wa kufanya salamu ya mikono ya pande tatu, salamu ya tatu inaruhusiwa kubeba data, lakini salamu mbili za kwanza haziruhusiwi. Hili ni swali ambalo mara nyingi huulizwa katika mahojiano. Mara tu salamu ya mikono ya pande tatu ikikamilika, pande zote mbili huingia katika hali ILIYOSIMAMA, ikionyesha kwamba muunganisho umeanzishwa kwa mafanikio, ambapo mteja na seva wanaweza kuanza kutuma data kwa kila mmoja.
Kwa nini kushikana mikono mara tatu? Sio mara mbili, mara nne?
Jibu la kawaida ni, "Kwa sababu salamu ya pande tatu inahakikisha uwezo wa kupokea na kutuma." Jibu hili ni sahihi, lakini ni sababu ya juu juu tu, haitoi sababu kuu. Katika yafuatayo, nitachambua sababu za salamu ya pande tatu kutoka vipengele vitatu ili kuongeza uelewa wetu wa suala hili.
Kusalimiana kwa njia tatu kunaweza kuepuka kwa ufanisi kuanzishwa kwa miunganisho inayojirudia kihistoria (sababu kuu)
Kusalimiana kwa pande tatu kunahakikisha kwamba pande zote mbili zimepokea nambari ya mfuatano wa awali inayoaminika.
Kusalimiana kwa pande tatu huepuka kupoteza rasilimali.
Sababu ya 1: Epuka Kujiunga kwa Nakala za Kihistoria
Kwa kifupi, sababu kuu ya kushikana mikono kwa njia tatu ni kuepuka mkanganyiko unaosababishwa na uanzishaji wa muunganisho wa zamani unaorudiwa. Katika mazingira tata ya mtandao, uwasilishaji wa pakiti za data hautumiwi kila wakati kwa mwenyeji wa mwisho kulingana na wakati uliowekwa, na pakiti za data za zamani zinaweza kufika kwa mwenyeji wa mwisho kwanza kwa sababu ya msongamano wa mtandao na sababu zingine. Ili kuepuka hili, TCP hutumia kushikana mikono kwa njia tatu ili kuanzisha muunganisho.
Mteja anapotuma pakiti nyingi za uanzishaji wa muunganisho wa SYN mfululizo, katika hali kama vile msongamano wa mtandao, yafuatayo yanaweza kutokea:
1- Pakiti za zamani za SYN hufika kwenye seva kabla ya pakiti za hivi karibuni za SYN.
2- Seva itajibu pakiti ya SYN + ACK kwa mteja baada ya kupokea pakiti ya zamani ya SYN.
3- Mteja anapopokea pakiti ya SYN + ACK, huamua kwamba muunganisho ni muunganisho wa kihistoria (nambari ya mfuatano imeisha muda wake au muda wake umeisha) kulingana na muktadha wake, na kisha hutuma pakiti ya RST kwenye seva ili kukatiza muunganisho.
Kwa muunganisho wa kupeana mikono mara mbili, hakuna njia ya kubaini kama muunganisho wa sasa ni muunganisho wa kihistoria. Kupeana mikono kwa njia tatu humruhusu mteja kubaini kama muunganisho wa sasa ni muunganisho wa kihistoria kulingana na muktadha unapokuwa tayari kutuma pakiti ya tatu:
1- Ikiwa ni muunganisho wa kihistoria (nambari ya mfuatano imeisha muda wake au muda wake umeisha), pakiti iliyotumwa na salamu ya tatu ni pakiti ya RST ili kukomesha muunganisho wa kihistoria.
2- Ikiwa si muunganisho wa kihistoria, pakiti iliyotumwa kwa mara ya tatu ni pakiti ya ACK, na pande mbili zinazowasiliana zinafanikiwa kuanzisha muunganisho.
Kwa hivyo, sababu kuu ya TCP kutumia salamu ya mikono ya pande tatu ni kwamba inaanzisha muunganisho ili kuzuia miunganisho ya kihistoria.
Sababu ya 2: Kusawazisha nambari za mlolongo wa awali wa pande zote mbili
Pande zote mbili za itifaki ya TCP lazima zidumishe nambari ya mfuatano, ambayo ni jambo muhimu ili kuhakikisha uwasilishaji wa kuaminika. Nambari za mfuatano zina jukumu muhimu katika miunganisho ya TCP. Zinafanya yafuatayo:
Mpokeaji anaweza kuondoa data inayorudiwa na kuhakikisha usahihi wa data.
Mpokeaji anaweza kupokea pakiti kwa mpangilio wa nambari ya mlolongo ili kuhakikisha uadilifu wa data.
● Nambari ya mfuatano inaweza kutambua pakiti ya data ambayo imepokelewa na mhusika mwingine, na kuwezesha uwasilishaji wa data unaoaminika.
Kwa hivyo, baada ya kuanzisha muunganisho wa TCP, mteja hutuma pakiti za SYN zenye nambari ya mfuatano wa awali na humtaka seva kujibu kwa pakiti ya ACK inayoonyesha upokeaji mzuri wa pakiti ya SYN ya mteja. Kisha, seva hutuma pakiti ya SYN yenye nambari ya mfuatano wa awali kwa mteja na kusubiri mteja ajibu, mara moja na kwa wote, ili kuhakikisha kwamba nambari za mfuatano wa awali zimesawazishwa kwa uhakika.
Ingawa salamu ya pande nne pia inawezekana kusawazisha kwa uhakika nambari za mfuatano wa awali wa pande zote mbili, hatua ya pili na ya tatu zinaweza kuunganishwa katika hatua moja, na kusababisha salamu ya pande tatu. Hata hivyo, salamu hizo mbili zinaweza tu kuhakikisha kwamba nambari ya mfuatano wa awali wa upande mmoja imepokelewa kwa mafanikio na upande mwingine, lakini hakuna uhakika kwamba nambari ya mfuatano wa awali wa pande zote mbili inaweza kuthibitishwa. Kwa hivyo, salamu ya pande tatu ndiyo chaguo bora zaidi la kuchukua ili kuhakikisha uthabiti na uaminifu wa miunganisho ya TCP.
Sababu ya 3: Epuka Kupoteza Rasilimali
Ikiwa kuna "kushikana mikono miwili" pekee, wakati ombi la SYN la mteja limezuiwa kwenye mtandao, mteja hawezi kupokea pakiti ya ACK iliyotumwa na seva, kwa hivyo SYN itarejeshwa. Hata hivyo, kwa kuwa hakuna kushikana mikono mara ya tatu, seva haiwezi kubaini kama mteja alipokea uthibitisho wa ACK ili kuanzisha muunganisho. Kwa hivyo, seva inaweza kuanzisha muunganisho kwa njia ya kiotomatiki baada ya kupokea kila ombi la SYN. Hii inasababisha yafuatayo:
Upotevu wa rasilimali: Ikiwa ombi la SYN la mteja litazuiwa, na kusababisha utumaji unaorudiwa wa pakiti nyingi za SYN, seva itaanzisha miunganisho mingi isiyo sahihi baada ya kupokea ombi. Hii husababisha upotevu usio wa lazima wa rasilimali za seva.
Uhifadhi wa ujumbe: Kutokana na ukosefu wa kushikana mikono mara ya tatu, seva haina njia ya kujua kama mteja alipokea uthibitisho wa ACK kwa usahihi ili kuanzisha muunganisho. Kwa hivyo, ikiwa ujumbe utakwama kwenye mtandao, mteja ataendelea kutuma maombi ya SYN mara kwa mara, na kusababisha seva kuanzisha miunganisho mipya kila mara. Hii itaongeza msongamano wa mtandao na kuchelewa na kuathiri vibaya utendaji wa jumla wa mtandao.
Kwa hivyo, ili kuhakikisha uthabiti na uaminifu wa muunganisho wa mtandao, TCP hutumia salamu ya pande tatu ili kuanzisha muunganisho ili kuepuka kutokea kwa matatizo haya.
Muhtasari
YaDalali wa Pakiti za MtandaoUanzishaji wa muunganisho wa TCP hufanywa kwa kupeana mikono kwa njia tatu. Wakati wa kupeana mikono kwa njia tatu, mteja hutuma kwanza pakiti yenye bendera ya SYN kwa seva, ikionyesha kwamba inataka kuanzisha muunganisho. Baada ya kupokea ombi kutoka kwa mteja, seva hujibu pakiti yenye bendera za SYN na ACK kwa mteja, ikionyesha kwamba ombi la muunganisho limekubaliwa, na hutuma nambari yake ya awali ya mfuatano. Hatimaye, mteja hujibu kwa bendera ya ACK kwa seva ili kuonyesha kwamba muunganisho umeanzishwa kwa mafanikio. Kwa hivyo, pande hizo mbili ziko katika hali ILIYOANZISHWA na zinaweza kuanza kutuma data kwa kila mmoja.
Kwa ujumla, mchakato wa kupeana mikono kwa pande tatu kwa ajili ya uanzishaji wa muunganisho wa TCP umeundwa ili kuhakikisha uthabiti na uaminifu wa muunganisho, kuepuka mkanganyiko na upotevu wa rasilimali kuhusu miunganisho ya kihistoria, na kuhakikisha kwamba pande zote mbili zina uwezo wa kupokea na kutuma data.
Muda wa chapisho: Januari-08-2025






