TCP Reliability Transport
Pamilyar tayong lahat sa TCP protocol bilang isang maaasahang transport protocol, ngunit paano nito tinitiyak ang pagiging maaasahan ng transportasyon?
Upang makamit ang maaasahang paghahatid, maraming mga kadahilanan ang kailangang isaalang-alang, tulad ng data corruption, pagkawala, pagdoble, at out-of-order shards. Kung hindi malulutas ang mga problemang ito, hindi makakamit ang maaasahang paghahatid.
Samakatuwid, ang TCP ay gumagamit ng mga mekanismo tulad ng sequence number, acknowledgement reply, resend control, connection management, at window control para makamit ang maaasahang transmission.
Sa papel na ito, tututuon natin ang sliding window, flow control at congestion control ng TCP. Ang mekanismo ng muling pagpapadala ay sakop nang hiwalay sa susunod na seksyon.
Kontrol sa Daloy ng Network
Ang Network Flow Control o kilala bilang Network Traffic Control ay talagang isang manipestasyon ng banayad na relasyon sa pagitan ng mga producer at mga mamimili. Marahil ay marami ka nang nakatagpo ng ganitong senaryo sa trabaho o sa mga panayam. Kung ang kapasidad ng prodyuser na gumawa ay higit na lumampas sa kapasidad ng mamimili na kumonsumo, ito ay magiging sanhi ng paglaki ng pila nang walang katiyakan. Sa isang mas seryosong kaso, maaaring alam mo na kapag ang mga mensahe ng RabbitMQ ay tumambak nang labis, maaari itong magdulot ng pagkasira ng pagganap ng buong MQ server. Ang parehong ay totoo para sa TCP; kung hindi masusuri, napakaraming mensahe ang ilalagay sa network, at ang mga mamimili ay lalampas sa kanilang kapasidad, habang ang mga producer ay patuloy na magpapadala ng mga duplicate na mensahe, na lubos na makakaapekto sa pagganap ng network.
Upang matugunan ang hindi pangkaraniwang bagay na ito, ang TCP ay nagbibigay ng mekanismo para sa nagpadala upang makontrol ang dami ng data na ipinadala batay sa aktwal na kapasidad ng pagtanggap ng receiver, na kilala bilang kontrol sa daloy. Ang receiver ay nagpapanatili ng isang receive window, habang ang nagpadala ay nagpapanatili ng isang send window. Dapat tandaan na ang mga Windows na ito ay para lamang sa isang koneksyon sa TCP at hindi lahat ng koneksyon ay nagbabahagi ng isang window.
Nagbibigay ang TCP ng kontrol sa daloy sa pamamagitan ng paggamit ng variable para sa isang window ng pagtanggap. Ang receive window ay nagbibigay sa nagpadala ng indikasyon kung gaano karaming cache space ang available pa rin. Kinokontrol ng nagpadala ang dami ng data na ipinadala ayon sa aktwal na kapasidad ng pagtanggap ng tatanggap.
Inaabisuhan ng receiver host ang nagpadala ng laki ng data na matatanggap nito, at ang nagpadala ay nagpapadala hanggang sa limitasyong ito. Ang limitasyong ito ay ang laki ng window, tandaan ang TCP header? Mayroong field ng receive window, na ginagamit upang ipahiwatig ang bilang ng mga byte na kaya o gustong tanggapin ng receiver.
Ang sender host ay pana-panahong magpapadala ng isang window probe packet, na ginagamit upang makita kung ang receiver host ay nakakatanggap pa rin ng data. Kapag ang buffer ng receiver ay nasa panganib na umapaw, ang laki ng window ay nakatakda sa isang mas maliit na halaga upang turuan ang nagpadala na kontrolin ang dami ng data na ipinadala.
Narito ang isang Network Flow Control diagram:
Network Congestion Control
Bago ipakilala ang congestion control, kailangan nating maunawaan na bilang karagdagan sa receive window at ang send window, mayroon ding congestion window, na pangunahing ginagamit upang malutas ang problema kung sa anong rate ang nagpadala ay nagsimulang magpadala ng data sa receive window. Samakatuwid, ang window ng pagsisikip ay pinapanatili din ng nagpadala ng TCP. Kailangan namin ng algorithm upang magpasya kung gaano karaming data ang naaangkop na ipadala, dahil ang pagpapadala ng masyadong maliit o masyadong maraming data ay hindi perpekto, kaya ang konsepto ng isang window ng congestion.
Sa nakaraang network flow control, ang iniiwasan namin ay pinupunan ng nagpadala ang cache ng receiver ng data, ngunit hindi namin alam kung ano ang nangyayari sa network. Karaniwan, ang mga network ng computer ay nasa isang nakabahaging kapaligiran. Bilang resulta, maaaring magkaroon ng pagsisikip sa network dahil sa komunikasyon sa pagitan ng iba pang mga host.
Kapag ang network ay masikip, kung ang isang malaking bilang ng mga packet ay patuloy na ipinadala, maaari itong magdulot ng mga problema tulad ng pagkaantala at pagkawala ng mga packet. Sa puntong ito, muling ipapadala ng TCP ang data, ngunit ang muling pagpapadala ay magpapataas ng pasanin sa network, na magreresulta sa mas malalaking pagkaantala at mas maraming pagkawala ng packet. Maaari itong pumasok sa isang mabisyo na ikot at patuloy na lumaki.
Kaya, hindi maaaring balewalain ng TCP ang nangyayari sa network. Kapag masikip ang network, isinasakripisyo ng TCP ang sarili sa pamamagitan ng pagbawas sa dami ng data na ipinapadala nito.
Samakatuwid, iminungkahi ang pagkontrol sa pagsisikip, na naglalayong maiwasan ang pagpuno sa buong network ng data mula sa nagpadala. Upang ayusin ang dami ng data na dapat ipadala ng nagpadala, tinukoy ng TCP ang isang konsepto na tinatawag na congestion window. Isasaayos ng algorithm ng congestion control ang laki ng window ng congestion ayon sa antas ng congestion ng network, upang makontrol ang dami ng data na ipinadala ng nagpadala.
Ano ang congestion window? Ano ang kinalaman nito sa window ng pagpapadala?
Ang Congestion Window ay isang variable ng estado na pinapanatili ng nagpadala na tumutukoy sa dami ng data na maaaring ipadala ng nagpadala. Pabago-bagong nagbabago ang window ng congestion ayon sa antas ng congestion ng network.
Ang Sending Window ay isang napagkasunduang laki ng window sa pagitan ng nagpadala at tagatanggap na nagpapahiwatig ng dami ng data na matatanggap ng tagatanggap. Ang window ng pagsisikip at ang window ng pagpapadala ay magkaugnay; ang window ng pagpapadala ay kadalasang katumbas ng pinakamababa ng congestion at pagtanggap ng Windows, iyon ay, swnd = min(cwnd, rwnd).
Ang cwnd window ng congestion ay nagbabago tulad ng sumusunod:
Kung walang congestion sa network, ibig sabihin, walang retransmission timeout na nagaganap, tumataas ang congestion window.
Kung may congestion sa network, bababa ang congestion window.
Tinutukoy ng nagpadala kung ang network ay masikip sa pamamagitan ng pagmamasid kung ang ACK acknowledgement packet ay natanggap sa loob ng tinukoy na oras. Kung hindi natanggap ng nagpadala ang ACK acknowledgement packet sa loob ng tinukoy na oras, ito ay itinuturing na ang network ay masikip.
Bilang karagdagan sa window ng congestion, oras na para talakayin ang TCP congestion control algorithm. Ang TCP congestion control algorithm ay binubuo ng tatlong pangunahing bahagi:
Mabagal na Simula:Sa una, ang cwnd congestion window ay medyo maliit, at pinapataas ng nagpadala ang congestion window nang exponentially upang mabilis na umangkop sa kapasidad ng network.
Pag-iwas sa Pagsisikip:Matapos lumampas ang window ng congestion sa isang tiyak na threshold, pinapataas ng nagpadala ang window ng congestion sa isang linear na paraan upang pabagalin ang rate ng paglago ng window ng congestion at maiwasan ang labis na karga sa network.
Mabilis na Pagbawi:Kung mangyari ang congestion, hinahati ng nagpadala ang congestion window at papasok sa fast recovery state upang matukoy ang lokasyon ng network recovery sa pamamagitan ng natanggap na duplicate acks, at pagkatapos ay patuloy na tataas ang congestion window.
Mabagal na Simula
Kapag ang isang koneksyon sa TCP ay naitatag, ang congestion window cwnd ay unang nakatakda sa isang minimum na halaga ng MSS (maximum segment size). Sa ganitong paraan, ang paunang rate ng pagpapadala ay tungkol sa MSS/RTT bytes/segundo. Ang aktwal na magagamit na bandwidth ay karaniwang mas malaki kaysa sa MSS/RTT, kaya gusto ng TCP na mahanap ang pinakamainam na rate ng pagpapadala, na maaaring makamit sa pamamagitan ng mabagal na pagsisimula.
Sa mabagal na proseso ng pagsisimula, ang halaga ng congestion window cwnd ay masisimulan sa 1 MSS, at sa bawat oras na ang ipinadalang packet segment ay kinikilala, ang halaga ng cwnd ay tataas ng isang MSS, iyon ay, ang halaga ng cwnd ay magiging 2 MSS. Pagkatapos nito, dinoble ang halaga ng cwnd para sa bawat matagumpay na paghahatid ng isang packet segment, at iba pa. Ang tiyak na proseso ng paglago ay ipinapakita sa sumusunod na figure.
Gayunpaman, ang rate ng pagpapadala ay hindi palaging maaaring tumaas; ang paglago ay kailangang magwakas minsan. Kaya, kailan matatapos ang pagtaas ng rate ng pagpapadala? Karaniwang tinatapos ng mabagal na pagsisimula ang pagtaas sa rate ng pagpapadala sa isa sa ilang paraan:
Ang unang paraan ay ang kaso ng pagkawala ng packet sa panahon ng proseso ng pagpapadala ng mabagal na pagsisimula. Kapag naganap ang pagkawala ng packet, itatakda ng TCP ang congestion window ng nagpadala sa 1 at i-restart ang proseso ng mabagal na pagsisimula. Sa puntong ito, ipinakilala ang isang konsepto ng mabagal na pagsisimula ng threshold ssthresh, na ang paunang halaga ay kalahati ng halaga ng cwnd na bumubuo ng packet loss. Iyon ay, kapag nakita ang congestion, ang halaga ng ssthresh ay kalahati ng halaga ng window.
Ang pangalawang paraan ay ang direktang pag-uugnay sa halaga ng mabagal na pagsisimula na threshold ssthresh. Dahil ang halaga ng ssthresh ay kalahati ng window value kapag natukoy ang congestion, maaaring mangyari ang pagkawala ng packet sa bawat pagdodoble kapag ang cwnd ay mas malaki kaysa sa ssthresh. Samakatuwid, pinakamahusay na itakda ang cwnd sa ssthresh, na magiging sanhi ng TCP na lumipat sa congestion control mode at tapusin ang mabagal na pagsisimula.
Ang huling paraan na maaaring matapos ang mabagal na pagsisimula ay kung may matukoy na tatlong redundant ack, ang TCP ay nagsasagawa ng mabilis na muling pagpapadala at papasok sa recovery state. (Kung hindi malinaw kung bakit mayroong tatlong ACK packet, ipapaliwanag ito nang hiwalay sa mekanismo ng muling pagpapadala.)
Pag-iwas sa Pagsisikip
Kapag ang TCP ay pumasok sa congestion control state, ang cwnd ay nakatakda sa kalahati ng congestion threshold ssthresh. Nangangahulugan ito na ang halaga ng cwnd ay hindi maaaring doblehin sa tuwing natatanggap ang isang packet segment. Sa halip, ang isang medyo konserbatibong diskarte ay pinagtibay kung saan ang halaga ng cwnd ay tataas lamang ng isang MSS (maximum na haba ng segment ng packet) pagkatapos makumpleto ang bawat paghahatid. Halimbawa, kahit na 10 packet segment ang kinikilala, ang halaga ng cwnd ay tataas lang ng isang MSS. Isa itong linear growth model at mayroon din itong upper bound sa growth. Kapag nangyari ang pagkawala ng packet, ang halaga ng cwnd ay binago sa isang MSS, at ang halaga ng ssthresh ay nakatakda sa kalahati ng cwnd. O pipigilan din nito ang paglaki ng MSS kapag natanggap ang 3 redundant na tugon ng ACK. Kung ang tatlong redundant acks ay natanggap pa rin pagkatapos mahati ang halaga ng cwnd, ang halaga ng ssthresh ay itatala bilang kalahati ng halaga ng cwnd at ang fast recovery state ay ipinasok.
Mabilis na Pagbawi
Sa Fast Recovery state, ang halaga ng congestion window cwnd ay tinataasan ng isang MSS para sa bawat natanggap na redundant ACK, iyon ay, ACK na hindi dumating sa pagkakasunud-sunod. Ito ay upang magamit ang mga packet segment na matagumpay na naipadala sa network upang mapabuti ang kahusayan ng paghahatid hangga't maaari.
Kapag dumating ang isang ACK ng nawalang segment ng packet, binabawasan ng TCP ang halaga ng cwnd at pagkatapos ay papasok sa estado ng pag-iwas sa congestion. Ito ay upang makontrol ang laki ng window ng congestion at maiwasan ang higit pang pagtaas ng network congestion.
Kung magkakaroon ng timeout pagkatapos ng congestion control state, ang kundisyon ng network ay nagiging mas malala at ang TCP ay lumilipat mula sa congestion na iwas state sa mabagal na pagsisimula. Sa kasong ito, ang halaga ng cwnd ng congestion window ay nakatakda sa 1 MSS, ang maximum na haba ng segment ng packet, at ang halaga ng threshold ng mabagal na pagsisimula na ssthresh ay nakatakda sa kalahati ng cwnd. Ang layunin nito ay unti-unting palakihin ang laki ng window ng congestion pagkatapos makabawi ang network upang balansehin ang transmission rate at ang antas ng network congestion.
Buod
Bilang isang maaasahang transport protocol, ang TCP ay nagpapatupad ng maaasahang transportasyon ayon sa sequence number, pagkilala, retransmission control, pamamahala ng koneksyon at window control. Kabilang sa mga ito, kinokontrol ng mekanismo ng kontrol ng daloy ang dami ng data na ipinadala ng nagpadala ayon sa aktwal na kapasidad ng pagtanggap ng receiver, na nag-iwas sa mga problema ng network congestion at pagkasira ng pagganap. Iniiwasan ng mekanismo ng congestion control ang paglitaw ng network congestion sa pamamagitan ng pagsasaayos ng dami ng data na ipinadala ng nagpadala. Ang mga konsepto ng congestion window at sending window ay nauugnay sa isa't isa, at ang dami ng data sa nagpadala ay kinokontrol sa pamamagitan ng dynamic na pagsasaayos ng laki ng congestion window. Ang mabagal na pagsisimula, pag-iwas sa pagsisikip at mabilis na pagbawi ay ang tatlong pangunahing bahagi ng TCP congestion control algorithm, na nagsasaayos sa laki ng window ng congestion sa pamamagitan ng iba't ibang diskarte upang umangkop sa kapasidad at antas ng congestion ng network.
Sa susunod na seksyon, susuriin namin nang detalyado ang mekanismo ng muling pagpapadala ng TCP. Ang mekanismo ng muling pagpapadala ay isang mahalagang bahagi ng TCP upang makamit ang maaasahang paghahatid. Tinitiyak nito ang maaasahang pagpapadala ng data sa pamamagitan ng muling pagpapadala ng nawala, sira o naantala na data. Ang prinsipyo ng pagpapatupad at diskarte ng mekanismo ng muling pagpapadala ay ipapakilala at susuriin nang detalyado sa susunod na seksyon. Manatiling nakatutok!
Oras ng post: Peb-24-2025