Pag -setup ng koneksyon ng TCP
Kapag nagba -browse kami sa web, magpadala ng isang email, o maglaro ng isang online na laro, madalas na hindi namin iniisip ang tungkol sa kumplikadong koneksyon sa network sa likod nito. Gayunpaman, ito ay tila maliit na mga hakbang na matiyak ang matatag na komunikasyon sa pagitan namin at ng server. Ang isa sa mga pinakamahalagang hakbang ay ang pag-setup ng koneksyon ng TCP, at ang core 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 kinakailangan ang three-way handshake, kung paano tinitiyak nito ang katatagan ng koneksyon at pagiging maaasahan, at kung gaano kahalaga ito para sa paglipat ng data. Sa pamamagitan ng isang mas malalim na pag-unawa sa three-way handshake, makakakuha tayo ng isang mas mahusay na pag-unawa sa mga pinagbabatayan na mekanismo ng komunikasyon sa network at isang mas malinaw na pagtingin sa pagiging maaasahan ng mga koneksyon sa TCP.
TCP three-way na proseso ng handshake at mga paglilipat ng estado
Ang TCP ay isang protocol na naka-oriented na transportasyon, na nangangailangan ng pagtatatag ng koneksyon bago ang paghahatid ng data. Ang proseso ng pagtatatag ng koneksyon na ito ay ginagawa ng isang three-way handshake.
Tingnan natin ang mga packet ng TCP na ipinadala sa bawat koneksyon.
Sa una, ang parehong kliyente at server ay sarado. Una, ang server ay aktibong nakikinig sa isang port at nasa estado ng pakikinig, na nangangahulugang dapat magsimula ang server. Susunod, ang kliyente ay handa na upang simulan ang pag -access sa webpage. Kailangan itong magtatag ng isang koneksyon sa server. Ang format ng unang packet ng koneksyon ay ang mga sumusunod:
Kapag sinimulan ng isang kliyente ang isang koneksyon, bumubuo ito ng isang random na paunang numero ng pagkakasunud -sunod (client_isn) at inilalagay ito sa patlang na "Sequence Number" ng header ng TCP. Kasabay nito, itinatakda ng kliyente ang posisyon ng watawat ng SYN sa 1 upang ipahiwatig na ang papalabas na packet ay isang packet ng SYN. Ipinapahiwatig ng kliyente na nais nitong magtatag ng isang 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, ipinadala ang data). Sa puntong ito, ang katayuan ng kliyente ay minarkahan bilang SYN-SENT.
Kapag ang isang server ay tumatanggap ng isang syn packet mula sa isang kliyente, random na sinisimulan ang sarili nitong serial number (Server_ISN) at pagkatapos ay inilalagay ang numero na iyon sa patlang na "Serial Number" ng header ng TCP. Susunod, ang server ay pumapasok sa Client_ISN + 1 sa patlang na "Pagkilala sa Numero" at nagtatakda ng parehong mga syn at ack bits sa 1. Sa wakas, ipinapadala ng server ang packet sa kliyente, na naglalaman ng data ng application-layer (at walang data na ipadala ng server). Sa oras na ito, ang server ay nasa estado ng SYN-RCVD.
Kapag natanggap ng kliyente ang packet mula sa server, kailangan itong gawin ang mga sumusunod na pag -optimize upang tumugon sa panghuling packet ng tugon: Una, itinatakda ng kliyente ang ACK bit ng header ng TCP ng packet ng Reply sa 1; Pangalawa, ang kliyente ay pumapasok sa halaga ng server_isn + 1 sa patlang 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 sa server. Kapag natapos ang mga operasyong ito, papasok ang kliyente sa itinatag na estado.
Kapag natanggap ng server ang packet ng tugon mula sa kliyente, lumipat din ito sa itinatag na estado.
Tulad ng nakikita mo mula sa proseso sa itaas, kapag nagsasagawa ng isang three-way handshake, pinapayagan ang pangatlong handshake na magdala ng data, ngunit ang unang dalawang handshakes ay hindi. Ito ay isang katanungan na madalas na tinatanong sa mga panayam. Kapag kumpleto ang three-way handshake, ang parehong mga partido ay pumasok sa itinatag na estado, na nagpapahiwatig na ang koneksyon ay matagumpay na naitatag, kung saan ang kliyente at server ay maaaring magsimulang magpadala ng data sa bawat isa.
Bakit tatlong handshakes? Hindi dalawang beses, apat na beses?
Ang karaniwang sagot ay, "Dahil ang three-way handshake ay ginagarantiyahan ang kakayahang makatanggap at magpadala." Ang sagot na ito ay tama, ngunit ito lamang ang dahilan sa ibabaw, ay hindi ipinapasa ang pangunahing dahilan. Sa mga sumusunod, susuriin ko ang mga dahilan ng triple handshake mula sa tatlong aspeto upang mapalalim ang aming pag -unawa sa isyung ito.
Ang three-way handshake ay maaaring epektibong maiwasan ang pagsisimula ng mga makasaysayang paulit-ulit na koneksyon (ang pangunahing dahilan)
Ang three-way handshake ay ginagarantiyahan na ang parehong partido ay nakatanggap ng isang maaasahang paunang numero ng pagkakasunud-sunod.
Ang three-way handshake ay nag-iwas sa pag-aaksaya ng mga mapagkukunan.
Dahilan 1: Iwasan ang makasaysayang dobleng pagsali
Sa madaling sabi, ang pangunahing dahilan para sa three-way handshake ay upang maiwasan ang pagkalito na dulot ng lumang pagdoble na pagsisimula ng koneksyon. Sa isang kumplikadong kapaligiran sa network, ang paghahatid ng mga packet ng data ay hindi palaging ipinadala sa host ng patutunguhan alinsunod sa tinukoy na oras, at ang mga lumang packet ng data ay maaaring dumating sa patutunguhan na host dahil sa pagsisikip ng network at iba pang mga kadahilanan. Upang maiwasan ito, ang TCP ay gumagamit ng isang three-way handshake upang maitaguyod ang koneksyon.
Kapag ang isang kliyente ay nagpapadala ng maramihang mga packet ng koneksyon sa koneksyon sa sunud -sunod, sa mga sitwasyon tulad ng pagsisikip ng network, maaaring mangyari ang mga sumusunod:
1- Ang mga lumang packet ng SYN ay dumating sa server bago ang pinakabagong mga packet ng SYN.
2- Tugon ng server ng isang syn + ack packet sa kliyente matapos matanggap ang lumang packet ng SYN.
3- Kapag natanggap ng kliyente ang packet ng SYN + ACK, tinutukoy nito na ang koneksyon ay isang koneksyon sa kasaysayan (nag-expire ang numero ng pagkakasunud-sunod o pag-timeout) ayon sa sarili nitong konteksto, at pagkatapos ay ipinapadala ang RST packet sa server upang i-abort ang koneksyon.
Sa pamamagitan ng isang dalawang kamay na koneksyon, walang paraan upang matukoy kung ang kasalukuyang koneksyon ay isang koneksyon sa kasaysayan. Pinapayagan ng three-way handshake ang kliyente upang matukoy kung ang kasalukuyang koneksyon ay isang koneksyon sa kasaysayan batay sa konteksto kapag handa itong ipadala ang ikatlong packet:
1- Kung ito ay isang makasaysayang koneksyon (ang numero ng pagkakasunud-sunod na nag-expire o oras), ang packet na ipinadala ng ikatlong handshake ay isang packet na RST upang ibagsak ang makasaysayang koneksyon.
2- Kung hindi ito isang koneksyon sa kasaysayan, ang packet na ipinadala sa pangatlong beses ay isang packet ng ACK, at ang dalawang nakikipag-usap na partido ay matagumpay na nagtatag ng koneksyon.
Samakatuwid, ang pangunahing dahilan na ginagamit ng TCP ang three-way handshake ay sinimulan nito ang koneksyon upang maiwasan ang mga koneksyon sa kasaysayan.
Dahilan 2: Upang i -synchronize ang paunang mga numero ng pagkakasunud -sunod ng parehong partido
Ang magkabilang panig ng protocol ng TCP ay dapat mapanatili ang isang numero ng pagkakasunud -sunod, na kung saan ay isang pangunahing kadahilanan upang matiyak ang maaasahang paghahatid. Ang mga numero ng pagkakasunud -sunod ay naglalaro ng isang mahalagang papel sa mga koneksyon sa TCP. Ginagawa nila ang sumusunod:
Maaaring alisin ng tatanggap ang dobleng data at matiyak ang kawastuhan ng data.
Ang tatanggap ay maaaring makatanggap ng mga packet sa pagkakasunud -sunod ng numero ng pagkakasunud -sunod upang matiyak ang integridad ng data.
● Ang pagkakasunud -sunod ng pagkakasunud -sunod ay maaaring makilala ang packet ng data na natanggap ng ibang partido, na nagpapagana ng maaasahang paghahatid ng data.
Samakatuwid, sa pagtatatag ng isang koneksyon sa TCP, ang kliyente ay nagpapadala ng mga packet ng SYN na may paunang numero ng pagkakasunud -sunod at hinihiling ang server na tumugon sa isang ACK packet na nagpapahiwatig ng matagumpay na pagtanggap ng packet ng kliyente. Pagkatapos, ipinapadala ng server ang packet ng SYN na may paunang numero ng pagkakasunud -sunod sa kliyente at naghihintay na tumugon ang kliyente, isang beses at para sa lahat, upang matiyak na ang mga paunang numero ng pagkakasunud -sunod ay maaasahan na naka -synchronize.
Bagaman ang isang apat na daan na handshake ay posible ring mapagkakatiwalaang i-synchronize ang paunang mga numero ng pagkakasunud-sunod ng parehong partido, ang pangalawa at pangatlong mga hakbang ay maaaring pagsamahin sa isang solong hakbang, na nagreresulta sa isang three-way handshake. Gayunpaman, ang dalawang handshakes ay maaari lamang garantiya na ang paunang bilang ng pagkakasunud -sunod ng isang partido ay matagumpay na natanggap ng ibang partido, ngunit walang garantiya na ang paunang pagkakasunud -sunod na bilang ng parehong partido ay maaaring kumpirmahin. Samakatuwid, ang three-way handshake ay ang pinakamahusay na pagpipilian na dapat gawin 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 Client Syn ay naharang sa network, hindi matatanggap ng kliyente ang ACK packet na ipinadala ng server, kaya ang SYN ay magalit. Gayunpaman, dahil walang ikatlong handshake, hindi matukoy ng server kung ang kliyente ay nakatanggap ng isang pagkilala sa ACK upang maitaguyod ang koneksyon. Samakatuwid, ang server ay maaari lamang aktibong magtatag ng isang koneksyon pagkatapos matanggap ang bawat kahilingan sa SYN. Ito ay humahantong sa mga sumusunod:
Basura ng mga mapagkukunan: Kung ang kahilingan ng SYN ng kliyente ay naharang, na nagreresulta sa paulit -ulit na paghahatid ng maraming mga packet ng SYN, ang server ay magtatatag ng maraming kalabisan na hindi wastong koneksyon pagkatapos matanggap ang kahilingan. Ito ay humahantong sa isang hindi kinakailangang basura ng mga mapagkukunan ng server.
Pagpapanatili ng mensahe: Dahil sa kakulangan ng isang ikatlong handshake, ang server ay walang paraan upang malaman kung tama ang natanggap ng kliyente ang pagkilala sa ACK upang maitaguyod ang koneksyon. Bilang isang resulta, kung ang mga mensahe ay natigil sa network, ang kliyente ay patuloy na magpadala ng mga kahilingan sa SYN nang paulit -ulit, na nagiging sanhi ng patuloy na pagtatatag ng server ng mga bagong koneksyon. Dagdagan nito ang pagsisikip ng network at pagkaantala at negatibong nakakaapekto 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 maitaguyod ang koneksyon upang maiwasan ang paglitaw ng mga problemang ito.
Buod
AngNetwork Packet BrokerAng 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 watawat ng SYN sa server, na nagpapahiwatig na nais nitong magtatag ng isang koneksyon. Matapos matanggap ang kahilingan mula sa kliyente, tumugon ang server ng isang packet na may mga watawat ng SYN at ACK sa kliyente, na nagpapahiwatig na tinanggap ang kahilingan ng koneksyon, at nagpapadala ng sariling paunang numero ng pagkakasunud -sunod. Sa wakas, tumugon ang kliyente na may isang watawat ng ACK sa server upang ipahiwatig na ang koneksyon ay matagumpay na naitatag. Kaya, ang dalawang partido ay nasa itinatag na estado at maaaring magsimulang magpadala ng data sa bawat isa.
Sa pangkalahatan, ang proseso ng three-way handshake para sa pagtatatag ng koneksyon ng TCP ay idinisenyo upang matiyak ang katatagan ng koneksyon at pagiging maaasahan, maiwasan ang pagkalito at pag-aaksaya ng mga mapagkukunan sa mga makasaysayang koneksyon, at tiyakin na ang parehong partido ay makatanggap at magpadala ng data.
Oras ng Mag-post: Jan-08-2025