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 абалына өтөт.
Сервер кардардан жооп пакетин алгандан кийин, ал дагы STABLISHED абалына өтөт.
Жогорудагы процесстен көрүнүп тургандай, үч тараптуу кол алышууну аткарууда, үчүнчү кол алышууга маалыматтарды алып жүрүүгө уруксат берилет, бирок алгачкы эки кол алышууда андай болбойт. Бул суроо интервьюларда көп берилет. Үч тараптуу кол алышуу аяктагандан кийин, эки тарап тең 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-январы






