Tarmoq paketlari brokeri TCP ulanishlarining asosiy sirlari: Uch marta qo'l berib ko'rishish zarurati ravshanlashtirildi

TCP ulanishini sozlash
Internetda sayr qilganimizda, elektron pochta xabarini yuborganimizda yoki onlayn o'yin o'ynaganimizda, ko'pincha uning ortidagi murakkab tarmoq ulanishi haqida o'ylamaymiz. Biroq, aynan shu kichik qadamlar biz va server o'rtasidagi barqaror aloqani ta'minlaydi. Eng muhim qadamlardan biri bu TCP ulanishini sozlashdir va buning asosiy qismi uch tomonlama qo'l siqishdir.

Ushbu maqolada uch tomonlama qo'l berib ko'rishishning printsipi, jarayoni va ahamiyati batafsil muhokama qilinadi. Bosqichma-bosqich, biz uch tomonlama qo'l berib ko'rishish nima uchun kerakligini, u ulanish barqarorligi va ishonchliligini qanday ta'minlashini va ma'lumotlar uzatish uchun qanchalik muhimligini tushuntirib beramiz. Uch tomonlama qo'l berib ko'rishishni chuqurroq tushunish orqali biz tarmoq aloqasining asosiy mexanizmlarini yaxshiroq tushunamiz va TCP ulanishlarining ishonchliligi haqida aniqroq tasavvurga ega bo'lamiz.

TCP uch tomonlama qo'l berib ko'rishish jarayoni va holat o'tishlari
TCP - bu ulanishga yo'naltirilgan transport protokoli bo'lib, u ma'lumotlarni uzatishdan oldin ulanishni o'rnatishni talab qiladi. Ushbu ulanishni o'rnatish jarayoni uch tomonlama qo'l siqish orqali amalga oshiriladi.

 TCP uch tomonlama qo'l siqish

Keling, har bir ulanishda yuboriladigan TCP paketlarini batafsil ko'rib chiqaylik.

Dastlab, mijoz ham, server ham YOPIQ holatda bo'ladi. Birinchidan, server portni faol ravishda tinglaydi va LISTEN holatida bo'ladi, ya'ni server ishga tushirilishi kerak. Keyin, mijoz veb-sahifaga kirishni boshlashga tayyor. U server bilan ulanishni o'rnatishi kerak. Birinchi ulanish paketining formati quyidagicha:

 SYN paketi

Mijoz ulanishni boshlaganda, u tasodifiy boshlang'ich ketma-ketlik raqamini (client_isn) yaratadi va uni TCP sarlavhasining "Ketma-ketlik raqami" maydoniga joylashtiradi. Shu bilan birga, mijoz chiquvchi paket SYN paketi ekanligini ko'rsatish uchun SYN bayroq o'rnini 1 ga o'rnatadi. Mijoz serverga birinchi SYN paketini yuborish orqali server bilan ulanish o'rnatmoqchi ekanligini bildiradi. Ushbu paketda dastur qatlami ma'lumotlari (ya'ni yuborilgan ma'lumotlar) mavjud emas. Bu vaqtda mijozning holati SYN-SENT sifatida belgilanadi.

SYN+ACK paketi

Server mijozdan SYN paketini olganda, u tasodifiy ravishda o'zining seriya raqamini (server_isn) ishga tushiradi va keyin bu raqamni TCP sarlavhasining "Seriya raqami" maydoniga qo'yadi. Keyin, server "Tasdiqlash raqami" maydoniga client_isn + 1 kiritadi va SYN va ACK bitlarini 1 ga o'rnatadi. Nihoyat, server dastur qatlami ma'lumotlarini (va server yuborish uchun ma'lumotlarni) o'z ichiga olmaydigan paketni mijozga yuboradi. Bu vaqtda server SYN-RCVD holatida.

ACK paketi

Mijoz serverdan paketni olgandan so'ng, oxirgi javob paketiga javob berish uchun quyidagi optimallashtirishlarni amalga oshirishi kerak: Birinchidan, mijoz javob paketining TCP sarlavhasining ACK bitini 1 ga o'rnatadi; Ikkinchidan, mijoz "Javob raqamini tasdiqlash" maydoniga server_isn + 1 qiymatini kiritadi; Nihoyat, mijoz paketni serverga yuboradi. Ushbu paket mijozdan serverga ma'lumotlarni olib yurishi mumkin. Ushbu operatsiyalar bajarilgandan so'ng, mijoz STABLISHED holatiga o'tadi.

Server mijozdan javob paketini olgandan so'ng, u ham STABLISHED holatiga o'tadi.

Yuqoridagi jarayondan ko'rinib turibdiki, uch tomonlama qo'l berib ko'rishish amalga oshirilganda, uchinchi qo'l berib ko'rishish ma'lumotlarni olib yurishga ruxsat beriladi, ammo dastlabki ikkita qo'l berib ko'rishish bunday emas. Bu savol intervyularda tez-tez so'raladi. Uch tomonlama qo'l berib ko'rishish tugagandan so'ng, ikkala tomon ham STABLISHED holatiga o'tadi, bu ulanish muvaffaqiyatli o'rnatilganligini ko'rsatadi, bu vaqtda mijoz va server bir-biriga ma'lumotlarni yuborishni boshlashlari mumkin.

Nega uch marta qo'l berib ko'rishish kerak? Ikki marta emas, to'rt marta?
Umumiy javob: "Chunki uch tomonlama qo'l berib ko'rishish qabul qilish va yuborish imkoniyatini kafolatlaydi." Bu javob to'g'ri, lekin bu faqat yuzaki sabab, asosiy sababni keltirmaydi. Quyida men ushbu masalani chuqurroq tushunishimiz uchun uch tomonlama qo'l berib ko'rishish sabablarini uch jihatdan tahlil qilaman.

Uch tomonlama qo'l berib ko'rishish tarixiy jihatdan takrorlangan ulanishlarning boshlang'ich holatini samarali ravishda oldini oladi (asosiy sabab)
Uch tomonlama qo'l berib ko'rishish ikkala tomon ham ishonchli dastlabki ketma-ketlik raqamini olganligini kafolatlaydi.
Uch tomonlama qo'l berib ko'rishish resurslarni isrof qilishning oldini oladi.

1-sabab: Tarixiy takroriy qo'shilishlardan saqlaning
Xulosa qilib aytganda, uch tomonlama qo'l berib ko'rishishning asosiy sababi eski takroriy ulanishni ishga tushirish natijasida yuzaga keladigan chalkashliklarning oldini olishdir. Murakkab tarmoq muhitida ma'lumotlar paketlarining uzatilishi har doim ham belgilangan vaqtga muvofiq maqsadli xostga yuborilmaydi va tarmoq tiqilib qolishi va boshqa sabablarga ko'ra eski ma'lumotlar paketlari avval maqsadli xostga yetib kelishi mumkin. Buning oldini olish uchun TCP ulanishni o'rnatish uchun uch tomonlama qo'l berib ko'rishishdan foydalanadi.

uch tomonlama qo'l berib ko'rishish tarixiy takroriy aloqalarning oldini oladi

Mijoz ketma-ket bir nechta SYN ulanish o'rnatish paketlarini yuborganda, masalan, tarmoq tiqilib qolishi kabi holatlarda quyidagilar yuz berishi mumkin:

1- Eski SYN paketlari serverga eng so'nggi SYN paketlaridan oldin keladi.
2- Server eski SYN paketini olgandan so'ng mijozga SYN + ACK paketini yuboradi.
3- Mijoz SYN + ACK paketini olganda, u o'z kontekstiga ko'ra ulanish tarixiy ulanish (ketma-ketlik raqami tugagan yoki vaqt tugashi) ekanligini aniqlaydi va keyin ulanishni to'xtatish uchun RST paketini serverga yuboradi.

Ikki qo'l berib ko'rishish ulanishi bilan, joriy ulanish tarixiy ulanish ekanligini aniqlashning hech qanday usuli yo'q. Uch tomonlama qo'l berib ko'rishish mijozga uchinchi paketni yuborishga tayyor bo'lganda kontekstga asoslanib, joriy ulanish tarixiy ulanish ekanligini aniqlash imkonini beradi:

1- Agar bu tarixiy ulanish bo'lsa (ketma-ketlik raqami tugagan yoki vaqt tugagan), uchinchi qo'l siqish orqali yuborilgan paket tarixiy ulanishni to'xtatish uchun RST paketidir.
2- Agar bu tarixiy ulanish bo'lmasa, uchinchi marta yuborilgan paket ACK paketi bo'ladi va ikki aloqa qiluvchi tomon ulanishni muvaffaqiyatli o'rnatadi.

Shuning uchun, TCP uch tomonlama qo'l siqishdan foydalanishining asosiy sababi shundaki, u tarixiy ulanishlarning oldini olish uchun ulanishni ishga tushiradi.

2-sabab: Ikkala tomonning dastlabki ketma-ketlik raqamlarini sinxronlashtirish
TCP protokolining ikkala tomoni ham ketma-ketlik raqamini saqlab turishi kerak, bu esa ishonchli uzatishni ta'minlashning asosiy omili hisoblanadi. Ketma-ketlik raqamlari TCP ulanishlarida muhim rol o'ynaydi. Ular quyidagilarni bajaradilar:

Qabul qiluvchi takroriy ma'lumotlarni yo'q qilishi va ma'lumotlarning aniqligini ta'minlashi mumkin.

Qabul qiluvchi ma'lumotlarning yaxlitligini ta'minlash uchun paketlarni ketma-ketlik raqami tartibida qabul qilishi mumkin.

● Ketma-ketlik raqami boshqa tomon tomonidan qabul qilingan ma'lumotlar paketini aniqlay oladi, bu esa ishonchli ma'lumotlarni uzatish imkonini beradi.

Shuning uchun, TCP ulanishini o'rnatgandan so'ng, mijoz boshlang'ich ketma-ketlik raqami bilan SYN paketlarini yuboradi va serverdan mijozning SYN paketini muvaffaqiyatli qabul qilinganligini ko'rsatuvchi ACK paketi bilan javob berishini talab qiladi. Keyin, server mijozga boshlang'ich ketma-ketlik raqami bilan SYN paketini yuboradi va dastlabki ketma-ketlik raqamlari ishonchli sinxronlashtirilganligiga ishonch hosil qilish uchun mijozning bir marta va butunlay javob berishini kutadi.

Ikkala tomonning dastlabki seriya raqamlarini sinxronlashtiring

To'rt tomonlama qo'l berib ko'rishish ikkala tomonning dastlabki ketma-ketlik raqamlarini ishonchli tarzda sinxronlashtirish uchun ham mumkin bo'lsa-da, ikkinchi va uchinchi bosqichlarni bitta bosqichga birlashtirish mumkin, natijada uch tomonlama qo'l berib ko'rishish hosil bo'ladi. Biroq, ikkita qo'l berib ko'rishish faqat bir tomonning dastlabki ketma-ketlik raqami boshqa tomon tomonidan muvaffaqiyatli qabul qilinishini kafolatlaydi, ammo ikkala tomonning dastlabki ketma-ketlik raqami tasdiqlanishiga kafolat yo'q. Shuning uchun, uch tomonlama qo'l berib ko'rishish TCP ulanishlarining barqarorligi va ishonchliligini ta'minlash uchun eng yaxshi tanlovdir.

3-sabab: Resurslarni isrof qilishdan saqlaning
Agar faqat "ikki qo'l siqish" bo'lsa, mijozning SYN so'rovi tarmoqda bloklanganida, mijoz server tomonidan yuborilgan ACK paketini qabul qila olmaydi, shuning uchun SYN qayta yuboriladi. Biroq, uchinchi qo'l siqish bo'lmagani uchun, server mijoz ulanishni o'rnatish uchun ACK tasdiqini olganmi yoki yo'qligini aniqlay olmaydi. Shuning uchun, server har bir SYN so'rovini olgandan keyingina proaktiv ravishda ulanishni o'rnatishi mumkin. Bu quyidagilarga olib keladi:

Resurslarni isrof qilish: Agar mijozning SYN so'rovi bloklansa va natijada bir nechta SYN paketlari takroriy uzatilsa, server so'rovni olgandan so'ng bir nechta ortiqcha yaroqsiz ulanishlarni o'rnatadi. Bu server resurslarining keraksiz isrof qilinishiga olib keladi.

Xabarni saqlash: Uchinchi qo'l siqish yo'qligi sababli, server mijoz ulanishni o'rnatish uchun ACK tasdiqini to'g'ri olganmi yoki yo'qligini bilishning hech qanday usuliga ega emas. Natijada, agar xabarlar tarmoqda qolib ketsa, mijoz SYN so'rovlarini qayta-qayta yuborishda davom etadi, bu esa serverning doimiy ravishda yangi ulanishlarni o'rnatishiga olib keladi. Bu tarmoq tiqilib qolishi va kechikishini oshiradi va tarmoqning umumiy ishlashiga salbiy ta'sir qiladi.

Resurslarni isrof qilishdan saqlaning

Shuning uchun, tarmoq ulanishining barqarorligi va ishonchliligini ta'minlash uchun TCP ushbu muammolarning oldini olish uchun ulanishni o'rnatish uchun uch tomonlama qo'l siqishdan foydalanadi.

Xulosa
TheTarmoq paketlari brokeriTCP ulanishini o'rnatish uch tomonlama qo'l berib ko'rishish orqali amalga oshiriladi. Uch tomonlama qo'l berib ko'rishish paytida mijoz avval serverga SYN bayrog'i bo'lgan paketni yuboradi, bu uning ulanishni o'rnatmoqchi ekanligini bildiradi. Mijozdan so'rovni olgandan so'ng, server mijozga SYN va ACK bayroqlari bo'lgan paketga javob beradi, bu ulanish so'rovi qabul qilinganligini bildiradi va o'zining dastlabki ketma-ketlik raqamini yuboradi. Nihoyat, mijoz serverga ulanish muvaffaqiyatli o'rnatilganligini ko'rsatish uchun ACK bayrog'i bilan javob beradi. Shunday qilib, ikki tomon ORNATISHED holatida bo'ladi va bir-biriga ma'lumotlarni yuborishni boshlashlari mumkin.

Umuman olganda, TCP ulanishini o'rnatish uchun uch tomonlama qo'l berib ko'rishish jarayoni ulanish barqarorligi va ishonchliligini ta'minlash, tarixiy ulanishlar bo'yicha chalkashliklar va resurslarni isrof qilishning oldini olish hamda ikkala tomon ham ma'lumotlarni qabul qilish va yuborish imkoniyatiga ega bo'lishini ta'minlash uchun mo'ljallangan.


Joylashtirilgan vaqt: 2025-yil 8-yanvar