TCP'ның яшерен коралы: челтәр агымын контрольдә тоту һәм челтәр тыгызлыгын контрольдә тоту

TCP ышанычлылыгы транспорты
Без барыбыз да TCP протоколын ышанычлы транспорт протоколы буларак беләбез, ләкин ул транспортның ышанычлылыгын ничек тәэмин итә?

Ышанычлы тапшыруга ирешү өчен, мәгълүматларның бозылуы, югалуы, кабатлануы һәм тәртиптән чыгуы кебек күп факторларны исәпкә алырга кирәк. Әгәр бу проблемаларны хәл итеп булмаса, ышанычлы тапшыруга ирешеп булмый.

Шуңа күрә, TCP ышанычлы тапшыруга ирешү өчен эзлеклелек номеры, раслау җавабы, кабат җибәрүне контрольдә тоту, тоташуны идарә итү һәм тәрәзәне контрольдә тоту кебек механизмнарны куллана.

Бу мәкаләдә без TCP'ның тайпылыш тәрәзәсенә, агым контроленә һәм тыгызлыкны контрольдә тотуга игътибар итәчәкбез. Ретрансляция механизмы киләсе бүлектә аерым карала.

Челтәр агымын контрольдә тоту
Челтәр агымын контрольдә тоту яки челтәр трафигын контрольдә тоту дип атала, чынлыкта, җитештерүчеләр һәм кулланучылар арасындагы нечкә мөнәсәбәтләрнең чагылышы. Сез, мөгаен, бу сценарий белән эштә яки интервьюларда еш очрашкансыздыр. Әгәр җитештерүченең җитештерү мөмкинлеге кулланучының куллану мөмкинлегеннән күпкә артып китсә, бу чиратның чиксез артуына китерәчәк. Җитдирәк очракта, сез RabbitMQ хәбәрләре артык күп җыелса, бу бөтен MQ серверының эшчәнлеген начарайтырга мөмкин икәнен беләсездер. TCP өчен дә шул ук хәл; тикшерелмәсә, челтәргә артык күп хәбәрләр җибәреләчәк, һәм кулланучылар үз мөмкинлекләрен арттырачаклар, ә җитештерүчеләр кабатланган хәбәрләр җибәрүне дәвам итәчәкләр, бу челтәр эшчәнлегенә зур йогынты ясаячак.

Бу күренешне хәл итү өчен, TCP җибәрүчегә җибәрелгән мәгълүмат күләмен кабул итүченең чын кабул итү сыйдырышлыгына нигезләнеп контрольдә тоту механизмын тәкъдим итә, ул агым контроле дип атала. Алучы кабул итү тәрәзәсен саклый, ә җибәрүче җибәрү тәрәзәсен саклый. Шунысын да билгеләп үтәргә кирәк, бу тәрәзәләр бары тик бер TCP тоташуы өчен генә, һәм барлык тоташулар да бер тәрәзәне уртаклашмый.

TCP кабул итү тәрәзәсе өчен үзгәрүчән кулланып, агымны контрольдә тота. Кабул итү тәрәзәсе җибәрүчегә кэш урынының күпме булуы турында мәгълүмат бирә. Җибәрүче җибәрелгән мәгълүмат күләмен кабул итүченең чын кабул итү сыйдырышлыгына карап контрольдә тота.

Кабул итүче хосты җибәрүчегә ала алырлык мәгълүмат күләме турында хәбәр итә, һәм җибәрүче бу чиккә кадәр җибәрә. Бу чик - тәрәзә зурлыгы, TCP башлыгын хәтерлисезме? Кабул итүче ала алырлык яки алырга теләгән байтлар санын күрсәтү өчен кулланыла торган кабул итү тәрәзәсе кыры бар.

Җибәрүче хосты вакыт-вакыт тәрәзә зонд пакетын җибәрә, ул кабул итүче хостының әле дә мәгълүмат кабул итә алу-алмавын ачыклау өчен кулланыла. Алучы буферы тулып китү куркынычы астында булганда, җибәрүчегә җибәрелгән мәгълүмат күләмен контрольдә тотарга күрсәтмә бирү өчен тәрәзә зурлыгы кечерәк кыйммәткә билгеләнә.

Менә челтәр агымын контрольдә тоту схемасы:

Юл хәрәкәтен контрольдә тоту

Челтәр тыгызлыгын контрольдә тоту
Тыгынны контрольдә тотуны кертү алдыннан, без кабул итү тәрәзәсеннән һәм җибәрү тәрәзәсеннән тыш, тыгылу тәрәзәсе дә барлыгын аңларга тиешбез, ул, нигездә, җибәрүченең кабул итү тәрәзәсенә нинди тизлектә мәгълүмат җибәрә башлавы мәсьәләсен хәл итү өчен кулланыла. Шуңа күрә тыгылу тәрәзәсен TCP җибәрүче дә саклый. Безгә күпме мәгълүмат җибәрергә яраклы икәнен хәл итү өчен алгоритм кирәк, чөнки артык аз яки артык күп мәгълүмат җибәрү идеаль түгел, шуңа күрә тыгылу тәрәзәсе концепциясе барлыкка килә.

Элеккеге челтәр агымын контрольдә тотуда без җибәрүченең кабул итүченең кэшын мәгълүмат белән тутыруыннан качтык, ләкин без челтәрдә нәрсә булганын белмәдек. Гадәттә, компьютер челтәрләре уртак мохиттә була. Нәтиҗәдә, башка хостлар арасындагы элемтә аркасында челтәрдә тыгызлык булырга мөмкин.

Челтәр тыгыз булганда, күп санлы пакетлар җибәрелү дәвам итсә, бу тоткарлану һәм пакетлар югалу кебек проблемаларга китерергә мөмкин. Бу вакытта TCP мәгълүматларны яңадан җибәрәчәк, ләкин яңадан җибәрү челтәргә йөкләнешне арттырачак, нәтиҗәдә тоткарланулар зуррак булачак һәм пакетлар югалтулары арта. Бу начар циклга эләгергә һәм зурая барырга мөмкин.

Шулай итеп, TCP челтәрдә нәрсә булганын игътибарсыз калдыра алмый. Челтәр тыгыз булганда, TCP җибәрелгән мәгълүмат күләмен киметү белән үзен корбан итә.

Шуңа күрә, җибәрүчедән килгән мәгълүмат белән бөтен челтәрне тутырмаска юнәлтелгән тыгызлыкны контрольдә тоту тәкъдим ителә. Җибәрүче җибәрергә тиешле мәгълүмат күләмен көйләү өчен, TCP тыгызлык тәрәзәсе дип аталган төшенчәне билгели. Тыгылуны контрольдә тоту алгоритмы тыгызлык тәрәзәсенең зурлыгын челтәрнең тыгызлык дәрәҗәсенә карап көйләячәк, шуның белән җибәрүче җибәргән мәгълүмат күләмен контрольдә тотачак.

Тыгылу тәрәзәсе нәрсә ул? Моның җибәрү тәрәзәсе белән нинди бәйләнеше бар?

Тыгын тәрәзәсе - җибәрүче тарафыннан саклана торган һәм җибәрүче җибәрә алырлык мәгълүмат күләмен билгели торган халәт үзгәрүчәнлеге. Тыгын тәрәзәсе челтәрнең тыгылу дәрәҗәсенә карап динамик рәвештә үзгәрә.

Җибәрү тәрәзәсе - җибәрүче һәм алучы арасында килешенгән тәрәзә зурлыгы, ул алучы ала алырлык мәгълүмат күләмен күрсәтә. Тыгылу тәрәзәсе һәм җибәрү тәрәзәсе үзара бәйле; җибәрү тәрәзәсе гадәттә тыгылу һәм алучы тәрәзәләрнең минималь күләменә тигез, ягъни swnd = min(cwnd, rwnd).

Тыгын тәрәзәсе cwnd түбәндәгечә үзгәрә:

Әгәр челтәрдә тыгылу булмаса, ягъни кабат тапшыру вакыты булмаса, тыгылу тәрәзәсе арта.

Әгәр челтәрдә тыгызлык булса, тыгызлык тәрәзәсе кими.

Җибәрүче ACK раслау пакеты билгеләнгән вакыт эчендә алынганмы-юкмы икәнен күзәтеп, челтәрнең тыгыз булуын билгели. Әгәр җибәрүче билгеләнгән вакыт эчендә ACK раслау пакетын алмаса, бу челтәрнең тыгыз булуы дип санала.

Тыгын тәрәзәсеннән тыш, TCP тыгызлыгын контрольдә тоту алгоритмын да тикшерергә вакыт җитте. TCP тыгызлыгын контрольдә тоту алгоритмы өч төп өлештән тора:

Әкрен башлау:Башта cwnd тыгызлык тәрәзәсе чагыштырмача кечкенә, һәм җибәрүче челтәр сыйдырышлыгына тиз җайлашу өчен тыгызлык тәрәзәсен экспоненциаль рәвештә арттыра.
Тыгынны булдырмау:Тыгын тәрәзәсе билгеле бер чиктән артып киткәннән соң, җибәрүче тыгызлык тәрәзәсенең үсеш темпын әкренәйтү һәм челтәрне артык йөкләүдән саклау өчен тыгызлык тәрәзәсен сызыклы рәвештә арттыра.
Тиз торгызылу:Әгәр тыгызлык барлыкка килсә, җибәрүче тыгызлык тәрәзәсен яртыга киметә һәм тиз торгызылу халәтенә керә, алынган кабатланган хәбәрләр аша челтәрне торгызу урынын билгели, аннары тыгызлык тәрәзәсен арттыра бара.

Әкрен башлау
TCP тоташуы урнаштырылганда, cwnd тыгызлык тәрәзәсе башта минималь MSS (максимум сегмент зурлыгы) кыйммәтенә куела. Шулай итеп, башлангыч җибәрү тизлеге якынча MSS/RTT байт/секунд тәшкил итә. Чынлыкта мөмкин булган полоса киңлеге гадәттә MSS/RTT дан күпкә зуррак, шуңа күрә TCP оптималь җибәрү тизлеген табарга тели, моңа әкрен башлау ярдәмендә ирешеп була.

Әкрен башлау процессында, тыгызлык тәрәзәсенең cwnd кыйммәте 1 MSS ка инициализацияләнәчәк, һәм тапшырылган пакет сегменты һәр тапкыр расланганда, cwnd кыйммәте бер MSS ка арта, ягъни cwnd кыйммәте 2 MSS булачак. Шуннан соң, пакет сегментының һәр уңышлы тапшырылуы өчен cwnd кыйммәте икеләтә арта, һ.б. Үсеш процессының үзенчәлекләре түбәндәге рәсемдә күрсәтелгән.

 Челтәр тыгызлыгын контрольдә тоту

Ләкин җибәрү тизлеге һәрвакытта да үсә алмый; үсеш кайчан да булса тәмамланырга тиеш. Димәк, җибәрү тизлегенең артуы кайчан тәмамлана? Әкрен башлау гадәттә җибәрү тизлегенең артуын берничә ысул белән туктата:

Беренче ысул - әкрен башлау җибәрү процессында пакет югалу очрагы. Пакет югалганда, TCP җибәрүченең тыгызлык тәрәзәсендә cwndны 1гә куя һәм әкрен башлау процессын яңадан башлый. Бу ноктада әкрен башлау бусагасы ssthresh концепциясе кертелә, аның башлангыч кыйммәте пакет югалуын китереп чыгаручы cwnd кыйммәтенең яртысына тигез. Ягъни, тыгызлык ачыкланганда, ssthresh кыйммәте тәрәзә кыйммәтенең яртысына тигез.

Икенче ысул - әкрен башлану бусагасы ssthresh кыйммәте белән турыдан-туры корреляцияләү. Тыгын ачыкланганда ssthresh кыйммәте тәрәзә кыйммәтенең яртысы булганлыктан, cwnd ssthreshтан зуррак булганда, һәр икеләтә арту белән пакет югалырга мөмкин. Шуңа күрә, cwndны ssthresh итеп кую яхшырак, бу TCPның тыгылуны контрольдә тоту режимына күчүенә һәм әкрен башлануны туктатуына китерәчәк.

Әкрен башлауның соңгы тәмамлану ысулы - өч артык ACK ачыкланган очракта, TCP тиз кабат тапшыру башкара һәм торгызу халәтенә керә. (Әгәр ни өчен өч ACK пакеты барлыгы ачык булмаса, бу кабат тапшыру механизмында аерым аңлатылачак.)

Тыгынны булдырмау
TCP тыгызлыкны контрольдә тоту халәтенә кергәч, cwnd тыгызлык бусагасының яртысына (sthresh) куела. Бу пакет сегменты алынган саен cwnd кыйммәтен икеләтә арттырып булмый дигәнне аңлата. Киресенчә, чагыштырмача консерватив алым кулланыла, анда һәр тапшыру тәмамланганнан соң cwnd кыйммәте бер MSSка (пакет сегментының максималь озынлыгы) гына арта. Мәсәлән, хәтта 10 пакет сегменты танылса да, cwnd кыйммәте бер MSSка гына арта. Бу сызыклы үсеш моделе һәм аның үсешнең югары чиге дә бар. Пакет югалганда, cwnd кыйммәте MSSка үзгәртелә, һәм ssthresh кыйммәте cwndның яртысына куела. Яки ул шулай ук ​​3 артык ACK җавабы алынганда MSS үсешен туктата. Әгәр cwnd кыйммәтен икеләтә киметкәннән соң да өч артык ACK алынса, ssthresh кыйммәте cwnd кыйммәтенең яртысы буларак теркәлә һәм тиз торгызу халәте кертелә.

Тиз торгызылу
Тиз торгызу халәтендә, һәр алынган артык ACK, ягъни эзлекле рәвештә килмәгән ACK өчен тыгызлык тәрәзәсе cwnd кыйммәте бер MSS ка арта. Бу челтәрдә уңышлы тапшырылган пакет сегментларын куллану һәм тапшыру нәтиҗәлелеген мөмкин кадәр арттыру өчен эшләнә.

Югалган пакет сегментының ACK хәбәре килгәч, TCP cwnd кыйммәтен киметә һәм аннары тыгызлыкны булдырмау халәтенә керә. Бу тыгызлык тәрәзәсенең зурлыгын контрольдә тоту һәм челтәр тыгызлыгын тагын да арттырудан саклану өчен эшләнә.

Әгәр тыгызлыкны контрольдә тоту халәтеннән соң вакыт-вакыт тукталыш булса, челтәр торышы җитдирәк була һәм TCP тыгызлыкны булдырмау халәтеннән әкрен башлану халәтенә күчә. Бу очракта, тыгызлык тәрәзәсенең cwnd кыйммәте 1 MSS итеп билгеләнә, пакет сегментының максималь озынлыгы, ә әкрен башлану бусагасының ssthresh кыйммәте cwndның яртысына билгеләнә. Моның максаты - челтәр торгызылганнан соң тыгызлык тәрәзәсенең зурлыгын әкренләп арттыру, тапшыру тизлеген һәм челтәр тыгызлыгы дәрәҗәсен тигезләү.

Кыскача мәгълүмат
Ышанычлы транспорт протоколы буларак, TCP рәт номеры, раслау, кабат тапшыруны контрольдә тоту, тоташуны идарә итү һәм тәрәзә контроле буенча ышанычлы транспортны гамәлгә ашыра. Алар арасында агымны контрольдә тоту механизмы җибәрүче тарафыннан җибәрелгән мәгълүмат күләмен кабул итүченең чын кабул итү сыйдырышлыгына карап контрольдә тота, бу челтәр тыгызлыгы һәм эшчәнлекнең начарлануы проблемаларыннан качуга ярдәм итә. Тыгылуны контрольдә тоту механизмы җибәрүче тарафыннан җибәрелгән мәгълүмат күләмен көйләү юлы белән челтәр тыгызлыгы барлыкка килүдән кача. Тыгылу тәрәзәсе һәм җибәрү тәрәзәсе төшенчәләре бер-берсе белән бәйле, һәм җибәрүчедәге мәгълүмат күләме тыгызлык тәрәзәсенең зурлыгын динамик рәвештә көйләү юлы белән контрольдә тотыла. Әкрен башлау, тыгызлыкны булдырмау һәм тиз торгызу - TCP тыгызлыкны контрольдә тоту алгоритмының өч төп өлеше, алар челтәрнең сыйдырышлыгына һәм тыгызлык дәрәҗәсенә яраклашу өчен төрле стратегияләр ярдәмендә тыгызлык тәрәзәсенең зурлыгын көйлиләр.

Киләсе бүлектә без TCP'ның ретрансляция механизмын җентекләп тикшерәчәкбез. Ретрансляция механизмы ышанычлы тапшыруга ирешү өчен TCP'ның мөһим өлеше булып тора. Ул югалган, бозылган яки тоткарланган мәгълүматларны ретрансляцияләү юлы белән мәгълүматларның ышанычлы тапшырылуын тәэмин итә. Ретрансляция механизмын гамәлгә ашыру принцибы һәм стратегиясе киләсе бүлектә җентекләп таныштырылачак һәм анализланачак. Безне күзәтеп барыгыз!


Бастырылган вакыты: 2025 елның 24 феврале