Setup ng Koneksyon ng TCP
Kapag nagba-browse kami sa web, nagpapadala ng email, o naglalaro ng online game, madalas hindi namin iniisip ang kumplikadong koneksyon sa network sa likod nito. Gayunpaman, ang tila maliliit na hakbang na ito ang nagsisiguro ng matatag na komunikasyon sa pagitan namin at ng server. Ang isa sa pinakamahalagang hakbang ay ang pag-setup ng koneksyon sa TCP, at ang pangunahing nito ay ang three-way handshake.
Tatalakayin ng artikulong ito ang prinsipyo, proseso at kahalagahan ng three-way handshake nang detalyado. Hakbang-hakbang, ipapaliwanag namin kung bakit kailangan ang three-way na handshake, kung paano nito tinitiyak ang katatagan at pagiging maaasahan ng koneksyon, at kung gaano ito kahalaga para sa paglipat ng data. Sa mas malalim na pag-unawa sa three-way handshake, magkakaroon tayo ng mas mahusay na pag-unawa sa pinagbabatayan ng mga mekanismo ng komunikasyon sa network at isang mas malinaw na pagtingin sa pagiging maaasahan ng mga koneksyon sa TCP.
TCP Three-way Handshake Process at State Transitions
Ang TCP ay isang koneksyon-oriented na transport protocol, na nangangailangan ng pagtatatag ng koneksyon bago ang paghahatid ng data. Ang proseso ng pagtatatag ng koneksyon na ito ay ginagawa sa pamamagitan ng three-way handshake.
Tingnan natin ang mga TCP packet na ipinadala sa bawat koneksyon.
Sa una, ang client at server ay SARADO. Una, aktibong nakikinig ang server sa isang port at nasa estadong LISTEN, na nangangahulugang dapat na magsimula ang server. Susunod, handa na ang kliyente na simulan ang pag-access sa webpage. Kailangan nitong magtatag ng koneksyon sa server. Ang format ng unang packet ng koneksyon ay ang mga sumusunod:
Kapag nagpasimula ang isang kliyente ng koneksyon, bubuo ito ng random na paunang sequence number (client_isn) at inilalagay ito sa field na "Sequence number" ng TCP header. Kasabay nito, itinatakda ng kliyente ang posisyon ng bandila ng SYN sa 1 upang ipahiwatig na ang papalabas na packet ay isang SYN packet. Ipinapahiwatig ng kliyente na nais nitong magtatag ng koneksyon sa server sa pamamagitan ng pagpapadala ng unang SYN packet sa server. Ang packet na ito ay hindi naglalaman ng data ng layer ng application (iyon ay, data na ipinadala). Sa puntong ito, ang katayuan ng kliyente ay minarkahan bilang SYN-SENT.
Kapag ang isang server ay nakatanggap ng isang SYN packet mula sa isang kliyente, sapalarang sinisimulan nito ang sarili nitong serial number (server_isn) at pagkatapos ay inilalagay ang numerong iyon sa field na "Serial number" ng TCP header. Susunod, ipinasok ng server ang client_isn + 1 sa field na "Acknowledgement number" at itinatakda ang parehong SYN at ACK bits sa 1. Sa wakas, ipinapadala ng server ang packet sa client, na walang data ng application-layer (at walang data para sa server ipadala). Sa oras na ito, ang server ay nasa SYN-RCVD na estado.
Kapag natanggap na ng kliyente ang packet mula sa server, kailangan nitong isagawa ang mga sumusunod na pag-optimize upang tumugon sa packet ng huling tugon: Una, itinatakda ng kliyente ang ACK bit ng TCP header ng reply packet sa 1; Pangalawa, ipinasok ng kliyente ang halaga ng server_isn + 1 sa field na "Kumpirmahin ang numero ng sagot"; Sa wakas, ipinapadala ng kliyente ang packet sa server. Ang packet na ito ay maaaring magdala ng data mula sa kliyente patungo sa server. Sa pagkumpleto ng mga operasyong ito, ang kliyente ay papasok sa ESTABLISHED na estado.
Kapag natanggap ng server ang reply packet mula sa client, lilipat din ito sa ESTABLISHED na estado.
Tulad ng makikita mo mula sa proseso sa itaas, kapag nagsasagawa ng three-way handshake, ang ikatlong handshake ay pinapayagang magdala ng data, ngunit ang unang dalawang handshake ay hindi. Ito ay isang katanungan na madalas itanong sa mga panayam. Kapag nakumpleto na ang three-way handshake, ang parehong partido ay papasok sa ESTABLISHED na estado, na nagpapahiwatig na ang koneksyon ay matagumpay na naitatag, kung saan ang kliyente at server ay maaaring magsimulang magpadala ng data sa isa't isa.
Bakit tatlong handshakes? Hindi dalawang beses, apat na beses?
Ang karaniwang sagot ay, "Dahil ang three-way handshake ay ginagarantiyahan ang kakayahang tumanggap at magpadala." Ang sagot na ito ay tama, ngunit ito ay lamang ang pang-ibabaw na dahilan, ay hindi inilalagay ang pangunahing dahilan. Sa mga sumusunod, susuriin ko ang mga dahilan ng triple handshake mula sa tatlong aspeto upang palalimin ang ating pag-unawa sa isyung ito.
Ang three-way handshake ay epektibong makakaiwas sa pagsisimula ng mga dating paulit-ulit na koneksyon (ang pangunahing dahilan)
Ang three-way handshake ay ginagarantiyahan na ang parehong partido ay nakatanggap ng maaasahang paunang sequence number.
Iniiwasan ng three-way handshake ang pag-aaksaya ng mga mapagkukunan.
Dahilan 1: Iwasan ang Makasaysayang Duplicate na Pagsali
Sa madaling sabi, ang pangunahing dahilan ng three-way na pagkakamay ay upang maiwasan ang kalituhan na dulot ng lumang duplicate na pagsisimula ng koneksyon. Sa isang kumplikadong kapaligiran sa network, ang pagpapadala ng mga data packet ay hindi palaging ipinapadala sa destination host alinsunod sa tinukoy na oras, at ang mga lumang data packet ay maaaring unang dumating sa destination host dahil sa network congestion at iba pang dahilan. Para maiwasan ito, gumagamit ang TCP ng three-way handshake para itatag ang koneksyon.
Kapag ang isang kliyente ay nagpadala ng maramihang SYN connection establishment packets nang sunud-sunod, sa mga sitwasyon tulad ng network congestion, ang mga sumusunod ay maaaring mangyari:
1- Ang mga lumang SYN packet ay dumating sa server bago ang pinakabagong SYN packet.
2- Ang server ay tutugon ng SYN + ACK packet sa kliyente pagkatapos matanggap ang lumang SYN packet.
3- Kapag natanggap ng kliyente ang SYN + ACK packet, tinutukoy nito na ang koneksyon ay isang makasaysayang koneksyon (nag-expire na ang sequence number o timeout) ayon sa sarili nitong konteksto, at pagkatapos ay ipinapadala ang RST packet sa server upang i-abort ang koneksyon.
Sa pamamagitan ng dalawang-kamay na koneksyon, walang paraan upang matukoy kung ang kasalukuyang koneksyon ay isang makasaysayang koneksyon. Ang three-way handshake ay nagbibigay-daan sa kliyente na matukoy kung ang kasalukuyang koneksyon ay isang makasaysayang koneksyon batay sa konteksto kapag handa na itong ipadala ang ikatlong packet:
1- Kung isa itong makasaysayang koneksyon (nag-expire na ang sequence number o timeout), ang packet na ipinadala ng ikatlong handshake ay isang RST packet upang i-abort ang historical connection.
2- Kung hindi ito isang makasaysayang koneksyon, ang packet na ipinadala sa ikatlong pagkakataon ay isang ACK packet, at matagumpay na naitatag ng dalawang nag-uusap na partido ang koneksyon.
Samakatuwid, ang pangunahing dahilan kung bakit ginagamit ng TCP ang three-way na handshake ay ang pagsisimula ng koneksyon upang maiwasan ang mga makasaysayang koneksyon.
Dahilan 2: Upang i-synchronize ang mga unang sequence number ng parehong partido
Ang magkabilang panig ng TCP protocol ay dapat magpanatili ng isang sequence number, na isang mahalagang kadahilanan upang matiyak ang maaasahang paghahatid. Ang mga sequence number ay may mahalagang papel sa mga koneksyon sa TCP. Ginagawa nila ang sumusunod:
Maaaring alisin ng receiver ang duplicate na data at tiyakin ang katumpakan ng data.
Ang receiver ay maaaring makatanggap ng mga packet sa pagkakasunud-sunod ng sequence number upang matiyak ang integridad ng data.
● Maaaring matukoy ng sequence number ang data packet na natanggap ng kabilang partido, na nagpapagana ng maaasahang paghahatid ng data.
Samakatuwid, sa pagtatatag ng isang koneksyon sa TCP, ang kliyente ay nagpapadala ng mga SYN packet na may paunang sequence number at nangangailangan ang server na tumugon sa isang ACK packet na nagpapahiwatig ng matagumpay na pagtanggap ng SYN packet ng kliyente. Pagkatapos, ipinapadala ng server ang SYN packet na may inisyal na sequence number sa kliyente at hinihintay ang client na tumugon, minsan at para sa lahat, upang matiyak na ang mga unang sequence number ay mapagkakatiwalaang naka-synchronize.
Bagama't posible rin ang four-way handshake na mapagkakatiwalaang i-synchronize ang mga unang sequence number ng magkabilang partido, ang pangalawa at pangatlong hakbang ay maaaring pagsamahin sa isang hakbang, na magreresulta sa three-way na handshake. Gayunpaman, ang dalawang pagkakamay ay magagarantiya lamang na ang unang sequence number ng isang partido ay matagumpay na natanggap ng kabilang partido, ngunit walang garantiya na ang unang sequence number ng parehong partido ay maaaring makumpirma. Samakatuwid, ang three-way handshake ay ang pinakamahusay na pagpipilian upang matiyak ang katatagan at pagiging maaasahan ng mga koneksyon sa TCP.
Dahilan 3: Iwasan ang Pag-aaksaya ng Mga Mapagkukunan
Kung mayroon lamang isang "two-handshake", kapag ang kahilingan ng kliyente na SYN ay na-block sa network, ang kliyente ay hindi makakatanggap ng ACK packet na ipinadala ng server, kaya ang SYN ay mapapagalitan. Gayunpaman, dahil walang pangatlong handshake, hindi matukoy ng server kung nakatanggap ang kliyente ng ACK acknowledgement upang maitatag ang koneksyon. Samakatuwid, ang server ay maaari lamang aktibong magtatag ng isang koneksyon pagkatapos matanggap ang bawat kahilingan ng SYN. Ito ay humahantong sa mga sumusunod:
Pag-aaksaya ng mga mapagkukunan: Kung ang kahilingan ng SYN ng kliyente ay naharang, na nagreresulta sa paulit-ulit na paghahatid ng maramihang mga packet ng SYN, ang server ay magtatatag ng maraming kalabisan na di-wastong koneksyon pagkatapos matanggap ang kahilingan. Ito ay humahantong sa isang hindi kinakailangang pag-aaksaya ng mga mapagkukunan ng server.
Pagpapanatili ng mensahe: Dahil sa kakulangan ng pangatlong pagkakamay, ang server ay walang paraan upang malaman kung tama ang natanggap ng kliyente ng ACK acknowledgement upang maitatag ang koneksyon. Bilang resulta, kung ang mga mensahe ay natigil sa network, ang kliyente ay patuloy na magpapadala ng mga kahilingan sa SYN nang paulit-ulit, na nagiging sanhi ng server na patuloy na magtatag ng mga bagong koneksyon. Papataasin nito ang pagsisikip at pagkaantala ng network at negatibong makakaapekto sa pangkalahatang pagganap ng network.
Samakatuwid, upang matiyak ang katatagan at pagiging maaasahan ng koneksyon sa network, ginagamit ng TCP ang three-way handshake upang maitatag ang koneksyon upang maiwasan ang paglitaw ng mga problemang ito.
Buod
AngBroker ng Network PacketAng pagtatatag ng koneksyon ng TCP ay ginagawa gamit ang isang three-way handshake. Sa panahon ng three-way handshake, ang kliyente ay unang nagpapadala ng isang packet na may flag ng SYN sa server, na nagpapahiwatig na nais nitong magtatag ng isang koneksyon. Pagkatapos matanggap ang kahilingan mula sa kliyente, ang server ay tumugon sa isang packet na may SYN at ACK na mga flag sa kliyente, na nagpapahiwatig na ang kahilingan sa koneksyon ay tinatanggap, at nagpapadala ng sarili nitong unang sequence number. Sa wakas, ang kliyente ay tumugon sa isang ACK flag sa server upang ipahiwatig na ang koneksyon ay matagumpay na naitatag. Kaya, ang dalawang partido ay nasa ESTABLISHED na estado at maaaring magsimulang magpadala ng data sa isa't isa.
Sa pangkalahatan, ang proseso ng three-way handshake para sa pagtatatag ng koneksyon ng TCP ay idinisenyo upang matiyak ang katatagan at pagiging maaasahan ng koneksyon, maiwasan ang pagkalito at pag-aaksaya ng mga mapagkukunan sa mga makasaysayang koneksyon, at matiyak na ang parehong partido ay makakatanggap at makakapagpadala ng data.
Oras ng post: Ene-08-2025