Mga Pangunahing Misteryo ng Network Packet Broker TCP Connections: Pinaliwanag ang pangangailangan para sa Triple Handshake

Pag-setup ng Koneksyon ng TCP
Kapag nagba-browse tayo sa web, nagpapadala ng email, o naglalaro ng online game, madalas hindi natin naiisip ang masalimuot na koneksyon sa network sa likod nito. Gayunpaman, ang tila maliliit na hakbang na ito ang siyang nagsisiguro ng matatag na komunikasyon sa pagitan natin at ng server. Isa sa mga pinakamahalagang hakbang ay ang pag-setup ng koneksyon sa TCP, at ang pangunahing layunin nito ay ang three-way handshake.

Tatalakayin nang detalyado ng artikulong ito ang prinsipyo, proseso, at kahalagahan ng three-way handshake. Unti-unti naming ipapaliwanag kung bakit kailangan ang three-way handshake, kung paano nito tinitiyak ang katatagan at pagiging maaasahan ng koneksyon, at kung gaano ito kahalaga para sa paglilipat ng data. Sa pamamagitan ng mas malalim na pag-unawa sa three-way handshake, magkakaroon tayo ng mas mahusay na pag-unawa sa mga pinagbabatayang mekanismo ng komunikasyon sa network at mas malinaw na pananaw sa pagiging maaasahan ng mga koneksyon sa TCP.

Proseso ng TCP Three-way Handshake at mga Paglilipat ng Estado
Ang TCP ay isang connection-oriented transport protocol, na nangangailangan ng pagtatatag ng koneksyon bago ang pagpapadala ng data. Ang prosesong ito ng pagtatatag ng koneksyon ay ginagawa sa pamamagitan ng isang three-way handshake.

 Tatlong-daan na pakikipagkamay sa TCP

Tingnan natin nang mas malapitan ang mga TCP packet na ipinapadala sa bawat koneksyon.

Sa una, parehong SARADO ang client at server. Una, aktibong nakikinig ang server sa isang port at nasa LISTEN state, na nangangahulugang dapat simulan ang server. Susunod, handa na ang client na simulan ang pag-access sa webpage. Kailangan nitong magtatag ng koneksyon sa server. Ang format ng unang connection packet ay ang mga sumusunod:

 Pakete ng SYN

Kapag nagsimula ang isang kliyente ng isang koneksyon, bubuo ito ng isang random na initial sequence number (client_isn) at inilalagay ito sa field na "Sequence number" ng TCP header. Kasabay nito, itinatakda ng kliyente ang posisyon ng SYN flag 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 application layer (ibig sabihin, data na ipinadala). Sa puntong ito, ang status ng kliyente ay minarkahan bilang SYN-SENT.

Pakete ng SYN+ACK

Kapag nakatanggap ang isang server ng SYN packet mula sa isang client, random nitong ini-initialize ang sarili nitong serial number (server_isn) at pagkatapos ay inilalagay ang numerong iyon sa field na "Serial number" ng TCP header. Susunod, inilalagay ng server ang client_isn + 1 sa field na "Acknowledgement number" at itinatakda ang parehong SYN at ACK bits sa 1. Panghuli, ipinapadala ng server ang packet sa client, na walang naglalaman ng data ng application-layer (at walang data na maipapadala ng server). Sa oras na ito, ang server ay nasa estadong SYN-RCVD.

Pakete ng ACK

Kapag natanggap na ng client ang packet mula sa server, kailangan nitong isagawa ang mga sumusunod na pag-optimize upang tumugon sa panghuling reply packet: Una, itinatakda ng client ang ACK bit ng TCP header ng reply packet sa 1; Pangalawa, inilalagay ng client ang halagang server_isn + 1 sa field na "Confirm answer number"; Panghuli, ipapadala ng client ang packet sa server. Maaaring magdala ang packet na ito ng data mula sa client patungo sa server. Pagkatapos makumpleto ang mga operasyong ito, papasok ang client sa estadong ESTABLISHED.

Kapag natanggap na ng server ang reply packet mula sa client, lilipat din ito sa ESTABLISHED state.

Gaya ng makikita mo 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 tanong na madalas itanong sa mga panayam. Kapag nakumpleto na ang three-way handshake, ang parehong partido ay papasok sa estadong ESTABLISHED, na nagpapahiwatig na ang koneksyon ay matagumpay na naitatag, kung saan ang client at server ay maaaring magsimulang magpadala ng data sa isa't isa.

Bakit tatlong beses makipagkamay? Hindi dalawang beses, apat na beses?
Ang karaniwang sagot ay, "Dahil ang three-way handshake ay ginagarantiyahan ang kakayahang tumanggap at magpadala." Tama ang sagot na ito, ngunit ito ay ang pang-ibabaw na dahilan lamang, hindi nito inilalahad ang pangunahing dahilan. Sa mga susunod, susuriin ko ang mga dahilan para sa triple handshake mula sa tatlong aspeto upang mapalalim ang ating pag-unawa sa isyung ito.

Ang three-way handshake ay epektibong makakaiwas sa pagsisimula ng mga koneksyon na paulit-ulit sa kasaysayan (ang pangunahing dahilan)
Ginagarantiya ng three-way handshake na ang magkabilang panig ay nakatanggap ng maaasahang paunang numero ng pagkakasunod-sunod.
Ang three-way handshake ay nakakaiwas sa pag-aaksaya ng mga mapagkukunan.

Dahilan 1: Iwasan ang mga Makasaysayang Duplicate na Pagsali
Sa madaling salita, ang pangunahing dahilan ng three-way handshake ay upang maiwasan ang kalituhan na dulot ng lumang duplicate connection initialization. Sa isang komplikadong network environment, ang pagpapadala ng data packets ay hindi laging ipinapadala sa destination host alinsunod sa itinakdang oras, at ang mga lumang data packets ay maaaring unang makarating sa destination host dahil sa network congestion at iba pang mga dahilan. Upang maiwasan ito, gumagamit ang TCP ng three-way handshake upang maitatag ang koneksyon.

Iniiwasan ng three-way handshake ang mga makasaysayang duplicate na koneksyon

Kapag ang isang kliyente ay nagpadala ng maraming SYN connection establishment packets nang sunud-sunod, sa mga sitwasyon tulad ng network congestion, maaaring mangyari ang mga sumusunod:

1- Ang mga lumang SYN packet ay dumarating sa server bago ang mga pinakabagong SYN packet.
2- Magrereply ang server ng SYN + ACK packet sa client 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 ihinto ang koneksyon.

Sa isang two-handshake connection, walang paraan upang matukoy kung ang kasalukuyang koneksyon ay isang historical connection. Ang three-way handshake ay nagbibigay-daan sa kliyente na matukoy kung ang kasalukuyang koneksyon ay isang historical connection batay sa konteksto kung kailan ito handa nang ipadala ang ikatlong packet:

1- Kung ito ay isang makasaysayang koneksyon (nag-expire na o nag-timeout na ang sequence number), ang packet na ipinadala ng ikatlong handshake ay isang RST packet upang ihinto ang makasaysayang koneksyon.
2- Kung hindi ito isang makasaysayang koneksyon, ang packet na ipinadala sa ikatlong pagkakataon ay isang ACK packet, at matagumpay na naitatag ng dalawang partido na nag-uusap ang koneksyon.

Samakatuwid, ang pangunahing dahilan kung bakit ginagamit ng TCP ang three-way handshake ay dahil sinisimulan nito ang koneksyon upang maiwasan ang mga makasaysayang koneksyon.

Dahilan 2: Para i-synchronize ang mga unang numero ng pagkakasunod-sunod ng magkabilang panig
Ang magkabilang panig ng TCP protocol ay dapat magpanatili ng sequence number, na isang mahalagang salik upang matiyak ang maaasahang transmisyon. Ang mga sequence number ay may mahalagang papel sa mga koneksyon ng TCP. Ginagawa nila ang mga sumusunod:

Maaaring alisin ng tagatanggap ang mga dobleng datos at matiyak ang katumpakan ng datos.

Maaaring tumanggap ang receiver ng mga packet ayon sa pagkakasunod-sunod ng sequence number upang matiyak ang integridad ng data.

● Matutukoy ng sequence number ang data packet na natanggap ng kabilang partido, na nagbibigay-daan sa maaasahang pagpapadala ng data.

Samakatuwid, sa sandaling maitatag ang isang koneksyon sa TCP, ang kliyente ay magpapadala ng mga SYN packet na may paunang sequence number at hihilingin sa server na tumugon gamit ang isang ACK packet na nagpapahiwatig ng matagumpay na pagtanggap ng SYN packet ng kliyente. Pagkatapos, ipapadala ng server ang SYN packet na may paunang sequence number sa kliyente at hihintayin ang tugon ng kliyente, nang isang beses at para sa lahat, upang matiyak na ang mga paunang sequence number ay maaasahang naka-synchronize.

I-synchronize ang mga unang serial number ng magkabilang panig

Bagama't posible ring mapagkakatiwalaang i-synchronize ang mga unang sequence number ng magkabilang panig gamit ang four-way handshake, maaaring pagsamahin ang pangalawa at pangatlong hakbang sa iisang hakbang, na magreresulta sa isang three-way handshake. Gayunpaman, ang dalawang handshake ay maaari lamang garantiya na ang unang sequence number ng isang panig ay matagumpay na matatanggap ng kabilang panig, ngunit walang garantiya na ang unang sequence number ng magkabilang panig ay makumpirma. Samakatuwid, ang three-way handshake ang pinakamahusay na pagpipilian upang matiyak ang katatagan at pagiging maaasahan ng mga koneksyon ng TCP.

Dahilan 3: Iwasan ang Pag-aaksaya ng mga Mapagkukunan
Kung mayroon lamang "two-handshake", kapag ang kahilingan ng SYN ng kliyente ay naharang sa network, hindi matatanggap ng kliyente ang ACK packet na ipinadala ng server, kaya ang SYN ay ipapadala muli. Gayunpaman, dahil walang ikatlong handshake, hindi matutukoy ng server kung nakatanggap ang kliyente ng pagkilala sa ACK upang maitatag ang koneksyon. Samakatuwid, ang server ay maaari lamang aktibong magtatag ng 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 magreresulta sa paulit-ulit na pagpapadala ng maraming SYN packet, ang server ay magtatatag ng maraming paulit-ulit na hindi wastong koneksyon pagkatapos matanggap ang kahilingan. Ito ay humahantong sa hindi kinakailangang pag-aaksaya ng mga mapagkukunan ng server.

Pagpapanatili ng mensahe: Dahil sa kawalan ng ikatlong pakikipagkamay, walang paraan ang server para malaman kung tama bang natanggap ng client ang ACK acknowledgement para maitatag ang koneksyon. Bilang resulta, kung ang mga mensahe ay ma-stuck sa network, ang client ay patuloy na magpapadala ng mga SYN request nang paulit-ulit, na magiging sanhi ng patuloy na pagtatatag ng server ng mga bagong koneksyon. Ito ay magpapataas ng congestion at pagkaantala ng network at negatibong makakaapekto sa pangkalahatang performance ng network.

Iwasan ang pag-aaksaya ng mga mapagkukunan

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 Pakete ng NetworkAng pagtatatag ng koneksyon ng TCP ay ginagawa sa pamamagitan ng isang three-way handshake. Sa panahon ng three-way handshake, unang magpapadala ang client ng isang packet na may SYN flag sa server, na nagpapahiwatig na gusto nitong magtatag ng koneksyon. Matapos matanggap ang kahilingan mula sa client, ang server ay sumasagot ng isang packet na may SYN at ACK flags sa client, na nagpapahiwatig na ang kahilingan sa koneksyon ay tinanggap, at nagpapadala ng sarili nitong inisyal na sequence number. Panghuli, ang client ay sumasagot gamit ang isang ACK flag sa server upang ipahiwatig na ang koneksyon ay matagumpay na naitatag. Sa gayon, ang dalawang partido ay nasa estado ng ESTABLISHED 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 kalituhan at pag-aaksaya ng mga mapagkukunan sa mga makasaysayang koneksyon, at matiyak na ang parehong partido ay makakatanggap at makakapagpadala ng data.


Oras ng pag-post: Enero-08-2025