TCP қосылымын орнату
Вебті шолғанда, электрондық пошта жібергенде немесе онлайн ойын ойнағанда, біз көбінесе оның артындағы күрделі желілік байланыс туралы ойламаймыз. Дегенмен, дәл осы кішкентай қадамдар біз бен сервер арасындағы тұрақты байланысты қамтамасыз етеді. Ең маңызды қадамдардың бірі - TCP қосылымын орнату, ал оның негізгі бөлігі - үш жақты қол алысу.
Бұл мақалада үш жақты байланыс орнатудың принципі, процесі және маңыздылығы егжей-тегжейлі талқыланады. Біз үш жақты байланыс орнатудың не үшін қажет екенін, оның қосылымның тұрақтылығы мен сенімділігін қалай қамтамасыз ететінін және деректерді беру үшін қаншалықты маңызды екенін біртіндеп түсіндіреміз. Үш жақты байланыс орнатуды тереңірек түсіну арқылы біз желілік байланыстың негізгі механизмдерін жақсырақ түсінеміз және TCP қосылымдарының сенімділігі туралы айқынырақ түсінікке ие боламыз.
TCP үш жақты қол алысу процесі және күй ауысулары
TCP - деректерді беру алдында қосылымды орнатуды талап ететін қосылымға бағытталған тасымалдау хаттамасы. Бұл қосылымды орнату процесі үш жақты қол алысу арқылы жүзеге асырылады.
Әрбір қосылымда жіберілетін TCP пакеттерін толығырақ қарастырайық.
Бастапқыда клиент те, сервер де ЖАБЫҚ күйде болады. Біріншіден, сервер портты белсенді түрде тыңдайды және ТЫҢДАУ күйінде болады, бұл серверді іске қосу керек дегенді білдіреді. Келесіде клиент веб-бетке кіруді бастауға дайын. Ол сервермен байланыс орнатуы керек. Бірінші қосылым пакетінің пішімі келесідей:
Клиент қосылымды бастаған кезде, ол кездейсоқ бастапқы реттік нөмірді (client_isn) жасайды және оны TCP тақырыбының "Реттік нөмір" өрісіне орналастырады. Сонымен қатар, клиент шығыс пакеттің SYN пакеті екенін көрсету үшін SYN жалаушасының орнын 1-ге орнатады. Клиент серверге бірінші SYN пакетін жіберу арқылы сервермен байланыс орнатқысы келетінін көрсетеді. Бұл пакетте қолданбалы деңгей деректері (яғни жіберілген деректер) жоқ. Бұл кезде клиенттің күйі SYN-SENT деп белгіленеді.
Сервер клиенттен SYN пакетін алған кезде, ол кездейсоқ түрде өзінің сериялық нөмірін (server_isn) инициализациялайды, содан кейін сол нөмірді TCP тақырыбының "Сериялық нөмір" өрісіне қояды. Әрі қарай, сервер "Растау нөмірі" өрісіне client_isn + 1 енгізеді және SYN және ACK биттерін 1-ге орнатады. Соңында, сервер қолданбалы деңгейдегі деректері жоқ (және серверге жіберуге арналған деректері жоқ) пакетті клиентке жібереді. Қазіргі уақытта сервер SYN-RCVD күйінде болады.
Клиент серверден пакетті алғаннан кейін, соңғы жауап пакетіне жауап беру үшін келесі оңтайландыруларды орындауы керек: Біріншіден, клиент жауап пакетінің TCP тақырыбының ACK битін 1-ге орнатады; Екіншіден, клиент "Жауап нөмірін растау" өрісіне server_isn + 1 мәнін енгізеді; Соңында, клиент пакетті серверге жібереді. Бұл пакет деректерді клиенттен серверге тасымалдай алады. Осы операциялар аяқталғаннан кейін клиент ОРНАТЫЛҒАН күйге өтеді.
Сервер клиенттен жауап пакетін алғаннан кейін, ол да STABLISHED күйіне ауысады.
Жоғарыдағы процестен көріп отырғаныңыздай, үш жақты қол алысу кезінде үшінші қол алысу деректерді тасымалдауға мүмкіндік береді, бірақ алғашқы екі қол алысу болмайды. Бұл сұрақ сұхбаттарда жиі қойылады. Үш жақты қол алысу аяқталғаннан кейін екі тарап та ОРНАТЫЛҒАН күйге өтеді, бұл қосылымның сәтті орнатылғанын білдіреді, сол кезде клиент пен сервер бір-біріне деректер жібере бастайды.
Неге үш рет қол алысу керек? Екі емес, төрт рет?
Жалпы жауап: «Өйткені үш жақты қол алысу қабылдау және жіберу мүмкіндігін кепілдейді». Бұл жауап дұрыс, бірақ бұл тек үстірт себеп, негізгі себебін көрсетпейді. Төменде мен бұл мәселені тереңірек түсіну үшін үш жақты қол алысудың себептерін үш тұрғыдан талдаймын.
Үш жақты қол алысу тарихи қайталанатын байланыстардың инициализациясын тиімді түрде болдырмауы мүмкін (негізгі себеп)
Үш жақты қол алысу екі тараптың да сенімді бастапқы реттік нөмір алғанына кепілдік береді.
Үш жақты қол алысу ресурстарды ысырап етуден сақтайды.
1-себеп: Тарихи қайталанатын қосылыстардан аулақ болыңыз
Қысқаша айтқанда, үш жақты байланыс орнатудың негізгі себебі - ескі қайталанатын қосылымды инициализациялаудан туындайтын шатасуларды болдырмау. Күрделі желілік ортада деректер пакеттерін беру әрқашан белгіленген уақытқа сәйкес тағайындалған хостқа жіберілмейді, ал ескі деректер пакеттері желінің кептелісі және басқа себептерге байланысты тағайындалған хостқа алдымен келуі мүмкін. Мұны болдырмау үшін TCP қосылымды орнату үшін үш жақты байланыс орнатуды пайдаланады.
Клиент желінің кептелуі сияқты жағдайларда бірнеше SYN қосылымын орнату пакеттерін бірінен соң бірін жіберген кезде, келесі жағдайлар орын алуы мүмкін:
1- Ескі SYN пакеттері серверге ең соңғы SYN пакеттерінен бұрын келеді.
2- Ескі SYN пакетін алғаннан кейін сервер клиентке SYN + ACK пакетіне жауап береді.
3- Клиент SYN + ACK пакетін алған кезде, ол өз контекстіне сәйкес қосылымның тарихи қосылым екенін (реттік нөмірінің мерзімі біткен немесе күту уақыты аяқталған) анықтайды, содан кейін қосылымды тоқтату үшін RST пакетін серверге жібереді.
Екі қол алысу қосылымы арқылы ағымдағы қосылымның тарихи қосылым екенін анықтау мүмкін емес. Үш жақты қол алысу клиентке үшінші пакетті жіберуге дайын болған кезде контекстке сүйене отырып, ағымдағы қосылымның тарихи қосылым екенін анықтауға мүмкіндік береді:
1- Егер бұл тарихи байланыс болса (реттік нөмірдің мерзімі біткен немесе күту уақыты біткен), үшінші қол алысу арқылы жіберілген пакет тарихи байланысты үзуге арналған RST пакеті болып табылады.
2- Егер бұл тарихи байланыс болмаса, үшінші рет жіберілген пакет ACK пакеті болып табылады және екі байланысатын тарап қосылымды сәтті орнатады.
Сондықтан, TCP үш жақты қол алысуды қолдануының негізгі себебі - тарихи қосылымдарды болдырмау үшін қосылымды инициализациялайды.
2-себеп: Екі тараптың да бастапқы реттік нөмірлерін синхрондау
TCP хаттамасының екі жағы да сенімді беруді қамтамасыз етудің негізгі факторы болып табылатын реттік нөмірді сақтауы керек. Реттік нөмірлер TCP қосылымдарында маңызды рөл атқарады. Олар келесі әрекеттерді орындайды:
Қабылдаушы қайталанатын деректерді жоя алады және деректердің дәлдігін қамтамасыз ете алады.
Деректердің тұтастығын қамтамасыз ету үшін қабылдағыш пакеттерді реттік нөмірдің ретімен қабылдай алады.
● Реттік нөмір екінші тарап алған деректер пакетін анықтай алады, бұл сенімді деректерді беруді қамтамасыз етеді.
Сондықтан, TCP қосылымын орнатқаннан кейін, клиент бастапқы реттік нөмірі бар SYN пакеттерін жібереді және серверден клиенттің SYN пакетінің сәтті қабылданғанын көрсететін ACK пакетімен жауап беруін талап етеді. Содан кейін сервер клиентке бастапқы реттік нөмірі бар SYN пакетін жібереді және бастапқы реттік нөмірлердің сенімді синхрондалғанына көз жеткізу үшін клиенттің біржолата жауап беруін күтеді.
Төрт жақты қол алысу екі тараптың бастапқы реттік нөмірлерін сенімді түрде синхрондау үшін де мүмкін болса да, екінші және үшінші қадамдарды бір қадамға біріктіруге болады, нәтижесінде үш жақты қол алысу пайда болады. Дегенмен, екі қол алысу тек бір тараптың бастапқы реттік нөмірінің екінші тарапқа сәтті қабылдануына кепілдік бере алады, бірақ екі тараптың да бастапқы реттік нөмірінің расталуына кепілдік жоқ. Сондықтан, TCP қосылымдарының тұрақтылығы мен сенімділігін қамтамасыз ету үшін үш жақты қол алысу ең жақсы таңдау болып табылады.
3-себеп: Ресурстарды ысырап етуден аулақ болыңыз
Егер тек «екі қол алысу» болса, клиенттің SYN сұрауы желіде бұғатталған кезде, клиент сервер жіберген ACK пакетін ала алмайды, сондықтан SYN қайта жіберіледі. Дегенмен, үшінші қол алысу болмағандықтан, сервер клиенттің қосылымды орнату үшін ACK растауын алғанын анықтай алмайды. Сондықтан, сервер әрбір SYN сұрауын алғаннан кейін ғана белсенді түрде қосылымды орната алады. Бұл келесіге әкеледі:
Ресурстардың босқа шығындалуы: Егер клиенттің SYN сұрауы бұғатталса, нәтижесінде бірнеше SYN пакеттері қайта-қайта берілсе, сервер сұрауды алғаннан кейін бірнеше артық жарамсыз қосылымдарды орнатады. Бұл сервер ресурстарының қажетсіз босқа шығындалуына әкеледі.
Хабарламаны сақтау: Үшінші қол алысудың болмауына байланысты сервер клиенттің қосылымды орнату үшін ACK растауын дұрыс алғанын біле алмайды. Нәтижесінде, хабарламалар желіде тұрып қалса, клиент SYN сұрауларын қайта-қайта жібере береді, бұл сервердің үнемі жаңа қосылымдарды орнатуына әкеледі. Бұл желінің кептелісі мен кідірісін арттырады және желінің жалпы жұмысына кері әсер етеді.
Сондықтан, желілік қосылымның тұрақтылығы мен сенімділігін қамтамасыз ету үшін, TCP осы мәселелердің туындауын болдырмау үшін қосылымды орнату үшін үш жақты қол алысуды пайдаланады.
Қысқаша мазмұны
TheЖелілік пакет брокеріTCP қосылымын орнату үш жақты қол алысу арқылы жүзеге асырылады. Үш жақты қол алысу кезінде клиент алдымен серверге SYN жалаушасы бар пакет жібереді, бұл оның қосылым орнатқысы келетінін білдіреді. Клиенттен сұраныс алғаннан кейін, сервер клиентке SYN және ACK жалаушалары бар пакетке жауап береді, бұл қосылым сұранысының қабылданғанын көрсетеді және өзінің бастапқы реттік нөмірін жібереді. Соңында, клиент қосылымның сәтті орнатылғанын көрсету үшін серверге ACK жалаушасы бар жауап береді. Осылайша, екі тарап ОРНАТЫЛҒАН күйде болады және бір-біріне деректер жібере бастай алады.
Жалпы алғанда, TCP қосылымын орнатуға арналған үш жақты қол алысу процесі қосылымның тұрақтылығы мен сенімділігін қамтамасыз етуге, тарихи қосылымдарға қатысты шатасуларды және ресурстарды босқа жұмсауды болдырмауға және екі тараптың да деректерді қабылдап, жібере алатынына көз жеткізуге арналған.
Жарияланған уақыты: 2025 жылғы 8 қаңтар






