Тајното оружје на 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 да се префрли на режим на контрола на застој и да го заврши бавното стартување.

Последниот начин на кој може да се заврши бавниот почеток е ако се детектираат три излишни потврди, 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 година