Тайното оръжие на TCP: Контрол на мрежовия поток и контрол на задръстванията в мрежата

TCP транспорт на надеждност
Всички сме запознати с TCP протокола като надежден транспортен протокол, но как гарантира надеждността на транспорта?

За да се постигне надеждно предаване, трябва да се вземат предвид много фактори, като корупция на данните, загуба, дублиране и парчета извън ред. Ако тези проблеми не могат да бъдат решени, не може да се постигне надеждно предаване.

Следователно, TCP използва механизми като последователност, отговор на потвърждение, контрол на повторното управление, управление на връзките и контрол на прозорците за постигане на надеждно предаване.

В този документ ще се съсредоточим върху плъзгащия се прозорец, контрола на потока и контрола на задръстванията на TCP. Механизмът за препредаване е обхванат отделно в следващия раздел.

Контрол на мрежовия поток
Контролът на мрежовия поток или знанието, тъй като контролът на мрежовия трафик всъщност е проявление на фината връзка между производителите и потребителите. Вероятно сте попаднали на този сценарий много по време на работа или в интервюта. Ако капацитетът на производителя да произвежда значително надвишава капацитета на потребителя да консумира, това ще доведе до растеж на опашката за неопределено време. В по -сериозен случай може да знаете, че когато съобщенията на RabbitMQ се натрупват твърде много, това може да доведе до деградация на производителността на целия MQ сървър. Същото важи и за TCP; Ако бъдат оставени без проверка, в мрежата ще бъдат пуснати твърде много съобщения и потребителите ще надхвърлят капацитета си, докато производителите ще продължат да изпращат дублиращи се съобщения, което значително ще се отрази на работата на мрежата.

За да се справи с това явление, TCP предоставя механизъм за подателя да контролира количеството, изпратени данни въз основа на действителния капацитет на прием на приемника, който е известен като контрол на потока. Получателят поддържа прозорец за получаване, докато подателят поддържа прозорец за изпращане. Трябва да се отбележи, че тези прозорци са само за една TCP връзка, а не всички връзки споделят прозорец.

TCP осигурява контрол на потока, като използва променлива за прозорец за получаване. Прозорецът за получаване дава на подателя индикация колко кеш пространство все още е налично. Подателят контролира количеството данни, изпратени според действителния капацитет за приемане на приемника.

Хостът на приемника уведомява подателя за размера на данните, които може да получи, а подателят изпраща до този лимит. Този лимит е размерът на прозореца, помниш ли заглавката на TCP? Има поле за получаване на прозорец, което се използва за посочване на броя на байтовете, които приемникът е в състояние или е готов да получи.

Хостът на подателя периодично ще изпраща пакет с прозорци, който се използва за откриване дали хостът на приемника все още е в състояние да приема данни. Когато буферът на приемника е в опасност от преливане, размерът на прозореца е зададен на по -малка стойност, за да инструктира подателя да контролира количеството на изпратените данни.

Ето диаграма за контрол на мрежовия поток:

Контрол на трафика

Контрол на мрежовите задръствания
Преди да въведем контрол на задръстванията, трябва да разберем, че в допълнение към прозореца за получаване и прозореца за изпращане, има и прозорец за задръствания, който се използва главно за решаване на проблема с каква скорост изпращателят започва да изпраща данни до прозореца за получаване. Следователно прозорецът за задръствания се поддържа и от подателя на TCP. Нуждаем се от алгоритъм, за да решим колко данни са подходящи за изпращане, тъй като изпращането на твърде малко или твърде много данни не е идеално, следователно концепцията за прозорец на задръстванията.

В предишния контрол на мрежовия поток, това, което избягвахме, беше подателят, който попълва кеша на приемника с данни, но не знаехме какво се случва в мрежата. Обикновено компютърните мрежи са в споделена среда. В резултат на това може да има задръствания в мрежа поради комуникация между други хостове.

Когато мрежата е претоварена, ако продължи да се изпраща голям брой пакети, това може да причини проблеми като забавяне и загуба на пакети. На този етап TCP ще пренасочи данните, но препредаването ще увеличи тежестта върху мрежата, което ще доведе до по -големи закъснения и повече загуби на пакети. Това може да влезе в порочен цикъл и да продължи да става все по -голям.

По този начин TCP не може да пренебрегне това, което се случва в мрежата. Когато мрежата е претоварена, TCP се жертва, като намалява количеството данни, които изпраща.

Следователно се предлага контрол на задръстванията, който има за цел да избегне попълването на цялата мрежа с данни от подателя. За да регулира количеството данни, което изпращателят трябва да изпрати, TCP определя концепция, наречена прозореца на задръстванията. Алгоритъмът за контрол на задръстванията ще регулира размера на прозореца на задръстванията според степента на претоварване на мрежата, така че да контролира количеството данни, изпратени от подателя.

Какво е прозорец за задръствания? Какво общо има това с прозореца за изпращане?

Прозорецът за задръствания е променлива на състоянието, поддържана от подателя, която определя количеството данни, които подателят може да изпрати. Прозорецът на задръстванията се променя динамично според нивото на задръстванията на мрежата.

Прозорецът за изпращане е договорен за размера на прозореца между подателя и получателя, който показва количеството данни, които получателят може да получи. Прозорецът за задръствания и прозорецът за изпращане са свързани; Прозорецът за изпращане обикновено е равен на минимума на задръстванията и получаването на прозорци, тоест swnd = min (cwnd, rwnd).

Прозорецът на задръстванията се променя по следния начин:

Ако в мрежата няма задръствания, т.е. не се случва изчакване на препредаване, прозорецът на задръстванията се увеличава.

Ако в мрежата има задръствания, прозорецът на задръстванията намалява.

Подателят определя дали мрежата е претоварена, като се наблюдава дали пакетът за потвърждение на ACK е получен в определения срок. Ако подателят не получи пакета за потвърждение на ACK в определения срок, се счита, че мрежата е претоварена.

В допълнение към прозореца на задръстванията е време да обсъдим алгоритъма за контрол на задръстванията на TCP. Алгоритъмът за контрол на задръстванията на TCP се състои от три основни части:

Бавен старт:Първоначално прозорецът за задръствания на CWND е сравнително малък и подателят увеличава прозореца на задръстванията експоненциално, за да се адаптира бързо към капацитета на мрежата.
Избягване на задръствания:След като прозорецът на задръстванията надвиши определен праг, подателят увеличава прозореца на задръстванията по линеен начин, за да забави скоростта на растеж на прозореца на задръстванията и да избегне претоварването на мрежата.
Бързо възстановяване:Ако се появят задръствания, подателят намалява наполовина прозореца на задръстванията и влиза в състоянието на бързо възстановяване, за да определи местоположението на мрежата за мрежа чрез получените дублиращи се ACK, и след това продължава да увеличава прозореца на задръстванията.

Бавен старт
Когато се установи TCP връзка, прозорецът за задръствания CWND първоначално е зададен на минимална стойност на MSS (максимален размер на сегмента). По този начин първоначалната скорост на изпращане е около MSS/RTT байта/секунда. Действителната налична честотна лента обикновено е много по-голяма от MSS/RTT, така че TCP иска да намери оптималната скорост на изпращане, която може да бъде постигната чрез бавен старт.

В процеса на бавен старт стойността на прозореца на задръстванията CWND ще бъде инициализирана до 1 MSS и всеки път, когато се отчита предаваният пакет сегмент, стойността на CWND ще бъде увеличена с един MSS, тоест стойността на CWND ще стане 2 MSS. След това стойността на CWND се удвоява за всяко успешно предаване на пакет сегмент и т.н. Специфичният процес на растеж е показан на следната фигура.

 Контрол на мрежовите задръствания

Степента на изпращане обаче не винаги може да расте; Растежът трябва да приключи някой път. И така, кога приключва скоростта на изпращане? Бавният старт обикновено прекратява увеличаването на скоростта на изпращане по един от няколко начина:

Първият начин е случаят с загуба на пакети по време на процеса на изпращане на бавен старт. Когато се появи загуба на пакет, TCP задава прозореца на задръстванията на подателя, за да се обърне към 1 и рестартира процеса на бавен старт. Към този момент се въвежда концепция за бавен старт праг SSTHRESH, чиято първоначална стойност е половината от стойността на CWND, която генерира загуба на пакети. Тоест, когато се открие задръстванията, стойността на SSTHRESH е половината от стойността на прозореца.

Вторият начин е директно да се корелира със стойността на прага на бавен старт SSHRHRESH. Тъй като стойността на SSTHRESH е половината от стойността на прозореца, когато се открие задръстванията, може да настъпи загуба на пакети при всяко удвояване, когато CWND е по -голям от SSHRHESH. Затова е най-добре да настроите CWND на SSHRHESH, което ще доведе до преминаване на TCP в режим на контрол на задръстванията и ще завърши бавен старт.

Последният начин, който бавният старт може да приключи, е ако се открият три излишни ACK, TCP извършва бързо препредаване и влиза в състоянието на възстановяване. (Ако не е ясно защо има три ACK пакета, това ще бъде обяснено отделно в механизма за препредаване.)

Избягване на задръствания
Когато TCP влезе в състоянието на контрола на задръстванията, CWND е настроен на половината от прага на задръстванията SSHRHRESH. Това означава, че стойността на CWND не може да се удвоява всеки път, когато се получи пакет сегмент. Вместо това е възприет сравнително консервативен подход, при който стойността на CWND се увеличава само с един MSS (максимална дължина на пакета) след приключване на всяка трансмисия. Например, дори ако са признати 10 пакетни сегмента, стойността на CWND ще се увеличи само с един MSS. Това е линеен модел на растеж и също има горна граница на растежа. Когато се появи загуба на пакети, стойността на CWND се променя на MSS и стойността на SSHRHESH е зададена на половината от CWND. Или също ще спре растежа на MSS, когато са получени 3 излишни ACK отговора. Ако все още са получени три излишни ACK след наполовина стойността на CWND, стойността на SSHRHESH се записва като половината от стойността на CWND и се въвежда състоянието на бързо възстановяване.

Бързо възстановяване
В състояние на бързо възстановяване стойността на прозореца на задръстванията CWND се увеличава с един MSS за всеки получен излишен ACK, тоест ACK, който не пристига последователно. Това е да се използва пакетните сегменти, които са успешно предавани в мрежата, за да подобрят ефективността на предаването колкото е възможно повече.

Когато пристигне ACK от изгубения пакет сегмент, TCP намалява стойността на CWND и след това влиза в състоянието на избягване на задръстванията. Това е да се контролира размерът на прозореца на задръстванията и да се избегне допълнително увеличаване на задръстванията на мрежата.

Ако се появи изчакване след състоянието на контрола на задръстванията, състоянието на мрежата става по-сериозно и TCP мигрира от състоянието на избягване на задръстванията в състояние на бавен старт. В този случай стойността на прозореца на задръстванията CWND е зададена на 1 MSS, максималната дължина на пакета и стойността на прага на бавен старт SSHRHRESH е зададена на половината от CWND. Целта на това е да се увеличи повторно размерът на прозореца на задръстванията, след като мрежата се възстанови, за да балансира скоростта на предаване и степента на задръствания в мрежата.

Резюме
Като надежден транспортен протокол, TCP реализира надежден транспорт по номер на последователност, потвърждение, контрол на препредаването, управление на връзките и контрол на прозорците. Сред тях механизмът за контрол на потока контролира количеството данни, изпратени от подателя според действителния приемник на приемника, който избягва проблемите на претоварването на мрежата и влошаването на производителността. Механизмът за контрол на задръстванията избягва появата на задръствания в мрежата чрез коригиране на количеството данни, изпратени от подателя. Концепциите за прозореца на задръстванията и прозорецът за изпращане са свързани помежду си, а количеството данни в подателя се контролира чрез динамично регулиране на размера на прозореца на задръстванията. Бавният старт, избягването на задръстванията и бързото възстановяване са трите основни части на алгоритъма за контрол на задръстванията на TCP, които регулират размера на прозореца на задръстванията чрез различни стратегии, за да се адаптират към капацитета и степента на задръстване в мрежата.

В следващия раздел ще разгледаме подробно механизма за препредаване на TCP. Механизмът за препредаване е важна част от TCP за постигане на надеждно предаване. Той гарантира надеждното предаване на данни чрез препредаване на загубени, повредени или забавени данни. Принципът на изпълнение и стратегията на механизма за препредаване ще бъде въведен и анализиран подробно в следващия раздел. Следете!


Време за публикация: 4 февруари-20-2025