TCP ning maxfiy quroli: Tarmoq oqimini boshqarish va tarmoq tiqilib qolishini boshqarish

TCP ishonchliligi transporti
Biz hammamiz TCP protokoli bilan ishonchli transport protokoli sifatida tanishmiz, ammo u transportning ishonchliligini qanday ta'minlaydi?

Ishonchli uzatishga erishish uchun ma'lumotlarning buzilishi, yo'qolishi, takrorlanishi va tartibsiz parchalar kabi ko'plab omillarni hisobga olish kerak. Agar bu muammolar hal qilinmasa, ishonchli uzatishga erishib bo'lmaydi.

Shuning uchun, TCP ishonchli uzatishga erishish uchun ketma-ketlik raqami, tasdiqlash javobi, qayta yuborishni boshqarish, ulanishni boshqarish va oynani boshqarish kabi mexanizmlardan foydalanadi.

Ushbu maqolada biz TCP ning surma oynasi, oqimni boshqarish va tiqilib qolishni boshqarishga e'tibor qaratamiz. Qayta uzatish mexanizmi keyingi bo'limda alohida ko'rib chiqiladi.

Tarmoq oqimini boshqarish
Tarmoq oqimini boshqarish yoki Tarmoq trafikini boshqarish deb nomlanuvchi narsa aslida ishlab chiqaruvchilar va iste'molchilar o'rtasidagi nozik munosabatlarning namoyonidir. Siz, ehtimol, bu stsenariyga ishda yoki suhbatlarda ko'p duch kelgansiz. Agar ishlab chiqaruvchining ishlab chiqarish qobiliyati iste'molchining iste'mol qilish qobiliyatidan ancha yuqori bo'lsa, bu navbatning cheksiz o'sishiga olib keladi. Jiddiyroq holatda, RabbitMQ xabarlari juda ko'p to'planib qolsa, bu butun MQ serverining ishlashining pasayishiga olib kelishi mumkinligini bilishingiz mumkin. TCP uchun ham xuddi shunday; agar tekshirilmasa, tarmoqqa juda ko'p xabarlar yuboriladi va iste'molchilar o'z imkoniyatlaridan oshib ketadi, ishlab chiqaruvchilar esa takroriy xabarlarni yuborishda davom etadilar, bu esa tarmoqning ishlashiga katta ta'sir qiladi.

Ushbu hodisani hal qilish uchun TCP jo'natuvchiga qabul qiluvchining haqiqiy qabul qilish quvvatiga asoslanib yuborilgan ma'lumotlar miqdorini boshqarish mexanizmini taqdim etadi, bu oqimni boshqarish deb nomlanadi. Qabul qiluvchi qabul qilish oynasini, jo'natuvchi esa yuborish oynasini saqlaydi. Shuni ta'kidlash kerakki, bu Windows faqat bitta TCP ulanishi uchun mo'ljallangan va barcha ulanishlar bitta oynani baham ko'rmaydi.

TCP qabul qilish oynasi uchun o'zgaruvchidan foydalanib, oqimni boshqarishni ta'minlaydi. Qabul qilish oynasi jo'natuvchiga hali qancha kesh maydoni mavjudligini ko'rsatadi. Jo'natuvchi qabul qiluvchining haqiqiy qabul qilish quvvatiga qarab yuborilgan ma'lumotlar miqdorini boshqaradi.

Qabul qiluvchi xost jo'natuvchiga qabul qila oladigan ma'lumotlar hajmi haqida xabar beradi va jo'natuvchi ushbu limitgacha ma'lumotlarni yuboradi. Bu limit oyna hajmidir, TCP sarlavhasini eslaysizmi? Qabul qiluvchi qabul qila oladigan yoki qabul qilishni istagan baytlar sonini ko'rsatish uchun ishlatiladigan qabul qilish oynasi maydoni mavjud.

Yuboruvchi xost vaqti-vaqti bilan qabul qiluvchi xost hali ham ma'lumotlarni qabul qila oladimi yoki yo'qligini aniqlash uchun ishlatiladigan oyna tekshiruvi paketini yuboradi. Qabul qiluvchining buferi toshib ketish xavfi tug'ilganda, yuboruvchiga yuborilgan ma'lumotlar miqdorini boshqarishni buyurish uchun oyna o'lchami kichikroq qiymatga o'rnatiladi.

Tarmoq oqimini boshqarish diagrammasi quyidagicha:

Yo'l harakati nazorati

Tarmoq tiqilib qolishini boshqarish
Tiqilishni boshqarishni joriy etishdan oldin, qabul qilish oynasi va yuborish oynasidan tashqari, asosan jo'natuvchi qabul qilish oynasiga ma'lumotlarni qanday tezlikda yuborishni boshlashi muammosini hal qilish uchun ishlatiladigan tiqilish oynasi ham mavjudligini tushunishimiz kerak. Shuning uchun, tiqilish oynasi TCP jo'natuvchisi tomonidan ham saqlanadi. Juda kam yoki juda ko'p ma'lumot yuborish ideal emasligi sababli, qancha ma'lumot yuborish maqsadga muvofiqligini aniqlash uchun bizga algoritm kerak, shuning uchun tiqilish oynasi tushunchasi paydo bo'ldi.

Avvalgi tarmoq oqimini boshqarishda biz jo'natuvchining qabul qiluvchining keshini ma'lumotlar bilan to'ldirishidan qochgan edik, lekin biz tarmoqda nima bo'layotganini bilmas edik. Odatda, kompyuter tarmoqlari umumiy muhitda bo'ladi. Natijada, boshqa xostlar o'rtasidagi aloqa tufayli tarmoq tiqilib qolishi mumkin.

Tarmoq tiqilib qolganda, agar ko'p miqdordagi paketlar jo'natishda davom etsa, bu kechikish va paketlarning yo'qolishi kabi muammolarga olib kelishi mumkin. Bu vaqtda TCP ma'lumotlarni qayta uzatadi, ammo qayta uzatish tarmoqqa yukni oshiradi, natijada katta kechikishlar va ko'proq paket yo'qotishlari yuzaga keladi. Bu yomon doiraga tushib qolishi va kattalashib borishi mumkin.

Shunday qilib, TCP tarmoqda nimalar bo'layotganini e'tiborsiz qoldirolmaydi. Tarmoq tiqilib qolganda, TCP yuboradigan ma'lumotlar miqdorini kamaytirish orqali o'zini qurbon qiladi.

Shuning uchun, jo'natuvchidan kelgan ma'lumotlar bilan butun tarmoqni to'ldirishning oldini olishga qaratilgan tiqilishni boshqarish taklif etiladi. Jo'natuvchi yuborishi kerak bo'lgan ma'lumotlar miqdorini tartibga solish uchun TCP tiqilish oynasi deb nomlangan tushunchani belgilaydi. Tiqilishni boshqarish algoritmi jo'natuvchi tomonidan yuboriladigan ma'lumotlar miqdorini boshqarish uchun tiqilish oynasining o'lchamini tarmoqning tiqilish darajasiga qarab sozlaydi.

Tiqilish oynasi nima? Buning yuborish oynasi bilan qanday aloqasi bor?

Tiqilish oynasi - bu jo'natuvchi tomonidan saqlanadigan va jo'natuvchi yuborishi mumkin bo'lgan ma'lumotlar miqdorini belgilaydigan holat o'zgaruvchisi. Tiqilish oynasi tarmoqning tiqilish darajasiga qarab dinamik ravishda o'zgaradi.

Yuboruvchi oyna - bu jo'natuvchi va qabul qiluvchi o'rtasida kelishilgan oyna o'lchami bo'lib, u qabul qiluvchi qabul qila oladigan ma'lumotlar miqdorini ko'rsatadi. Tiqilish oynasi va jo'natuvchi oynasi o'zaro bog'liq; jo'natuvchi oynasi odatda tiqilish va qabul qiluvchi oynalarning minimal qiymatiga teng, ya'ni swnd = min(cwnd, rwnd).

Tiqilish oynasi cwnd quyidagicha o'zgaradi:

Agar tarmoqda tiqilish bo'lmasa, ya'ni qayta uzatish vaqti tugamasa, tiqilish oynasi oshadi.

Agar tarmoqda tirbandlik bo'lsa, tirbandlik oynasi kamayadi.

Jo'natuvchi ACK tasdiqlash paketi belgilangan vaqt ichida qabul qilinganligini kuzatish orqali tarmoq tiqilib qolganligini aniqlaydi. Agar jo'natuvchi belgilangan vaqt ichida ACK tasdiqlash paketini olmasa, tarmoq tiqilib qolgan deb hisoblanadi.

Tiqilish oynasidan tashqari, TCP tiqilishi boshqaruv algoritmini muhokama qilish vaqti keldi. TCP tiqilishi boshqaruv algoritmi uchta asosiy qismdan iborat:

Sekin boshlash:Dastlab, cwnd tiqilib qolish oynasi nisbatan kichik va jo'natuvchi tarmoq sig'imiga tezda moslashish uchun tiqilib qolish oynasini eksponent ravishda oshiradi.
Tiqilishning oldini olish:Tiqilish oynasi ma'lum bir chegaradan oshib ketgandan so'ng, jo'natuvchi tiqilish oynasining o'sish tezligini sekinlashtirish va tarmoqni ortiqcha yuklamaslik uchun tiqilish oynasini chiziqli ravishda oshiradi.
Tez tiklanish:Agar tiqilib qolish yuzaga kelsa, jo'natuvchi tiqilib qolish oynasini ikki baravar kamaytiradi va qabul qilingan takroriy akklar orqali tarmoqni tiklash joyini aniqlash uchun tez tiklash holatiga o'tadi va keyin tiqilib qolish oynasini oshirishda davom etadi.

Sekin boshlash
TCP ulanishi o'rnatilganda, tiqilib qolish oynasi cwnd dastlab minimal MSS (maksimal segment hajmi) qiymatiga o'rnatiladi. Shu tarzda, dastlabki yuborish tezligi taxminan MSS/RTT bayt/soniyani tashkil qiladi. Haqiqiy mavjud o'tkazish qobiliyati odatda MSS/RTT dan ancha katta, shuning uchun TCP optimal yuborish tezligini topishni xohlaydi, bunga sekin boshlash orqali erishish mumkin.

Sekin ishga tushirish jarayonida tiqilib qolish oynasi cwnd qiymati 1 MSS ga o'rnatiladi va uzatilgan paket segmenti har safar tan olinganda, cwnd qiymati bitta MSS ga oshiriladi, ya'ni cwnd qiymati 2 MSS ga teng bo'ladi. Shundan so'ng, paket segmentining har bir muvaffaqiyatli uzatilishi uchun cwnd qiymati ikki baravar oshiriladi va hokazo. Muayyan o'sish jarayoni quyidagi rasmda ko'rsatilgan.

 Tarmoq tiqilib qolishini nazorat qilish

Biroq, jo'natish tezligi har doim ham o'sishi mumkin emas; o'sish qachondir tugashi kerak. Xo'sh, jo'natish tezligining oshishi qachon tugaydi? Sekin boshlash odatda jo'natish tezligining oshishini bir necha usullardan biri bilan to'xtatadi:

Birinchi usul - sekin ishga tushirish jarayonida paket yo'qolishi holati. Paket yo'qolganda, TCP jo'natuvchining tiqilib qolish oynasi cwnd ni 1 ga o'rnatadi va sekin ishga tushirish jarayonini qayta boshlaydi. Bu nuqtada, sekin ishga tushirish chegarasi ssthresh tushunchasi kiritiladi, uning boshlang'ich qiymati paket yo'qotilishini keltirib chiqaradigan cwnd qiymatining yarmiga teng. Ya'ni, tiqilib qolish aniqlanganda, ssthresh qiymati oyna qiymatining yarmiga teng.

Ikkinchi usul - sekin ishga tushirish chegarasi ssthresh qiymati bilan to'g'ridan-to'g'ri bog'liqlik. Tiqilish aniqlanganda ssthresh qiymati oyna qiymatining yarmiga teng bo'lganligi sababli, cwnd ssthresh dan kattaroq bo'lganda har ikki baravar ko'payish bilan paket yo'qolishi mumkin. Shuning uchun, cwnd ni ssthresh ga o'rnatish yaxshidir, bu esa TCP ning tiqilishni boshqarish rejimiga o'tishiga va sekin ishga tushirishni tugatishiga olib keladi.

Sekin ishga tushirishning oxirgi yo'li, agar uchta ortiqcha ACK aniqlansa, TCP tez qayta uzatishni amalga oshiradi va tiklash holatiga o'tadi. (Agar nima uchun uchta ACK paketi borligi aniq bo'lmasa, bu qayta uzatish mexanizmida alohida tushuntiriladi.)

Tiqilishning oldini olish
TCP tiqilishni boshqarish holatiga kirganda, cwnd tiqilish chegarasining yarmiga o'rnatiladi (sthresh). Bu shuni anglatadiki, har safar paket segmenti qabul qilinganda cwnd qiymatini ikki baravar oshirish mumkin emas. Buning o'rniga, nisbatan konservativ yondashuv qo'llaniladi, bunda har bir uzatish tugagandan so'ng cwnd qiymati faqat bitta MSS (paket segmentining maksimal uzunligi) ga oshiriladi. Masalan, hatto 10 ta paket segmenti tan olinsa ham, cwnd qiymati faqat bitta MSS ga oshadi. Bu chiziqli o'sish modeli bo'lib, u o'sishning yuqori chegarasiga ham ega. Paket yo'qolishi sodir bo'lganda, cwnd qiymati MSS ga o'zgartiriladi va sthresh qiymati cwndning yarmiga o'rnatiladi. Yoki u 3 ta ortiqcha ACK javobi olinganda MSS o'sishini ham to'xtatadi. Agar cwnd qiymatini ikki baravar kamaytirgandan keyin ham uchta ortiqcha ACK qabul qilinsa, ssthresh qiymati cwnd qiymatining yarmi sifatida qayd etiladi va tez tiklash holati kiritiladi.

Tez tiklanish
Tez tiklash holatida, tiqilish oynasi cwnd qiymati har bir qabul qilingan ortiqcha ACK, ya'ni ketma-ketlikda kelmaydigan ACK uchun bitta MSS ga oshiriladi. Bu tarmoqda muvaffaqiyatli uzatilgan paket segmentlaridan uzatish samaradorligini iloji boricha oshirish uchun foydalanish uchun amalga oshiriladi.

Yo'qolgan paket segmentining ACK manzili yetib kelganda, TCP cwnd qiymatini pasaytiradi va keyin tiqilishning oldini olish holatiga o'tadi. Bu tiqilish oynasining o'lchamini boshqarish va tarmoq tiqilishining yanada ortishiga yo'l qo'ymaslik uchun amalga oshiriladi.

Agar tiqilishni boshqarish holatidan keyin vaqt tugashi yuzaga kelsa, tarmoq holati jiddiylashadi va TCP tiqilishning oldini olish holatidan sekin ishga tushirish holatiga o'tadi. Bu holda, tiqilish oynasi cwnd qiymati 1 MSS ga, maksimal paket segment uzunligiga va sekin ishga tushirish chegarasi ssthresh qiymati cwnd ning yarmiga o'rnatiladi. Buning maqsadi tarmoq tiklangandan so'ng uzatish tezligi va tarmoq tiqilish darajasini muvozanatlash uchun tiqilish oynasi hajmini asta-sekin oshirishdir.

Xulosa
Ishonchli transport protokoli sifatida TCP ketma-ketlik raqami, tasdiqlash, qayta uzatishni boshqarish, ulanishni boshqarish va oynani boshqarish orqali ishonchli transportni amalga oshiradi. Ular orasida oqimni boshqarish mexanizmi jo'natuvchi tomonidan yuborilgan ma'lumotlar miqdorini qabul qiluvchining haqiqiy qabul qilish quvvatiga muvofiq boshqaradi, bu esa tarmoq tiqilib qolishi va ishlashning pasayishi muammolarini oldini oladi. Tiqilib qolishni boshqarish mexanizmi jo'natuvchi tomonidan yuborilgan ma'lumotlar miqdorini sozlash orqali tarmoq tiqilib qolishining oldini oladi. Tiqilib qolish oynasi va yuborish oynasi tushunchalari bir-biri bilan bog'liq va jo'natuvchidagi ma'lumotlar miqdori tiqilib qolish oynasining hajmini dinamik ravishda sozlash orqali boshqariladi. Sekin ishga tushirish, tiqilib qolishning oldini olish va tez tiklash TCP tiqilib qolishni boshqarish algoritmining uchta asosiy qismi bo'lib, ular tarmoqning sig'imi va tiqilib qolish darajasiga moslashish uchun turli strategiyalar orqali tiqilib qolish oynasining hajmini sozlaydi.

Keyingi bo'limda biz TCP ning qayta uzatish mexanizmini batafsil ko'rib chiqamiz. Qayta uzatish mexanizmi ishonchli uzatishga erishish uchun TCP ning muhim qismidir. U yo'qolgan, buzilgan yoki kechiktirilgan ma'lumotlarni qayta uzatish orqali ma'lumotlarning ishonchli uzatilishini ta'minlaydi. Qayta uzatish mexanizmini amalga oshirish printsipi va strategiyasi keyingi bo'limda batafsil tanishtiriladi va tahlil qilinadi. Bizni kuzatib boring!


Nashr vaqti: 2025-yil 24-fevral