TCP туташуу орнотуу
Биз интернетти карап, электрондук кат жөнөткөндө же онлайн оюн ойногондо, анын артында турган татаал тармак байланышы жөнүндө ойлонбойбуз. Бирок, дал ушул кичинекей кадамдар биздин сервер менен туруктуу байланышты камсыз кылат. Эң маанилүү кадамдардын бири - TCP туташуусун орнотуу жана мунун өзөгү - үч тараптуу кол алышуу.
Бул макалада үч тараптуу кол алышуунун принциби, процесси жана маанилүүлүгү кеңири талкууланат. Этап-этабы менен биз үч тараптуу кол алышуу эмне үчүн керек экенин, ал туташуунун туруктуулугун жана ишенимдүүлүгүн кантип камсыздаарын жана маалыматтарды өткөрүү үчүн канчалык маанилүү экенин түшүндүрүп беребиз. Үч тараптуу кол алышууну тереңирээк түшүнүү менен, биз тармактык байланыштын негизги механизмдерин жакшыраак түшүнөбүз жана TCP байланыштарынын ишенимдүүлүгүн айкыныраак көрөбүз.
TCP үч тараптуу кол алышуу процесси жана абалга өтүү
TCP - бул туташууга багытталган транспорттук протокол, ал маалыматтарды берүүдөн мурун байланыш түзүүнү талап кылат. Бул байланышты орнотуу процесси үч тараптуу кол алышуу аркылуу ишке ашырылат.
Келгиле, ар бир байланышта жөнөтүлгөн TCP пакеттерин кененирээк карап чыгалы.
Башында кардар да, сервер да ЖАБЫК. Биринчиден, сервер портту активдүү угат жана LISTEN абалында болот, бул серверди баштоо керек дегенди билдирет. Андан кийин кардар веб-баракчага кире баштоого даяр. Ал сервер менен байланыш түзүшү керек. Биринчи туташуу пакетинин форматы төмөнкүдөй:
Кардар туташууну баштаганда, ал туш келди баштапкы катар номерин (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 бул көйгөйлөрдүн пайда болушуна жол бербөө үчүн байланышты орнотуу үчүн үч тараптуу кол алышууну колдонот.
Жыйынтык
TheNetwork Packet BrokerTCP байланышын орнотуу үч тараптуу кол алышуу менен ишке ашырылат. Үч тараптуу кол алышуу учурунда кардар адегенде SYN желеги бар пакетти серверге жөнөтөт, бул анын байланыш түзүүнү каалап жатканын көрсөтүүдө. Кардардан суроо-талапты алгандан кийин сервер кардарга SYN жана ACK желектери бар пакетке жооп берет, бул туташуунун өтүнүчү кабыл алынгандыгын көрсөтүп, өзүнүн баштапкы катар номерин жөнөтөт. Акырында, кардар серверге ACK желеги менен жооп берип, байланыш ийгиликтүү орнотулганын көрсөтөт. Ошентип, эки тарап ТҮЗҮЛГӨН абалда жана бири-бирине маалыматтарды жөнөтө башташы мүмкүн.
Жалпысынан алганда, TCP туташуусун орнотуу үчүн үч тараптуу кол алышуу процесси туташуунун туруктуулугун жана ишенимдүүлүгүн камсыз кылуу, тарыхый байланыштар боюнча чаташтырууларды жана ресурстарды ысырап кылууну болтурбоо жана эки тараптын тең маалыматтарды кабыл алуу жана жөнөтүү мүмкүнчүлүгүн камсыз кылуу үчүн иштелип чыккан.
Посттун убактысы: Январь-08-2025