Ang sikretong sandata ng TCP: Pagkontrol sa Daloy ng Network at Pagkontrol sa Kasikipan ng Network

Transportasyon ng Kahusayan ng TCP
Pamilyar tayong lahat sa TCP protocol bilang isang maaasahang transport protocol, ngunit paano nito tinitiyak ang pagiging maaasahan ng transportasyon?

Upang makamit ang maaasahang transmisyon, maraming salik ang kailangang isaalang-alang, tulad ng pagkasira ng datos, pagkawala, pagdoble, at mga hindi maayos na shard. Kung hindi malulutas ang mga problemang ito, hindi makakamit ang maaasahang transmisyon.

Samakatuwid, ang TCP ay gumagamit ng mga mekanismo tulad ng sequence number, acknowledgement reply, resend control, connection management, at window control upang makamit ang maaasahang transmission.

Sa papel na ito, tututuon tayo sa sliding window, flow control, at congestion control ng TCP. Ang mekanismo ng retransmission ay tatalakayin nang hiwalay sa susunod na seksyon.

Kontrol ng Daloy ng Network
Ang Network Flow Control o kilala bilang Network Traffic Control ay isang manipestasyon ng banayad na ugnayan sa pagitan ng mga prodyuser at mga mamimili. Malamang ay madalas mo nang naranasan ang ganitong sitwasyon 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 walang katapusang paglaki ng pila. Sa mas malubhang kaso, maaaring alam mo na kapag ang mga mensahe ng RabbitMQ ay nakatambak nang labis, maaari itong magdulot ng pagbaba ng performance ng buong MQ server. Ganito rin ang 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 prodyuser ay patuloy na magpapadala ng mga dobleng mensahe, na lubos na makakaapekto sa performance ng network.

Upang matugunan ang penomenong ito, ang TCP ay nagbibigay ng mekanismo para makontrol ng nagpadala ang dami ng data na ipinapadala batay sa aktwal na kapasidad ng pagtanggap ng tagatanggap, na kilala bilang flow control. Ang tagatanggap 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 ng TCP at hindi lahat ng koneksyon ay nagbabahagi ng isang window.

Nagbibigay ang TCP ng kontrol sa daloy gamit ang isang variable para sa isang receive window. Ang receive window ay nagbibigay sa nagpadala ng indikasyon kung gaano pa kalaki ang espasyo sa cache na magagamit. Kinokontrol ng nagpadala ang dami ng data na ipinadala ayon sa aktwal na kapasidad ng pagtanggap ng tagatanggap.

Inaabisuhan ng receiver host ang nagpadala tungkol sa laki ng data na maaari nitong matanggap, at ang nagpadala ay nagpapadala hanggang sa limitasyong ito. Ang limitasyong ito ay ang laki ng window, natatandaan mo ba ang TCP header? Mayroong field na receive window, na ginagamit upang ipahiwatig ang bilang ng mga byte na kaya o gustong matanggap ng receiver.

Pana-panahong magpapadala ang sender host ng window probe packet, na ginagamit upang matukoy kung kaya pa rin ng receiver host na tumanggap ng data. Kapag ang buffer ng receiver ay nasa panganib na umapaw, ang laki ng window ay itinatakda sa mas maliit na halaga upang atasan ang sender na kontrolin ang dami ng data na ipapadala.

Narito ang isang diagram ng Kontrol ng Daloy ng Network:

Kontrol ng Trapiko

Pagkontrol sa Kasikipan ng Network
Bago ipakilala ang congestion control, kailangan nating maunawaan na bukod sa receive window at send window, mayroon ding congestion window, na pangunahing ginagamit upang malutas ang problema kung gaano kabilis nagsisimulang magpadala ng data ang nagpadala sa receive window. Samakatuwid, ang congestion window ay pinapanatili rin ng TCP sender. Kailangan natin ng isang algorithm upang magpasya kung gaano karaming data ang angkop na ipadala, dahil ang pagpapadala ng masyadong kaunti o masyadong maraming data ay hindi perpekto, kaya naman nabuo ang konsepto ng congestion window.

Sa nakaraang pagkontrol sa daloy ng network, ang naiwasan natin ay ang pagpuno ng nagpadala ng data sa cache ng tatanggap, ngunit hindi natin alam kung ano ang nangyayari sa network. Kadalasan, ang mga network ng computer ay nasa isang nakabahaging kapaligiran. Bilang resulta, maaaring magkaroon ng pagsisikip ng network dahil sa komunikasyon sa pagitan ng iba pang mga host.

Kapag ang network ay siksikan, kung patuloy na ipapadala ang isang malaking bilang ng mga packet, 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 packet loss. Maaari itong mauwi sa isang mabisyo na siklo at patuloy na lumaki.

Kaya naman, hindi maaaring balewalain ng TCP ang nangyayari sa network. Kapag siksikan ang network, isinasakripisyo ng TCP ang sarili nito sa pamamagitan ng pagbabawas ng dami ng data na ipinapadala nito.

Samakatuwid, iminumungkahi ang pagkontrol sa pagsisikip, na naglalayong maiwasan ang pagpuno sa buong network ng data mula sa nagpadala. Upang makontrol ang dami ng data na dapat ipadala ng nagpadala, tinutukoy ng TCP ang isang konsepto na tinatawag na congestion window. Aayusin ng congestion control algorithm ang laki ng congestion window ayon sa antas ng congestion ng network, upang makontrol ang dami ng data na ipinapadala ng nagpadala.

Ano ang congestion window? Ano ang kinalaman nito sa send window?

Ang Congestion Window ay isang state variable na pinapanatili ng nagpadala na tumutukoy sa dami ng data na maaaring ipadala ng nagpadala. Ang congestion window ay pabago-bagong nagbabago 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 maaaring matanggap ng tagatanggap. Magkaugnay ang congestion window at ang sending window; ang sending window ay karaniwang katumbas ng minimum ng congestion at receiving Windows, ibig sabihin, swnd = min(cwnd, rwnd).

Ang kondisyon ng congestion window ay nagbabago gaya ng sumusunod:

Kung walang congestion sa network, ibig sabihin, walang retransmission timeout na nangyayari, tataas ang congestion window.

Kung mayroong congestion sa network, bumababa ang congestion window.

Tinutukoy ng nagpadala kung ang network ay congested 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, itinuturing na congested ang network.

Bukod sa congestion window, oras na para talakayin ang TCP congestion control algorithm. Ang TCP congestion control algorithm ay binubuo ng tatlong pangunahing bahagi:

Mabagal na Pagsisimula:Sa una, ang cwnd congestion window ay medyo maliit, at ang nagpadala ay mabilis na pinapataas ang congestion window upang mabilis na umangkop sa kapasidad ng network.
Pag-iwas sa Kasikipan:Kapag lumampas na ang congestion window sa isang tiyak na threshold, pinapataas ng sender ang congestion window sa isang linear na paraan upang mapabagal ang rate ng paglago ng congestion window at maiwasan ang overloading ng network.
Mabilis na Paggaling:Kung magkaroon ng 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 mga duplicate na ack, at pagkatapos ay patuloy na tataasan ang congestion window.

Mabagal na Pagsisimula
Kapag naitatag ang isang koneksyon sa TCP, ang congestion window cwnd ay unang itinatakda sa isang minimum na halaga ng MSS (maximum segment size). Sa ganitong paraan, ang unang sending rate ay humigit-kumulang MSS/RTT bytes/segundo. Ang aktwal na magagamit na bandwidth ay karaniwang mas malaki kaysa sa MSS/RTT, kaya nais ng TCP na mahanap ang pinakamainam na sending rate, na maaaring makamit sa pamamagitan ng slow-start.

Sa proseso ng slow-start, ang halaga ng congestion window cwnd ay ii-initialize sa 1 MSS, at sa bawat pagkakataong kinikilala ang naipadala na packet segment, ang halaga ng cwnd ay tataas ng isang MSS, ibig sabihin, ang halaga ng cwnd ay magiging 2 MSS. Pagkatapos nito, ang halaga ng cwnd ay dinoble para sa bawat matagumpay na pagpapadala ng isang packet segment, at iba pa. Ang partikular na proseso ng paglago ay ipinapakita sa sumusunod na pigura.

 Pagkontrol ng kasikipan ng network

Gayunpaman, hindi laging maaaring lumago ang bilis ng pagpapadala; ang paglago ay kailangang matapos minsan. Kaya, kailan matatapos ang pagtaas ng bilis ng pagpapadala? Karaniwang tinatapos ng mabagal na pagsisimula ang pagtaas ng bilis ng pagpapadala sa isa sa ilang paraan:

Ang unang paraan ay ang kaso ng packet loss habang nagpapadala ng slow start. Kapag nangyari ang packet loss, itinatakda ng TCP ang congestion window cwnd ng nagpadala sa 1 at muling ire-restart ang slow-start process. Sa puntong ito, ipinakikilala ang konsepto ng slow start threshold ssthresh, na ang paunang halaga ay kalahati ng halaga ng cwnd na lumilikha ng packet loss. Ibig sabihin, kapag natukoy ang congestion, ang halaga ng ssthresh ay kalahati ng halaga ng window.

Ang pangalawang paraan ay ang direktang pag-ugnay sa halaga ng slow-start threshold na ssthresh. Dahil ang halaga ng ssthresh ay kalahati ng halaga ng window kapag natukoy ang congestion, maaaring mangyari ang packet loss sa bawat pagdoble kapag ang cwnd ay mas malaki kaysa sa ssthresh. Samakatuwid, pinakamahusay na itakda ang cwnd sa ssthresh, na magiging sanhi ng paglipat ng TCP sa congestion control mode at end slow-start.

Ang huling paraan para matapos ang mabagal na pagsisimula ay kung may madetektang tatlong redundant acks, ang TCP ay magsasagawa ng mabilis na retransmission at papasok sa recovery state. (Kung hindi malinaw kung bakit may tatlong ACK packets, ipapaliwanag ito nang hiwalay sa mekanismo ng retransmission.)

Pag-iwas sa Kasikipan
Kapag ang TCP ay pumasok sa estado ng pagkontrol ng congestion, ang cwnd ay nakatakda sa kalahati ng congestion threshold na ssthresh. Nangangahulugan ito na ang halaga ng cwnd ay hindi maaaring doblehin sa bawat oras na natatanggap ang isang packet segment. Sa halip, isang medyo konserbatibong pamamaraan ang ginagamit kung saan ang halaga ng cwnd ay dinadagdagan lamang ng isang MSS (maximum packet segment length) pagkatapos makumpleto ang bawat transmission. Halimbawa, kahit na 10 packet segment ang kinilala, ang halaga ng cwnd ay tataas lamang ng isang MSS. Ito ay isang linear growth model at mayroon din itong upper bound sa paglago. Kapag nangyari ang packet loss, ang halaga ng cwnd ay binabago sa isang MSS, at ang halaga ng ssthresh ay nakatakda sa kalahati ng cwnd. O ititigil din nito ang paglago ng MSS kapag natanggap ang 3 redundant ACK responses. Kung tatlong redundant acks pa rin ang natatanggap pagkatapos hatiin ang halaga ng cwnd, ang halaga ng ssthresh ay itinatala bilang kalahati ng halaga ng cwnd at ipinasok ang fast recovery state.

Mabilis na Paggaling
Sa estadong Fast Recovery, ang halaga ng congestion window cwnd ay pinapataas ng isang MSS para sa bawat natanggap na redundant ACK, ibig sabihin, ang ACK na hindi dumarating nang sunod-sunod. Ito ay upang magamit ang mga packet segment na matagumpay na naipadala sa network upang mapabuti ang kahusayan ng transmission hangga't maaari.

Kapag dumating ang isang ACK ng nawawalang packet segment, binabawasan ng TCP ang halaga ng cwnd at pagkatapos ay papasok sa estado ng pag-iwas sa congestion. Ito ay upang kontrolin ang laki ng congestion window at maiwasan ang karagdagang pagtaas ng network congestion.

Kung magkakaroon ng timeout pagkatapos ng congestion control state, ang kondisyon ng network ay magiging mas malala at ang TCP ay lilipat mula sa congestion avoidance state patungo sa slow-start state. Sa kasong ito, ang value ng congestion window cwnd ay nakatakda sa 1 MSS, ang maximum packet segment length, at ang value ng slow-start threshold ssthresh ay nakatakda sa kalahati ng cwnd. Ang layunin nito ay unti-unting dagdagan ang laki ng congestion window pagkatapos makabawi ang network upang balansehin ang transmission rate at ang antas ng network congestion.

Buod
Bilang isang maaasahang protocol ng transportasyon, ipinapatupad ng TCP ang maaasahang transportasyon sa pamamagitan ng sequence number, pagkilala, pagkontrol sa muling pagpapadala, pamamahala ng koneksyon, at pagkontrol sa window. Kabilang sa mga ito, kinokontrol ng mekanismo ng pagkontrol ng daloy ang dami ng data na ipinapadala ng nagpadala ayon sa aktwal na kapasidad ng pagtanggap ng tagatanggap, na umiiwas sa mga problema ng pagsisikip ng network at pagbaba ng pagganap. Iniiwasan ng mekanismo ng pagkontrol ng pagsisikip ang paglitaw ng pagsisikip ng network sa pamamagitan ng pagsasaayos ng dami ng data na ipinapadala ng nagpadala. Ang mga konsepto ng congestion window at sending window ay magkaugnay, 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 algorithm ng pagkontrol ng congestion ng TCP, na nag-aayos ng laki ng congestion window sa pamamagitan ng iba't ibang estratehiya upang umangkop sa kapasidad at antas ng pagsisikip ng network.

Sa susunod na seksyon, susuriin natin 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 paghahatid ng data sa pamamagitan ng muling pagpapadala ng nawala, nasira, o naantalang data. Ang prinsipyo at estratehiya ng pagpapatupad ng mekanismo ng muling pagpapadala ay ipakikilala at susuriin nang detalyado sa susunod na seksyon. Manatiling nakaantabay!


Oras ng pag-post: Pebrero 24, 2025