TCP ulanishini sozlash
Internetni kezganimizda, elektron pochta xabarini yuborganimizda yoki onlayn o'yin o'ynaganimizda, biz ko'pincha uning ortidagi murakkab tarmoq ulanishi haqida o'ylamaymiz. Biroq, biz va server o'rtasidagi barqaror aloqani ta'minlaydigan bu kichik qadamlardir. Eng muhim bosqichlardan biri bu TCP ulanishini o'rnatish va buning yadrosi uch tomonlama qo'l siqishdir.
Ushbu maqolada uch tomonlama qo'l siqish tamoyili, jarayoni va ahamiyati batafsil muhokama qilinadi. Bosqichma-bosqich biz uch tomonlama qoʻl siqish nima uchun kerakligini, ulanish barqarorligi va ishonchliligini qanday taʼminlashi va maʼlumotlarni uzatishda qanchalik muhimligini tushuntirib beramiz. Uch tomonlama qo'l siqishni chuqurroq tushunish bilan biz tarmoq aloqasining asosiy mexanizmlarini yaxshiroq tushunamiz va TCP ulanishlarining ishonchliligini aniqroq ko'ramiz.
TCP uch tomonlama qo'l siqish jarayoni va holatga o'tish
TCP 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.
Keling, har bir ulanishda yuboriladigan TCP paketlarini batafsil ko'rib chiqaylik.
Dastlab mijoz ham, server ham YOPIQ. Birinchidan, server portni faol ravishda tinglaydi va LISTEN holatida bo'ladi, ya'ni server ishga tushirilishi kerak. Keyinchalik, mijoz veb-sahifaga kirishni boshlashga tayyor. U server bilan ulanishni o'rnatishi kerak. Birinchi ulanish paketining formati quyidagicha:
Mijoz ulanishni boshlaganida, u tasodifiy boshlang'ich tartib raqamini (client_isn) hosil qiladi va uni TCP sarlavhasining "Sequence number" maydoniga joylashtiradi. Shu bilan birga, mijoz chiquvchi paket SYN paketi ekanligini ko'rsatish uchun SYN bayrog'i o'rnini 1 ga o'rnatadi. Mijoz birinchi SYN paketini serverga yuborish orqali server bilan aloqa o'rnatmoqchi ekanligini bildiradi. Ushbu paketda dastur qatlami ma'lumotlari (ya'ni yuborilgan ma'lumotlar) mavjud emas. Ushbu nuqtada mijozning holati SYN-SENT sifatida belgilanadi.
Server mijozdan SYN paketini olganida, u tasodifiy ravishda o'zining seriya raqamini (server_isn) ishga tushiradi va keyin bu raqamni TCP sarlavhasining "Serial raqami" maydoniga qo'yadi. Keyinchalik, server "Tasdiqlash raqami" maydoniga client_isn + 1 ni kiritadi va SYN va ACK bitlarini 1 ga o'rnatadi. Nihoyat, server mijozga paketni yuboradi, unda dastur qatlami ma'lumotlari yo'q (va server uchun ma'lumotlar yo'q) yuborish). Ayni paytda server SYN-RCVD holatida.
Mijoz serverdan paketni qabul qilgandan so'ng, yakuniy javob paketiga javob berish uchun quyidagi optimallashtirishlarni bajarishi 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 o'tkazishi mumkin. Ushbu operatsiyalar tugagandan so'ng, mijoz O'RNATISH holatiga kiradi.
Server mijozdan javob paketini olgandan so'ng, u ham O'RNATISH holatiga o'tadi.
Yuqoridagi jarayondan ko'rinib turibdiki, uch tomonlama qo'l siqishni amalga oshirayotganda, uchinchi qo'l siqish ma'lumotlarni olib yurishga ruxsat etiladi, lekin birinchi ikkita qo'l siqish emas. Bu intervyularda tez-tez so'raladigan savol. Uch tomonlama qo‘l siqish tugallangandan so‘ng, ikkala tomon ham ulanish muvaffaqiyatli o‘rnatilganligini ko‘rsatuvchi O‘RNATISH holatiga kiradi, shu nuqtada mijoz va server bir-biriga ma’lumotlarni yuborishni boshlashi mumkin.
Nega uchta qo'l siqish? Ikki marta emas, to'rt marta?
Umumiy javob: “Chunki uch tomonlama qo‘l siqish qabul qilish va jo‘natish imkoniyatini kafolatlaydi”. Bu javob to'g'ri, lekin bu faqat yuzaki sabab, asosiy sababni ilgari surmaydi. Quyida men ushbu masalani tushunishimizni chuqurlashtirish uchun uch tomonlama qo'l siqish sabablarini tahlil qilaman.
Uch tomonlama qo'l siqish tarixan takrorlangan ulanishlarni ishga tushirishdan samarali qochishi mumkin (asosiy sabab)
Uch tomonlama qo'l siqish ikkala tomonning ishonchli boshlang'ich tartib raqamini olganligini kafolatlaydi.
Uch tomonlama qo'l siqish resurslarni isrof qilishdan saqlaydi.
1-sabab: Tarixiy takroriy qo'shilishlardan saqlaning
Xulosa qilib aytganda, uch tomonlama qo'l siqishning asosiy sababi eski dublikat ulanishni ishga tushirish natijasida yuzaga kelgan chalkashliklarni oldini olishdir. Murakkab tarmoq muhitida ma'lumotlar paketlarini uzatish har doim ham belgilangan vaqtga muvofiq maqsadli xostga yuborilmaydi va tarmoq tiqilib qolishi va boshqa sabablarga ko'ra eski ma'lumotlar paketlari birinchi bo'lib maqsad xostga kelishi mumkin. Bunga yo'l qo'ymaslik uchun TCP ulanishni o'rnatish uchun uch tomonlama qo'l siqishdan foydalanadi.
Mijoz bir nechta SYN ulanish paketlarini ketma-ket yuborganda, tarmoq tiqilib qolishi kabi holatlarda quyidagilar yuzaga kelishi mumkin:
1- Eski SYN paketlari serverga oxirgi SYN paketlaridan oldin keladi.
2- Server eski SYN paketini olgandan keyin mijozga SYN + ACK paketiga javob beradi.
3- Mijoz SYN + ACK paketini qabul qilganda, u o'z kontekstiga ko'ra ulanish tarixiy ulanish (tartib raqami muddati tugagan yoki vaqt tugashi) ekanligini aniqlaydi va keyin ulanishni to'xtatish uchun RST paketini serverga yuboradi.
Ikki qo'l siqish aloqasi bilan joriy ulanish tarixiy aloqa ekanligini aniqlashning hech qanday usuli yo'q. Uch tomonlama qo'l siqish mijozga uchinchi paketni jo'natishga tayyor bo'lgan kontekstga asoslangan holda joriy ulanish tarixiy ulanish ekanligini aniqlash imkonini beradi:
1- Agar bu tarixiy ulanish bo'lsa (tartib raqami muddati tugagan yoki vaqt tugashi), uchinchi qo'l siqish orqali yuborilgan paket tarixiy ulanishni to'xtatish uchun RST paketidir.
2- Agar bu tarixiy aloqa bo'lmasa, uchinchi marta yuborilgan paket ACK paketidir va ikki muloqot qiluvchi tomon ulanishni muvaffaqiyatli o'rnatadilar.
Shuning uchun, TCP uch tomonlama qo'l siqishdan foydalanishining asosiy sababi tarixiy ulanishlarni oldini olish uchun ulanishni ishga tushirishidir.
2-sabab: Ikkala tomonning dastlabki tartib raqamlarini sinxronlashtirish
TCP protokolining har ikki tomoni ishonchli uzatishni ta'minlash uchun asosiy omil bo'lgan ketma-ketlik raqamini saqlashi kerak. TCP ulanishlarida ketma-ketlik raqamlari muhim rol o'ynaydi.Ular quyidagilarni bajaradi:
Qabul qiluvchi ikki nusxadagi ma'lumotlarni yo'q qilishi va ma'lumotlarning aniqligini ta'minlashi mumkin.
Qabul qiluvchi ma'lumotlarning yaxlitligini ta'minlash uchun paketlarni tartib raqami bo'yicha qabul qilishi mumkin.
● Tartib raqami boshqa tomon tomonidan qabul qilingan ma'lumotlar paketini aniqlab, ishonchli ma'lumotlarni uzatish imkonini beradi.
Shuning uchun, TCP ulanishini o'rnatgandan so'ng, mijoz boshlang'ich tartib raqami bilan SYN paketlarini yuboradi va serverdan mijozning SYN paketini muvaffaqiyatli qabul qilinganligini ko'rsatadigan ACK paketi bilan javob berishini talab qiladi. Shundan so'ng, server mijozga dastlabki tartib raqami bilan SYN paketini yuboradi va boshlang'ich tartib raqamlari ishonchli sinxronlanganligini ta'minlash uchun mijozdan bir marta va umuman javob berishini kutadi.
To'rt tomonlama qo'l siqish ikkala tomonning dastlabki tartib raqamlarini ishonchli sinxronlashtirish uchun ham mumkin bo'lsa-da, ikkinchi va uchinchi qadamlar bitta bosqichga birlashtirilishi mumkin, natijada uch tomonlama qo'l siqish paydo bo'ladi. Biroq, ikkita qo'l siqish faqat bir tomonning dastlabki tartib raqami boshqa tomon tomonidan muvaffaqiyatli qabul qilinishini kafolatlashi mumkin, ammo ikkala tomonning dastlabki tartib raqamini tasdiqlash mumkinligiga kafolat yo'q. Shuning uchun, uch tomonlama qo'l siqish TCP ulanishlarining barqarorligi va ishonchliligini ta'minlash uchun eng yaxshi tanlovdir.
3-sabab: Resurslarni isrof qilishdan saqlaning
Agar faqat "ikki marta qo'l siqish" mavjud bo'lsa, mijozning SYN so'rovi tarmoqda bloklanganda, mijoz server tomonidan yuborilgan ACK paketini ololmaydi, shuning uchun SYN qayta yuboriladi. Biroq, uchinchi qo'l siqish yo'qligi sababli, server mijoz ulanishni o'rnatish uchun ACK tasdiqini olganligini aniqlay olmaydi. Shuning uchun server har bir SYN so'rovini olgandan keyingina faol ravishda ulanishni o'rnatishi mumkin. Bu quyidagilarga olib keladi:
Resurslarning behuda sarflanishi: Agar mijozning SYN so'rovi bloklangan bo'lsa, natijada bir nechta SYN paketlarining takroriy uzatilishi yuzaga kelsa, server so'rovni olgandan keyin bir nechta ortiqcha noto'g'ri ulanishlarni o'rnatadi. Bu server resurslarining keraksiz isrof qilinishiga olib keladi.
Xabarni saqlash: Uchinchi qoʻl siqishning yoʻqligi sababli, server mijozning ulanishni oʻrnatish uchun ACK tasdiqini toʻgʻri qabul qilganligini bilishning imkoni yoʻq. Natijada, agar xabarlar tarmoqda qolib ketsa, mijoz SYN so'rovlarini qayta-qayta yuborishda davom etadi va bu server doimiy ravishda yangi ulanishlarni o'rnatishiga sabab bo'ladi. Bu tarmoqning tiqilib qolishi va kechikishini oshiradi va tarmoqning umumiy ishlashiga salbiy ta'sir qiladi.
Shu sababli, tarmoq ulanishining barqarorligi va ishonchliligini ta'minlash uchun TCP ushbu muammolar yuzaga kelmasligi uchun ulanishni o'rnatish uchun uch tomonlama qo'l siqishidan foydalanadi.
Xulosa
TheTarmoq paketi brokeriTCP ulanishini o'rnatish uch tomonlama qo'l siqish orqali amalga oshiriladi. Uch tomonlama qo'l siqish paytida mijoz birinchi navbatda serverga SYN bayrog'i bilan paketni yuboradi, bu ulanish o'rnatmoqchi ekanligini ko'rsatadi. Mijozdan so'rovni olgandan so'ng, server mijozga SYN va ACK bayroqlari bilan paketga javob beradi, bu ulanish so'rovi qabul qilinganligini ko'rsatadi va o'zining dastlabki tartib raqamini yuboradi. Nihoyat, mijoz ulanish muvaffaqiyatli o'rnatilganligini bildirish uchun serverga ACK bayrog'i bilan javob beradi. Shunday qilib, ikki tomon TURLI holatidadir va bir-biriga ma'lumot yuborishni boshlashi mumkin.
Umuman olganda, TCP ulanishini o'rnatish uchun uch tomonlama qo'l siqish jarayoni ulanish barqarorligi va ishonchliligini ta'minlash, tarixiy ulanishlar bo'yicha chalkashlik va resurslarni isrof qilishning oldini olish va ikkala tomonning ma'lumotlarni qabul qilish va yuborish imkoniyatini ta'minlash uchun mo'ljallangan.
Xabar vaqti: 2025 yil 08-yanvar