TCP uzticamības transports
Mēs visi esam pazīstami ar TCP protokolu kā uzticamu transporta protokolu, bet kā tas nodrošina transporta uzticamību?
Lai panāktu uzticamu pārraidi, jāņem vērā daudzi faktori, piemēram, datu bojājumi, zudumi, dublēšanās un nesakārtoti fragmenti. Ja šīs problēmas nevar atrisināt, uzticamu pārraidi nevar panākt.
Tāpēc TCP izmanto tādus mehānismus kā secības numurs, apstiprinājuma atbilde, atkārtotas nosūtīšanas kontrole, savienojumu pārvaldība un logu kontrole, lai panāktu uzticamu pārraidi.
Šajā rakstā mēs pievērsīsimies TCP slīdošajam logam, plūsmas kontrolei un sastrēgumu kontrolei. Retranslācijas mehānisms ir aplūkots atsevišķi nākamajā sadaļā.
Tīkla plūsmas kontrole
Tīkla plūsmas kontrole jeb tīkla datplūsmas kontrole patiesībā ir smalku attiecību izpausme starp ražotājiem un patērētājiem. Jūs, iespējams, esat daudz saskārušies ar šo scenāriju darbā vai intervijās. Ja ražotāja ražošanas jauda ievērojami pārsniedz patērētāja patēriņa jaudu, tas izraisīs rindas bezgalīgu pieaugumu. Nopietnākā gadījumā jūs, iespējams, zināt, ka, ja RabbitMQ ziņojumi uzkrājas pārāk daudz, tas var izraisīt visa MQ servera veiktspējas pasliktināšanos. Tas pats attiecas uz TCP; ja tas netiek kontrolēts, tīklā tiks ievietots pārāk daudz ziņojumu, un patērētāji būs pārsnieguši savu jaudu, savukārt ražotāji turpinās sūtīt dublētus ziņojumus, kas ievērojami ietekmēs tīkla veiktspēju.
Lai risinātu šo parādību, TCP nodrošina mehānismu, ar kura palīdzību sūtītājs var kontrolēt nosūtīto datu apjomu, pamatojoties uz uztvērēja faktisko uztveršanas jaudu, ko sauc par plūsmas kontroli. Uztvērējs uztur saņemšanas logu, bet sūtītājs — nosūtīšanas logu. Jāatzīmē, ka šie logi ir paredzēti tikai vienam TCP savienojumam, un ne visi savienojumi koplieto logu.
TCP nodrošina plūsmas kontroli, izmantojot mainīgo saņemšanas logam. Saņemšanas logs sniedz sūtītājam norādi par to, cik daudz kešatmiņas vietas vēl ir pieejama. Sūtītājs kontrolē nosūtīto datu apjomu atbilstoši saņēmēja faktiskajai pieņemšanas jaudai.
Saņēmējs paziņo sūtītājam par saņemamo datu apjomu, un sūtītājs nosūta datus līdz šim ierobežojumam. Šis ierobežojums ir loga izmērs, atceraties TCP galveni? Ir saņemšanas loga lauks, kas tiek izmantots, lai norādītu baitu skaitu, ko uztvērējs spēj vai vēlas saņemt.
Sūtītāja resursdators periodiski nosūtīs loga pārbaudes paketi, kas tiek izmantota, lai noteiktu, vai saņēmēja resursdators joprojām spēj pieņemt datus. Kad saņēmēja buferis draud pārpildīties, loga izmērs tiek iestatīts uz mazāku vērtību, lai norādītu sūtītājam kontrolēt nosūtāmo datu apjomu.
Šeit ir tīkla plūsmas vadības diagramma:
Tīkla pārslodzes kontrole
Pirms ieviest pārslodzes kontroli, mums jāsaprot, ka papildus saņemšanas logam un nosūtīšanas logam pastāv arī pārslodzes logs, kas galvenokārt tiek izmantots, lai atrisinātu problēmu, ar kādu ātrumu sūtītājs sāk sūtīt datus uz saņemšanas logu. Tāpēc pārslodzes logu uztur arī TCP sūtītājs. Mums ir nepieciešams algoritms, lai izlemtu, cik daudz datu ir lietderīgi nosūtīt, jo pārāk maza vai pārāk liela datu daudzuma nosūtīšana nav ideāli, tāpēc radās pārslodzes loga jēdziens.
Iepriekšējā tīkla plūsmas kontrolē mēs izvairījāmies no tā, ka sūtītājs piepilda saņēmēja kešatmiņu ar datiem, taču nezinājām, kas notiek tīklā. Parasti datoru tīkli atrodas koplietotā vidē. Tā rezultātā var rasties tīkla pārslodze saziņas dēļ starp citiem resursdatoriem.
Ja tīkls ir pārslogots un turpina sūtīt lielu skaitu pakešu, tas var radīt tādas problēmas kā pakešu aizkave un zudums. Šajā brīdī TCP atkārtoti pārsūtīs datus, taču atkārtota pārsūtīšana palielinās tīkla slodzi, kā rezultātā radīsies lielākas aizkaves un pakešu zudumi. Tas var nonākt apburtajā lokā un turpināt pieaugt.
Tādējādi TCP nevar ignorēt tīklā notiekošo. Kad tīkls ir pārslogots, TCP upurē sevi, samazinot nosūtāmo datu apjomu.
Tāpēc tiek ierosināta pārslodzes kontrole, kuras mērķis ir izvairīties no visa tīkla piepildīšanas ar sūtītāja datiem. Lai regulētu datu apjomu, ko sūtītājam jānosūta, TCP definē jēdzienu, ko sauc par pārslodzes logu. Pārslodzes kontroles algoritms pielāgos pārslodzes loga lielumu atbilstoši tīkla pārslodzes pakāpei, lai kontrolētu sūtītāja nosūtīto datu apjomu.
Kas ir pārslodzes logs? Kāda tam ir saistība ar sūtīšanas logu?
Pārslodzes logs ir sūtītāja uzturēts stāvokļa mainīgais, kas nosaka datu apjomu, ko sūtītājs var nosūtīt. Pārslodzes logs dinamiski mainās atkarībā no tīkla pārslodzes līmeņa.
Sūtīšanas logs ir loga lielums, par kuru vienojas sūtītājs un saņēmējs, un tas norāda datu apjomu, ko saņēmējs var saņemt. Pārslodzes logs un sūtīšanas logs ir saistīti; sūtīšanas logs parasti ir vienāds ar pārslodzes un saņemšanas logu minimumu, tas ir, swnd = min(cwnd, rwnd).
Sastrēgumu loga vērtība cwnd mainās šādi:
Ja tīklā nav pārslodzes, t. i., nav atkārtotas pārraides taimauta, pārslodzes logs palielinās.
Ja tīklā ir pārslodze, pārslodzes logs samazinās.
Sūtītājs nosaka, vai tīkls ir pārslogots, novērojot, vai ACK apstiprinājuma pakete ir saņemta noteiktajā laikā. Ja sūtītājs nesaņem ACK apstiprinājuma paketi noteiktajā laikā, tiek uzskatīts, ka tīkls ir pārslogots.
Papildus pārslodzes logam ir pienācis laiks apspriest TCP pārslodzes kontroles algoritmu. TCP pārslodzes kontroles algoritms sastāv no trim galvenajām daļām:
Lēna sākšana:Sākotnēji cwnd pārslodzes logs ir relatīvi mazs, un sūtītājs eksponenciāli palielina pārslodzes logu, lai ātri pielāgotos tīkla jaudai.
Sastrēgumu novēršana:Pēc tam, kad pārslodzes logs pārsniedz noteiktu slieksni, sūtītājs lineāri palielina pārslodzes logu, lai palēninātu pārslodzes loga pieauguma tempu un izvairītos no tīkla pārslodzes.
Ātra atveseļošanās:Ja rodas pārslodze, sūtītājs samazina pārslodzes logu uz pusi un pāriet ātrās atkopšanas stāvoklī, lai noteiktu tīkla atkopšanas atrašanās vietu, izmantojot saņemtos dublētos apstiprinājumus, un pēc tam turpina palielināt pārslodzes logu.
Lēna sākšana
Kad tiek izveidots TCP savienojums, pārslodzes logs cwnd sākotnēji tiek iestatīts uz minimālo MSS (maksimālā segmenta izmēra) vērtību. Tādā veidā sākotnējais sūtīšanas ātrums ir aptuveni MSS/RTT baiti sekundē. Faktiskais pieejamais joslas platums parasti ir daudz lielāks nekā MSS/RTT, tāpēc TCP vēlas atrast optimālo sūtīšanas ātrumu, ko var panākt, izmantojot lēno palaišanu.
Lēnās palaišanas procesā pārslodzes loga cwnd vērtība tiks inicializēta uz 1 MSS, un katru reizi, kad pārraidītais pakešu segments tiek apstiprināts, cwnd vērtība tiks palielināta par vienu MSS, tas ir, cwnd vērtība kļūs par 2 MSS. Pēc tam cwnd vērtība tiek dubultota par katru veiksmīgu pakešu segmenta pārraidi utt. Konkrētais pieauguma process ir parādīts nākamajā attēlā.
Tomēr sūtīšanas ātrums ne vienmēr var pieaugt; pieaugumam kādreiz ir jābeidzas. Tātad, kad sūtīšanas ātruma pieaugums beidzas? Lēna sākšanās parasti aptur sūtīšanas ātruma pieaugumu vienā no vairākiem veidiem:
Pirmais veids ir pakešu zuduma gadījums lēnas palaišanas sūtīšanas procesā. Kad notiek pakešu zudums, TCP iestata sūtītāja sastrēguma logu cwnd uz 1 un restartē lēnas palaišanas procesu. Šajā brīdī tiek ieviests lēnas palaišanas sliekšņa ssthresh jēdziens, kura sākotnējā vērtība ir puse no cwnd vērtības, kas rada pakešu zudumu. Tas ir, kad tiek konstatēta sastrēgums, ssthresh vērtība ir puse no loga vērtības.
Otrais veids ir tieši korelēt ar lēnas palaišanas sliekšņa ssthresh vērtību. Tā kā ssthresh vērtība sastrēguma noteikšanas brīdī ir puse no loga vērtības, pakešu zudums var rasties ar katru dubultošanos, ja cwnd ir lielāks par ssthresh. Tāpēc vislabāk ir iestatīt cwnd uz ssthresh, kas liks TCP pārslēgties uz sastrēgumu kontroles režīmu un beigt lēnu palaišanu.
Pēdējais veids, kā lēnā sākšana var beigties, ir trīs lieku apstiprinājumu (ACK) noteikšana, kad TCP veic ātru atkārtotu pārraidi un pāriet atkopšanas stāvoklī. (Ja nav skaidrs, kāpēc ir trīs ACK paketes, tas tiks atsevišķi paskaidrots atkārtotas pārraides mehānismā.)
Sastrēgumu novēršana
Kad TCP pāriet pārslodzes kontroles stāvoklī, cwnd tiek iestatīts uz pusi no pārslodzes sliekšņa ssthresh. Tas nozīmē, ka cwnd vērtību nevar dubultot katru reizi, kad tiek saņemts pakešu segments. Tā vietā tiek izmantota relatīvi konservatīva pieeja, kurā cwnd vērtība tiek palielināta tikai par vienu MSS (maksimālais pakešu segmenta garums) pēc katras pārraides pabeigšanas. Piemēram, pat ja tiek apstiprināti 10 pakešu segmenti, cwnd vērtība palielināsies tikai par vienu MSS. Šis ir lineārs izaugsmes modelis, un tam ir arī augšējā izaugsmes robeža. Kad notiek pakešu zudums, cwnd vērtība tiek mainīta uz MSS, un ssthresh vērtība tiek iestatīta uz pusi no cwnd. Vai arī tas apturēs MSS pieaugumu, kad tiks saņemtas 3 liekas ACK atbildes. Ja pēc cwnd vērtības samazināšanas uz pusi joprojām tiek saņemtas trīs liekas apstiprināšanas atbildes, ssthresh vērtība tiek reģistrēta kā puse no cwnd vērtības, un tiek pārslēgts ātrās atkopšanas stāvoklis.
Ātra atveseļošanās
Ātrās atkopšanas stāvoklī pārslodzes loga cwnd vērtība tiek palielināta par vienu MSS par katru saņemto lieko ACK, t. i., ACK, kas neierodas secībā. Tas tiek darīts, lai izmantotu tīklā veiksmīgi pārsūtītos pakešu segmentus, lai pēc iespējas uzlabotu pārraides efektivitāti.
Kad pienāk pazaudētā paketes segmenta ACK, TCP samazina cwnd vērtību un pēc tam pāriet pārslodzes novēršanas stāvoklī. Tas tiek darīts, lai kontrolētu pārslodzes loga lielumu un izvairītos no turpmākas tīkla pārslodzes palielināšanās.
Ja pēc pārslodzes kontroles stāvokļa iestājas taimauts, tīkla stāvoklis kļūst nopietnāks un TCP migrē no pārslodzes novēršanas stāvokļa uz lēnas palaišanas stāvokli. Šajā gadījumā pārslodzes loga cwnd vērtība tiek iestatīta uz 1 MSS, kas ir maksimālais pakešu segmenta garums, un lēnas palaišanas sliekšņa ssthresh vērtība tiek iestatīta uz pusi no cwnd. Šīs metodes mērķis ir pakāpeniski palielināt pārslodzes loga lielumu pēc tīkla atjaunošanās, lai līdzsvarotu pārraides ātrumu un tīkla pārslodzes pakāpi.
Kopsavilkums
Kā uzticams transporta protokols TCP īsteno uzticamu transportu pēc secības numura, apstiprināšanas, retranslācijas kontroles, savienojumu pārvaldības un logu kontroles. Starp tiem plūsmas kontroles mehānisms kontrolē sūtītāja nosūtīto datu apjomu atbilstoši saņēmēja faktiskajai uztveršanas jaudai, tādējādi novēršot tīkla pārslodzes un veiktspējas pasliktināšanās problēmas. Pārslodzes kontroles mehānisms novērš tīkla pārslodzes rašanos, pielāgojot sūtītāja nosūtīto datu apjomu. Pārslodzes loga un sūtīšanas loga jēdzieni ir savstarpēji saistīti, un datu apjoms sūtītājā tiek kontrolēts, dinamiski pielāgojot pārslodzes loga lielumu. Lēna sākšana, pārslodzes novēršana un ātra atkopšana ir trīs galvenās TCP pārslodzes kontroles algoritma daļas, kas pielāgo pārslodzes loga lielumu, izmantojot dažādas stratēģijas, lai pielāgotos tīkla jaudai un pārslodzes pakāpei.
Nākamajā sadaļā mēs detalizēti aplūkosim TCP retranslācijas mehānismu. Retranslācijas mehānisms ir svarīga TCP sastāvdaļa, lai panāktu uzticamu pārraidi. Tas nodrošina uzticamu datu pārraidi, atkārtoti pārraidot pazaudētus, bojātus vai aizkavētus datus. Retranslācijas mehānisma ieviešanas princips un stratēģija tiks detalizēti iepazīstināta un analizēta nākamajā sadaļā. Sekojiet līdzi jaunumiem!
Publicēšanas laiks: 2025. gada 24. februāris