Ցանցային փաթեթների բրոքերի TCP կապերի հիմնական գաղտնիքները.

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

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

TCP եռակողմ Handshake Process and State Transitions
TCP-ն կապի վրա հիմնված տրանսպորտային արձանագրություն է, որը պահանջում է կապի հաստատում մինչև տվյալների փոխանցումը: Կապի հաստատման այս գործընթացը կատարվում է եռակողմ ձեռքսեղմման միջոցով:

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

Եկեք ավելի սերտ նայենք TCP փաթեթներին, որոնք ուղարկվում են յուրաքանչյուր կապում:

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

 SYN փաթեթ

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

SYN+ACK փաթեթ

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

ACK փաթեթ

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

Երբ սերվերը ստանում է պատասխանի փաթեթը հաճախորդից, այն նաև անցնում է ESTABLISHED վիճակին:

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

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

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

Պատճառ 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-ն օգտագործում է եռակողմ ձեռքսեղմումը կապը հաստատելու համար՝ խուսափելու այս խնդիրների առաջացումից:

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

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


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