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 мәнін енгізеді; Соңында клиент пакетті серверге жібереді. Бұл пакет деректерді клиенттен серверге тасымалдай алады. Осы операцияларды аяқтағаннан кейін клиент ҚҰРЫЛҒАН күйге өтеді.
Сервер клиенттен жауап пакетін алғаннан кейін, ол сонымен бірге ҚҰРЫЛҒАН күйге ауысады.
Жоғарыда көрсетілген процестен көріп отырғаныңыздай, үш жақты қол алысуды орындау кезінде үшінші қол алысу деректерін тасымалдауға рұқсат етіледі, бірақ алғашқы екі қол алысу жоқ. Бұл сұхбатта жиі қойылатын сұрақ. Үш жақты қол алысу аяқталғаннан кейін екі тарап қосылымның сәтті орнатылғанын көрсете отырып, ҚҰРЫЛҒАН күйге енеді, осы кезде клиент пен сервер бір-біріне деректерді жіберуді бастай алады.
Неге үш рет қол алысу? Екі емес, төрт рет пе?
Жалпы жауап: «Себебі үш жақты қол алысу қабылдау және жіберу мүмкіндігіне кепілдік береді». Бұл жауап дұрыс, бірақ бұл тек үстіңгі себеп, басты себепті алға тартпайды. Төменде мен бұл мәселені түсінуді тереңдету үшін үш аспектіден қол алысудың себептерін талдаймын.
Үш жақты қол алысу тарихи қайталанатын қосылыстардың инициализациясын тиімді болдырмайды (негізгі себеп)
Үш жақты қол алысу екі тараптың сенімді бастапқы реттік нөмірін алғанына кепілдік береді.
Үш жақты қол алысу ресурстарды ысырап етуден сақтайды.
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 қосылымын орнатуға арналған үш жақты қол алысу процесі қосылым тұрақтылығы мен сенімділігін қамтамасыз етуге, тарихи қосылымдар кезінде шатастыруға және ресурстарды ысырап етпеуге және екі тараптың деректерді қабылдау және жіберу мүмкіндігін қамтамасыз ету үшін жасалған.
Жіберу уақыты: 08 қаңтар 2025 ж