TCP қосылымдарының негізгі құпиялары: TCP қосылымдары: Үштік қол алысу қажеттілігін демификациялады

TCP қосылымын орнату
Интернетті қарап, электрондық поштаны жібергенде немесе онлайн ойын ойнағанда, біз көбінесе оның артындағы күрделі желілік байланыс туралы ойламаймыз. Дегенмен, бұл біз бен сервер арасындағы тұрақты қарым-қатынасты қамтамасыз ететін бұл кішкентай қадамдар. Ең маңызды қадамдардың бірі - TCP қосылымын баптау, ал мұның өзегі - үш жақты қолма-қол.

Бұл мақалада үш жақты қолдың тілі процедурасы, процесі және маңыздылығы талқыланады. Қадам бойынша, біз үш жақты қол алысу керектігін, оның тұрақтылығы мен сенімділігін және деректерді берудің қаншалықты маңызды екенін түсіндіреміз. Үш жақты қолды тереңірек түсінумен біз желілік байланыстың негізгі тетіктері мен TCP қосылыстарының сенімділігі туралы көбірек білеміз.

TCP үш жақты қол ұстасу процесі және мемлекеттік ауысулар
TCP - бұл байланысқа бағытталған көлік протоколы, ол деректерді беруге дейін қосылуды қажет етеді. Бұл байланыс орнату процесі үш жақты қолмен жасалады.

 TCP үш жақты қол ұстасу

Әр қосылымда жіберілген TCP пакеттеріне мұқият қарастырайық.

Бастапқыда клиент те, сервер де жабық. Біріншіден, сервер портты белсенді түрде тыңдайды және тыңдау күйінде, яғни серверді іске қосу керек дегенді білдіреді. Әрі қарай, клиент WebPage бағдарламасына кіруге дайын, сервермен байланыс орнатуы керек. Бірінші байланыс пакетінің форматы келесідей:

 Packet

Клиент қосылымды бастаған кезде, ол кездейсоқ бастапқы тізбегі санын (Client_isn) жасайды және оны TCP тақырыбының «реттік нөмірі» өрісіне орналастырады. Сонымен бірге, клиент Syn Flage Position-ді 1-ге орнатады, шығыс пакеттің Syn пакеті болып табылады. Клиент бірінші синхрондау пакетін серверге жіберу арқылы сервермен байланыс орнатқысы келетіндігін көрсетеді. Бұл пакетте қолданба қабаты туралы мәліметтер жоқ (бұл, деректер жіберілген). Осы кезде клиенттің күйі Syn-Syt ұсынылған деп белгіленеді.

Syn + ACK пакеті

Сервер клиенттен Syn пакетін алған кезде, ол өзінің жеке сериялық нөмірін (Server_isn) кездейсоқ түрде бастайды, содан кейін TCP тақырыбының «сериялық нөміріне» қосылады. Әрі қарай, сервер «растау нөмірі» өрісіне енгізеді және Synd əн де, ACK екі жағынан 1-ге кіреді. Соңында, сервер пакетті клиентке жібереді, оның құрамында бағдарламалық деректер жоқ (және серверге арналған деректер жоқ). Қазіргі уақытта сервер Syn-RCVD күйінде.

ACK пакеті

Клиент серверден пакетті алғаннан кейін, соңғы жауап пакетіне жауап беру үшін келесі оңтайландыруларды орындау қажет. Біріншіден, Клиент жауап пакетінің TCP тақырыбын 1-ге орнатады; Екіншіден, Клиент «Жауап нөмірін растау» өрісіндегі Server_isn + 1 мәніне кіреді; Соңында, клиент пакетті серверге жібереді. Бұл пакет клиенттің деректерін серверге тасымалдай алады. Осы операциялар аяқталғаннан кейін клиент белгіленген мемлекетке кіреді.

Сервер жауап беру пакетін клиенттен алғаннан кейін, ол сонымен қатар белгіленген күйге ауысады.

Жоғарыда көрсетілген процесстен көріп отырғаныңыздай, үш жақты қол ұстасу кезінде, үшінші қол алысуға деректерді тасымалдауға рұқсат етіледі, бірақ алғашқы екі қол алысуы жоқ. Бұл сауалнамада жиі сұралатын сұрақ. Үш жақты қол ұстасу аяқталғаннан кейін, екі тарап екі тарап қосылым сәтті орнатылғанын көрсетеді, бұл клиент пен сервер бір-біріне деректерді жібере бастайды.

Неліктен үш қол алысу керек? Екі рет емес, төрт рет?
Жалпы жауап », - деді, өйткені үш жақты қол алысуы қабылдауға және жіберуге кепілдік береді». Бұл жауап дұрыс, бірақ бұл тек бетінің себебі, басты себепті алға қоймайды. Төмендегілерде мен үштік қол алысудың себептерін үш аспектілерден талпынамын, бұл мәселені түсінуіміз үшін үш аспектілерден арыламын.

Үш жақты қолмендік тарихи қайталанған қосылыстарды инициализациялаудан аулақ бола алады (негізгі себеп)
Үш жақты қол алысу екі тараптың да сенімді бастапқы санын алғанына кепілдік береді.
Үш жақты қол алысу ресурстарды ысырап етуден аулақ болады.

1-себеп: Тарихи қайталанатын қосымшадан аулақ болыңыз
Қысқалып, үш жақты қолдың басты себебі - ескі қайталанатын қосылымды баптандырудан туындамау. Желілік ортада деректер пакеттерінің берілуі әрқашан тағайындалған хостқа тағайындалмайды, ал ескі деректер пакеттері алдымен желілік кептелу және басқа себептер бойынша тағайындалған хостқа келуі мүмкін. Бұған жол бермеу үшін TCP байланыс орнату үшін үш жақты қол ұстасуды қолданады.

Үш жақты қол алысу тарихи қайталанатын қосымшалардан аулақ болады

Клиент бірнеше синхрондау қондырғысының пакеттерін қатарынан, желілік бітелу сияқты жағдайларда жіберген кезде, келесілер туындауы мүмкін:

1- Ескі синтузиттер серверге соңғы синхрондау пакеттеріне дейін келеді.
2- Сервер ескі синхрондау пакетін алғаннан кейін клиентке Syn + ACK пакетін жауап береді.
3- Клиент Synled + ACK пакетін алған кезде, ол қосылымның өзіндік контекстіне сәйкес тарихи байланыс (мерзімі аяқталған немесе күту нөмірі), содан кейін қосылымды тоқтату үшін RST пакетін серверге жібереді.

Екі қолданған қосылыммен, ағымдағы байланыс тарихи байланыс екенін анықтауға жол жоқ. Үш жақты қол ұстасу клиентке ағымдағы қосылым үшінші пакетті жіберуге дайын болған кезде, контекстке негізделген тарихи байланыс екенін анықтауға мүмкіндік береді.

1- Егер бұл тарихи байланыс болса (егер ол мерзімі аяқталған немесе күту уақыты аяқталған болса), үшінші қол алысу арқылы жіберілген пакет тарихи қосылымды тоқтату үшін RST пакеті болып табылады.
2- Егер ол тарихи байланыс болмаса, онда пакет үшінші рет жіберілген пакет ACK пакеті болып табылады, ал екі байланысшы тараптар байланыс орнатады.

Сондықтан, TCP-дің үш жақты қолды қолданатындығының басты себебі, ол тарихи байланыстардың алдын алу үшін қосылымды баптандырады.

2-себеп: екі тараптың алғашқы реттік нөмірлерін синхрондау
TCP протоколының екі жағы да бір реттік нөмірді ұстап тұруы керек, бұл сенімді берілістің негізгі факторы болып табылады. TCP қосылымдарында реттік нөмірлер маңызды рөл атқарады. Олар келесі әрекеттерді орындаңыз:

Ресивер қайталанатын деректерді жоя алады және деректердің дұрыстығын қамтамасыз ете алады.

Ресивер деректердің тұтастығын қамтамасыз ету үшін пакеттерді реттік нөмірдің реті бойынша ала алады.

● Реттік нөмір басқа тарап алған деректер пакетін анықтай алады, ол деректерді сенімді түрде беруді мүмкіндік береді.

Сондықтан, TCP қосылымын орнатқан кезде, Клиент синтингті бастапқы реттік нөмірі бар синтизентті жібереді және серверден клиенттің Syn пакетін сәтті қабылдауды көрсететін ACK пакетімен жауап беруді талап етеді. Содан кейін, сервер синтизаторды бастапқы реттік нөмірі бар, клиентке жібереді және бастапқы тізбегіш нөмірлердің сенімді болуын қамтамасыз ету үшін клиенттің бір рет және барлығына жауап беруді күтеді.

Екі тараптың алғашқы сериялық нөмірлерін синхрондаңыз

Төрт жақты қол алысуға да, екі тараптың алғашқы реттік нөмірлерін сенімді түрде синхрондау мүмкін болса да, екінші және үшінші қадамдар бір қадаммен біріктіруге болады, нәтижесінде үш жақты қол алысу керек. Алайда, екі қол алысу тек бір тараптың бастапқы реттік нөмірінің екінші тарапының сәтті қабылданғанына кепілдік бере алады, бірақ екі тараптың бастапқы реттік нөмірі расталуы мүмкін екендігіне кепілдік бере алмайды. Сондықтан, үш жақты қол алысу - TCP қосылымдарының тұрақтылығы мен сенімділігін қамтамасыз ету үшін ең жақсы таңдау.

3-себеп: ресурстарды ысырап етуден аулақ болыңыз
Егер тек «екі қол ұстасу» болса, клиенттің синтиті болған кезде, желіде клиент блокталған болса, клиент сервер жіберген ACK пакетін ала алмайды, сондықтан синхрон болады. Алайда, үшінші қол алысу болғандықтан, сервер қосылымды құру үшін ACK растауын алғанын анықтай алмайды. Сондықтан, сервер әр синхрондауды алғаннан кейін қосылымды ғана орната алады. Бұл келесілерге әкеледі:

Ресурстарды ысырап ету: егер клиенттің синтизенті бұғатталған болса, нәтижесінде бірнеше синхрондау пакеттерінің қайталанбас берілуі мүмкін, нәтиже сұранысты алғаннан кейін бірнеше артық жарамсыз қосылыстар орнатылады. Бұл сервер ресурстарының қажетсіз қалдықтарына әкеледі.

Хабарды сақтау: Үшінші қолдың жетіспеушілігіне байланысты, серверде клиенттің қосылымды белгілеу үшін ACK растауын дұрыс алғанын білмейді. Нәтижесінде, егер хабарламалар желіге жабысып қалса, клиент синтизарлықтарды қайта-қайта жібереді, кері қайта-қайта жібереді, бұл серверді үнемі жаңа қосылымдар орнатуға мәжбүр етеді. Бұл желінің бітелуі мен кідірісін арттырады және желінің жалпы жұмысына кері әсерін тигізеді.

Ресурстарды ысырап етуден аулақ болыңыз

Сондықтан, желілік қосылымның тұрақтылығы мен сенімділігін қамтамасыз ету үшін TCP осы мәселелердің пайда болуын болдырмау үшін үш жақты қол ұстасуды қолданады.

Қысқаша мазмұндама
ТаЖелілік пакеттік брокерTCP қосылымын құру үш жақты қолмен жасалады. Үш жақты қол ұстасу кезінде клиент алдымен Packet-ті синхрондау жалаушымен серверге жібереді, бұл қосылымды орнатқысы келетінін көрсетеді. Клиенттен сұранысты алғаннан кейін, сервер қосылым сұранысы қабылданғанын және өзінің бастапқы реттік нөмірін жіберетін және клиентке Synet және ACK жалаулары бар пакетке жауап береді. Соңында, клиент қосылым сәтті орнатылғанын көрсету үшін ACK жалауын серверге жауап береді. Осылайша, екі тарап орнықты күйде, ал деректерді бір-біріне жібере бастайды.

Жалпы алғанда, TCP қосылымын құру үшін үш жақты тұтыну процесі қосылуды және сенімділікті қамтамасыз етуге, тарихи байланыстарға қарағанда шатасудан және қалдықтарды қалдыруға және екі тараптың деректерді алуға және жіберуге болатындығын қамтамасыз етуге арналған.


POST TIME: қаңтар-08-2025