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 се подешава на половину прага загушења ssthresh. То значи да вредност cwnd не може бити удвостручена сваки пут када се прими сегмент пакета. Уместо тога, усваја се релативно конзервативан приступ у коме се вредност cwnd повећава за само један MSS (максимална дужина сегмента пакета) након што је сваки пренос завршен. На пример, чак и ако је потврђено 10 сегмената пакета, вредност cwnd ће се повећати само за један MSS. Ово је линеарни модел раста и такође има горњу границу раста. Када дође до губитка пакета, вредност cwnd се мења у MSS, а вредност ssthresh се подешава на половину cwnd. Или ће се такође зауставити раст MSS када се приме 3 редундантна ACK одговора. Ако се и даље приме три редундантна ACK-а након преполовљења вредности cwnd, вредност ssthresh се бележи као половина вредности cwnd и улази се у стање брзог опоравка.

Брз опоравак
У стању брзог опоравка, вредност прозора загушења cwnd се повећава за један MSS за сваки примљени редундантни ACK, односно ACK који не стиже у редоследу. Ово служи да би се искористили сегменти пакета који су успешно послати у мрежи како би се што више побољшала ефикасност преноса.

Када стигне ACK потврда за изгубљени сегмент пакета, TCP смањује вредност cwnd, а затим улази у стање избегавања загушења. Ово служи да би се контролисала величина прозора загушења и избегло даље повећање загушења мреже.

Ако дође до истека времена након стања контроле загушења, стање мреже постаје озбиљније и TCP мигрира из стања избегавања загушења у стање спорог покретања. У овом случају, вредност прозора загушења cwnd је постављена на 1 MSS, максимална дужина сегмента пакета, а вредност прага спорог покретања ssthresh је постављена на половину cwnd. Сврха овога је да се постепено повећа величина прозора загушења након што се мрежа опорави како би се уравнотежили брзина преноса и степен загушења мреже.

Резиме
Као поуздан транспортни протокол, TCP имплементира поуздан транспорт помоћу секвенцијалног броја, потврде, контроле ретрансмисије, управљања конекцијом и контроле прозора. Међу њима, механизам контроле протока контролише количину података које шаље пошиљалац у складу са стварним капацитетом пријема пријемника, чиме се избегавају проблеми загушења мреже и деградације перформанси. Механизам контроле загушења избегава појаву загушења мреже подешавањем количине података које шаље пошиљалац. Концепти прозора загушења и прозора слања су међусобно повезани, а количина података код пошиљаоца се контролише динамичким подешавањем величине прозора загушења. Спори почетак, избегавање загушења и брзи опоравак су три главна дела TCP алгоритма за контролу загушења, који подешавају величину прозора загушења кроз различите стратегије како би се прилагодили капацитету и степену загушења мреже.

У следећем одељку, детаљно ћемо испитати TCP-ов механизам ретрансмисије. Механизам ретрансмисије је важан део TCP-а за постизање поузданог преноса. Он обезбеђује поуздан пренос података ретрансмисијом изгубљених, оштећених или закаснелих података. Принцип имплементације и стратегија механизма ретрансмисије биће представљени и детаљно анализирани у следећем одељку. Пратите нас!


Време објаве: 24. фебруар 2025.