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 պատասխաններ։ Եթե cwnd-ի արժեքը կիսով չափ կրճատելուց հետո դեռևս ստացվում են երեք ավելորդ ack-եր, ssthresh-ի արժեքը գրանցվում է որպես cwnd-ի արժեքի կես, և մուտքագրվում է արագ վերականգնման վիճակ։

Արագ վերականգնում
Արագ վերականգնման վիճակում, յուրաքանչյուր ստացված ավելորդ ACK-ի համար, այսինքն՝ այն ACK-ի համար, որը հաջորդականությամբ չի ժամանում, գերբեռնվածության պատուհանի cwnd-ի արժեքը մեծանում է մեկ MSS-ով։ Սա արվում է ցանցում հաջողությամբ փոխանցված փաթեթային հատվածներն օգտագործելու և փոխանցման արդյունավետությունը հնարավորինս բարելավելու համար։

Երբ կորցրած փաթեթի հատվածի ACK-ը հասնում է, TCP-ն նվազեցնում է cwnd-ի արժեքը և այնուհետև անցնում գերբեռնվածությունից խուսափելու վիճակի։ Սա արվում է գերբեռնվածության պատուհանի չափը վերահսկելու և ցանցի գերբեռնվածության հետագա մեծացումը կանխելու համար։

Եթե ​​գերբեռնվածության կառավարման վիճակից հետո տեղի է ունենում ժամանակի ավարտ, ցանցի վիճակը դառնում է ավելի լուրջ, և TCP-ն գերբեռնվածությունից խուսափելու վիճակից անցնում է դանդաղ մեկնարկի վիճակի: Այս դեպքում գերբեռնվածության պատուհանի cwnd արժեքը սահմանվում է 1 MSS, փաթեթի հատվածի առավելագույն երկարությունը, իսկ դանդաղ մեկնարկի շեմի ssthresh արժեքը սահմանվում է cwnd-ի կեսի: Սրա նպատակն է աստիճանաբար մեծացնել գերբեռնվածության պատուհանի չափը ցանցի վերականգնումից հետո՝ փոխանցման արագությունը և ցանցի գերբեռնվածության աստիճանը հավասարակշռելու համար:

Ամփոփում
Որպես հուսալի փոխադրման արձանագրություն, TCP-ն իրականացնում է հուսալի փոխադրում՝ հաջորդական համարի, հաստատման, վերահաղորդման կառավարման, կապի կառավարման և պատուհանների կառավարման միջոցով: Դրանց թվում են հոսքի կառավարման մեխանիզմը, որը կարգավորում է ուղարկողի կողմից ուղարկված տվյալների քանակը՝ համաձայն ստացողի իրական ընդունման հզորության, որը խուսափում է ցանցի գերբեռնվածության և կատարողականի վատթարացման խնդիրներից: Գերբեռնվածության կառավարման մեխանիզմը խուսափում է ցանցային գերբեռնվածության առաջացումից՝ կարգավորելով ուղարկողի կողմից ուղարկված տվյալների քանակը: Գերբեռնվածության պատուհանի և ուղարկման պատուհանի հասկացությունները կապված են միմյանց հետ, և ուղարկողի մոտ տվյալների քանակը կառավարվում է գերբեռնվածության պատուհանի չափը դինամիկ կերպով կարգավորելով: Դանդաղ մեկնարկը, գերբեռնվածության խուսափումը և արագ վերականգնումը TCP գերբեռնվածության կառավարման ալգորիթմի երեք հիմնական մասերն են, որոնք կարգավորում են գերբեռնվածության պատուհանի չափը տարբեր ռազմավարությունների միջոցով՝ հարմարվելու ցանցի հզորությանը և գերբեռնվածության աստիճանին:

Հաջորդ բաժնում մենք մանրամասն կքննարկենք TCP-ի վերափոխման մեխանիզմը: Վերափոխման մեխանիզմը TCP-ի կարևոր մասն է՝ հուսալի փոխանցման հասնելու համար: Այն ապահովում է տվյալների հուսալի փոխանցումը՝ վերափոխելով կորած, վնասված կամ ուշացած տվյալները: Վերափոխման մեխանիզմի իրականացման սկզբունքը և ռազմավարությունը մանրամասն կներկայացվեն և կվերլուծվեն հաջորդ բաժնում: Մնացեք կապի մեջ:


Հրապարակման ժամանակը. Փետրվարի 24-2025