Ցանցային փաթեթային բրոքերների TCP միացումների հիմնական գաղտնիքները. բացահայտվեց եռակի ձեռքսեղմման անհրաժեշտությունը

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

Այս հոդվածում մանրամասն կքննարկվեն եռակողմ ձեռքսեղմման սկզբունքը, գործընթացը և կարևորությունը: Քայլ առ քայլ մենք կբացատրենք, թե ինչու է անհրաժեշտ եռակողմ ձեռքսեղմումը, ինչպես է այն ապահովում կապի կայունությունն ու հուսալիությունը, և որքան կարևոր է տվյալների փոխանցման համար: Եռակողմ ձեռքսեղմման ավելի խորը ըմբռնմամբ մենք ավելի լավ կհասկանանք ցանցային հաղորդակցության հիմքում ընկած մեխանիզմները և ավելի պարզ պատկերացում կունենանք TCP կապերի հուսալիության մասին:

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

 TCP եռակողմ ձեռքսեղմում

Եկեք ավելի մանրամասն քննարկենք յուրաքանչյուր կապի ընթացքում ուղարկվող TCP փաթեթները։

Սկզբում և՛ հաճախորդը, և՛ սերվերը ՓԱԿ են։ Նախ, սերվերը ակտիվորեն լսում է միացքի վրա և գտնվում է LISTEN վիճակում, ինչը նշանակում է, որ սերվերը պետք է գործարկվի։ Հաջորդը, հաճախորդը պատրաստ է սկսել մուտք գործել վեբ էջ։ Այն պետք է կապ հաստատի սերվերի հետ։ Առաջին միացման փաթեթի ձևաչափը հետևյալն է.

 SYN փաթեթ

Երբ հաճախորդը սկսում է կապ, այն ստեղծում է պատահական սկզբնական հաջորդական համար (client_isn) և տեղադրում այն ​​TCP վերնագրի «Հաջորդական համար» դաշտում: Միաժամանակ, հաճախորդը SYN դրոշի դիրքը սահմանում է 1-ի՝ նշելու համար, որ ելքային փաթեթը SYN փաթեթ է: Հաճախորդը նշում է, որ ցանկանում է կապ հաստատել սերվերի հետ՝ սերվերին ուղարկելով առաջին SYN փաթեթը: Այս փաթեթը չի պարունակում կիրառական մակարդակի տվյալներ (այսինքն՝ ուղարկված տվյալներ): Այս պահին հաճախորդի կարգավիճակը նշվում է որպես SYN-SENT:

SYN+ACK փաթեթ

Երբ սերվերը հաճախորդից ստանում է SYN փաթեթ, այն պատահականորեն նախնականացնում է իր սեփական սերիական համարը (server_isn) և այնուհետև այդ համարը տեղադրում է TCP վերնագրի «Սերիական համար» դաշտում: Այնուհետև սերվերը «Հաստատման համար» դաշտում մուտքագրում է client_isn + 1 և SYN և ACK բիթերը սահմանում է 1: Վերջապես, սերվերը հաճախորդին ուղարկում է փաթեթը, որը չի պարունակում որևէ կիրառական մակարդակի տվյալներ (և որևէ տվյալ սերվերի կողմից ուղարկելու համար): Այս պահին սերվերը գտնվում է SYN-RCVD վիճակում:

ACK փաթեթ

Երբ հաճախորդը ստանում է փաթեթը սերվերից, այն պետք է կատարի հետևյալ օպտիմալացումները՝ վերջնական պատասխան փաթեթին արձագանքելու համար. Նախ, հաճախորդը պատասխան փաթեթի TCP վերնագրի ACK բիթը սահմանում է 1-ի։ Երկրորդ, հաճախորդը «Հաստատել պատասխանի համարը» դաշտում մուտքագրում է server_isn + 1 արժեքը։ Վերջապես, հաճախորդը փաթեթն ուղարկում է սերվերին։ Այս փաթեթը կարող է տվյալներ փոխանցել հաճախորդից սերվեր։ Այս գործողությունների ավարտից հետո հաճախորդը կմտնի ՀԱՍՏԱՏՎԱԾ վիճակի մեջ։

Երբ սերվերը ստանում է պատասխանի փաթեթը հաճախորդից, այն նույնպես անցնում է ՀԱՍՏԱՏՎԱԾ վիճակի։

Ինչպես կարող եք տեսնել վերը նշված գործընթացից, եռակողմ ձեռքսեղմում կատարելիս երրորդ ձեռքսեղմմանը թույլատրվում է տվյալներ փոխանցել, սակայն առաջին երկու ձեռքսեղմումներին՝ ոչ։ Սա այն հարցն է, որը հաճախ տրվում է հարցազրույցների ժամանակ։ Եռակողմ ձեռքսեղմումն ավարտվելուց հետո երկու կողմերն էլ մտնում են ՀԱՍՏԱՏՎԱԾ վիճակ, ինչը նշանակում է, որ կապը հաջողությամբ հաստատվել է, որից հետո հաճախորդը և սերվերը կարող են սկսել տվյալներ ուղարկել միմյանց։

Ինչո՞ւ երեք ձեռքսեղմում։ Ոչ թե երկու անգամ, այլ չորս անգամ։
Հաճախ հանդիպող պատասխանն է. «Քանի որ եռակողմ ձեռքսեղմումը երաշխավորում է ստանալու և ուղարկելու հնարավորությունը»։ Այս պատասխանը ճիշտ է, բայց դա միայն մակերեսային պատճառ է, չի ներկայացնում հիմնական պատճառը։ Հետագայում ես կվերլուծեմ եռակի ձեռքսեղմման պատճառները երեք տեսանկյունից՝ այս հարցի վերաբերյալ մեր պատկերացումները խորացնելու համար։

Եռակողմանի ձեռքսեղմումը կարող է արդյունավետորեն խուսափել պատմականորեն կրկնվող կապերի նախնականացումից (հիմնական պատճառը):
Եռակողմանի ձեռքսեղմումը երաշխավորում է, որ երկու կողմերն էլ ստացել են հուսալի սկզբնական հաջորդական համար։
Եռակողմ ձեռքսեղմումը խուսափում է ռեսուրսների վատնումից։

Պատճառ 1. Խուսափեք պատմական կրկնօրինակ միացումներից
Ամփոփելով՝ եռակողմանի ձեռքսեղմման հիմնական պատճառը հին կրկնօրինակ կապի նախնականացման հետևանքով առաջացող շփոթությունից խուսափելն է: Բարդ ցանցային միջավայրում տվյալների փաթեթների փոխանցումը միշտ չէ, որ ուղարկվում է նպատակակետային հոսթին նշված ժամանակին համապատասխան, և հին տվյալների փաթեթները կարող են առաջինը հասնել նպատակակետային հոսթին՝ ցանցի գերբեռնվածության և այլ պատճառներով: Դրանից խուսափելու համար TCP-ն օգտագործում է եռակողմանի ձեռքսեղմում՝ կապը հաստատելու համար:

Եռակողմանի ձեռքսեղմումը խուսափում է պատմական կրկնօրինակ կապերից

Երբ հաճախորդը հաջորդաբար ուղարկում է մի քանի SYN կապի հաստատման փաթեթներ, ցանցի գերբեռնվածության նման իրավիճակներում կարող են առաջանալ հետևյալը.

1- Հին SYN փաթեթները սերվեր են հասնում վերջին SYN փաթեթներից առաջ։
2- Սերվերը կպատասխանի SYN + ACK փաթեթով հաճախորդին՝ հին SYN փաթեթը ստանալուց հետո։
3- Երբ հաճախորդը ստանում է SYN + ACK փաթեթը, այն որոշում է, որ կապը պատմական կապ է (հաջորդական համարի ժամկետը լրացել է կամ ժամկետը լրացել է)՝ համաձայն իր սեփական համատեքստի, և այնուհետև RST փաթեթն ուղարկում է սերվերին՝ կապը ընդհատելու համար։

Երկկողմանի ձեռքսեղմման դեպքում հնարավոր չէ որոշել, թե արդյոք ընթացիկ կապը պատմական կապ է։ Եռակողմանի ձեռքսեղմումը թույլ է տալիս հաճախորդին որոշել, թե արդյոք ընթացիկ կապը պատմական կապ է համատեքստի հիման վրա, երբ այն պատրաստ է ուղարկել երրորդ փաթեթը։

1- Եթե դա պատմական կապ է (հաջորդական համարի ժամկետը լրացել է կամ ժամանակը սպառվել է), երրորդ ձեռքսեղմմամբ ուղարկված փաթեթը RST փաթեթ է՝ պատմական կապը ընդհատելու համար։
2- Եթե դա պատմական կապ չէ, ապա երրորդ անգամ ուղարկված փաթեթը ACK փաթեթ է, և երկու հաղորդակցվող կողմերը հաջողությամբ հաստատում են կապը։

Հետևաբար, TCP-ի կողմից եռակողմանի ձեռքսեղմման օգտագործման հիմնական պատճառն այն է, որ այն նախնականացնում է կապը՝ պատմական կապերը կանխելու համար։

Պատճառ 2. Երկու կողմերի սկզբնական հաջորդական համարների համաժամեցում
TCP արձանագրության երկու կողմերն էլ պետք է պահպանեն հաջորդական համար, որը հուսալի փոխանցումն ապահովելու հիմնական գործոն է: Հաջորդական համարները կարևոր դեր են խաղում TCP կապերում: Դրանք կատարում են հետևյալ գործառույթները՝

Ստացողը կարող է վերացնել կրկնօրինակ տվյալները և ապահովել տվյալների ճշգրտությունը։

Ստացողը կարող է փաթեթներ ստանալ հաջորդական համարի հերթականությամբ՝ տվյալների ամբողջականությունն ապահովելու համար։

● Հաջորդական համարը կարող է նույնականացնել մյուս կողմի կողմից ստացված տվյալների փաթեթը՝ հնարավորություն տալով տվյալների հուսալի փոխանցման։

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

Համաժամեցրեք երկու կողմերի սկզբնական սերիական համարները

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

Պատճառ 3. Խուսափեք ռեսուրսների վատնումից
Եթե ​​կա միայն «երկու ձեռքսեղմում», երբ հաճախորդի SYN հարցումը արգելափակված է ցանցում, հաճախորդը չի կարող ստանալ սերվերի կողմից ուղարկված ACK փաթեթը, ուստի SYN-ը կրկին կուղարկվի: Սակայն, քանի որ երրորդ ձեռքսեղմում չկա, սերվերը չի կարող որոշել, թե արդյոք հաճախորդը ստացել է ACK հաստատում՝ կապը հաստատելու համար: Հետևաբար, սերվերը կարող է կապ հաստատել միայն նախաձեռնողաբար՝ յուրաքանչյուր SYN հարցում ստանալուց հետո: Սա հանգեցնում է հետևյալի.

Ռեսուրսների վատնում. Եթե հաճախորդի SYN հարցումը արգելափակվում է, ինչը հանգեցնում է բազմաթիվ SYN փաթեթների կրկնակի փոխանցման, սերվերը հարցումը ստանալուց հետո կհաստատի բազմաթիվ ավելորդ անվավեր կապեր: Սա հանգեցնում է սերվերի ռեսուրսների ավելորդ վատնման:

Հաղորդագրությունների պահպանում. Երրորդ ձեռքսեղմման բացակայության պատճառով սերվերը չի կարողանում իմանալ, թե արդյոք հաճախորդը ճիշտ է ստացել ACK հաստատումը՝ կապը հաստատելու համար: Արդյունքում, եթե հաղորդագրությունները մնում են ցանցում, հաճախորդը կշարունակի SYN հարցումներ ուղարկել անընդհատ, ինչը կստիպի սերվերին անընդհատ նոր կապեր հաստատել: Սա կմեծացնի ցանցի գերբեռնվածությունը և ուշացումը, ինչպես նաև կբացասաբար կանդրադառնա ցանցի ընդհանուր աշխատանքի վրա:

Խուսափեք ռեսուրսների վատնումից

Հետևաբար, ցանցային կապի կայունությունն ու հուսալիությունն ապահովելու համար TCP-ն օգտագործում է եռակողմ ձեռքսեղմումը՝ կապը հաստատելու համար՝ այս խնդիրների առաջացումը կանխելու համար։

Ամփոփում
TheՑանցային փաթեթների միջնորդTCP կապի հաստատումը կատարվում է եռակողմանի ձեռքսեղմման միջոցով: Եռակողմանի ձեռքսեղմման ընթացքում հաճախորդը նախ սերվերին է ուղարկում SYN դրոշով փաթեթ՝ նշելով, որ ցանկանում է կապ հաստատել: Հաճախորդից հարցումը ստանալուց հետո սերվերը հաճախորդին է ուղարկում SYN և ACK դրոշներով փաթեթ՝ նշելով, որ կապի հարցումը ընդունված է, և ուղարկում է իր սեփական սկզբնական հաջորդական համարը: Վերջապես, հաճախորդը սերվերին պատասխանում է ACK դրոշով՝ նշելով, որ կապը հաջողությամբ հաստատվել է: Այսպիսով, երկու կողմերն էլ գտնվում են ՀԱՍՏԱՏՎԱԾ վիճակում և կարող են սկսել տվյալներ ուղարկել միմյանց:

Ընդհանուր առմամբ, TCP կապի հաստատման եռակողմանի ձեռքսեղմման գործընթացը նախագծված է կապի կայունությունն ու հուսալիությունն ապահովելու, պատմական կապերի վրա շփոթությունից և ռեսուրսների վատնումից խուսափելու, ինչպես նաև երկու կողմերին էլ տվյալներ ստանալու և ուղարկելու հնարավորություն տալու համար։


Հրապարակման ժամանակը. Հունվար-08-2025