رفتن به محتوای اصلی
Koohestun
توضیح کوهستانپروتکل‌های شبکهمقاله آموزشی· 5 دقیقه مطالعه· در راهنماها

الگوریتم TCP Slow Start چگونه با افزایش نمایی پنجره ازدحام، از ترافیک شبکه جلوگیری می‌کند؟

الگوریتم شروع کند TCP با آغاز محتاطانه انتقال داده‌ها و دو برابر کردن نرخ ارسال در هر رفت‌وبرگشت تا زمان یافتن حداکثر ظرفیت شبکه، از زیرساخت‌های اینترنت محافظت می‌کند.

به قلم کامران صادقی

مهندسان پروتکل شبکه 40%بهینه‌سازان عملکرد وب 35%آموزشی و مرجع 25%
مهندسان پروتکل شبکه
اولویت دادن به پایداری شبکه و جلوگیری از پدیده بافربلوت (bufferbloat) در زیرساخت مسیریابی جهانی.
بهینه‌سازان عملکرد وب
حمایت از پنجره‌های ازدحام اولیه بزرگتر برای کاهش تاخیر بارگذاری صفحات در اتصالات پهن‌باند مدرن.
آموزشی و مرجع
تمرکز بر استانداردسازی تعاریف و مدل‌های ریاضی ماشین‌های حالت TCP برای آموزش علوم کامپیوتر.

دیدگاه‌هایی که این گزارش پوشش نداده

  • ارائه‌دهندگان خدمات اینترنت (ISP) در لایه دسترسی نهایی (Last-Mile)
  • اپراتورهای شبکه‌های موبایل

نکات کلیدی

  1. الگوریتم شروع کند TCP با آغاز انتقال داده‌ها از طریق یک پنجره بسته کوچک و محافظه‌کارانه، از ازدحام شبکه جلوگیری می‌کند.
  2. نرخ ارسال در هر زمان رفت‌وبرگشت دو برابر می‌شود تا زمانی که حد ظرفیت شبکه شناسایی شود.
  3. از دست رفتن بسته‌ها باعث تغییر فاز از رشد نمایی به فاز خطی اجتناب از ازدحام می‌شود.
  4. عملکرد وب مدرن به تنظیم پنجره ازدحام اولیه برای ایجاد تعادل بین سرعت و پایداری وابسته است.

وقتی کاربری برای دانلود یک فایل روی لینکی کلیک می‌کند، سرور بلافاصله اتصال او را با حداکثر پهنای باند موجود پر نمی‌کند. در عوض، انتقال داده‌ها با سرعتی بسیار پایین و حساب‌شده آغاز می‌شود؛ در کسری از ثانیه اول تنها چند کیلوبایت داده ارسال می‌شود و سپس سرعت به سرعت افزایش می‌یابد. این کنترل‌کننده نامرئی، سرعت تقریبا هر صفحه وب، پخش ویدیو و انتقال فایلی را در اینترنت مدرن تعیین می‌کند.[4][5]

این رفتار توسط الگوریتم شروع کند پروتکل کنترل انتقال (TCP) کنترل می‌شود؛ یک مکانیزم اساسی برای کنترل ازدحام که طراحی شده تا از فروپاشی روترهای ستون فقرات اینترنت در برابر فوران ناگهانی ترافیک جلوگیری کند. بدون این الگوریتم، یک سرور پرسرعت می‌تواند یک گیرنده کندتر یا لینک‌های شبکه میانی را تحت فشار قرار دهد و منجر به از دست رفتن گسترده بسته‌های داده (packet loss) و قطع اتصال شود.[3][6]

سازوکار شروع کند به متغیری به نام پنجره ازدحام یا cwnd وابسته است. این متغیر حداکثر مقدار داده‌های تاییدنشده‌ای را تعیین می‌کند که فرستنده می‌تواند پیش از توقف و انتظار برای تایید دریافت توسط گیرنده، ارسال کند. هنگام برقراری یک اتصال جدید، فرستنده مقدار cwnd را روی یک عدد بسیار محافظه‌کارانه تنظیم می‌کند که معمولا بر اساس حداکثر اندازه سگمنت (MSS) اندازه‌گیری می‌شود.[1][7]

برای یک اتصال استاندارد اترنت، یک MSS معمولا ۱۴۶۰ بایت است. در روزهای اولیه اینترنت، همان‌طور که توسط کارگروه مهندسی اینترنت (IETF) در استاندارد RFC 2001 سال ۱۹۹۷ تعریف شد، پنجره ازدحام اولیه دقیقا روی یک سگمنت تنظیم می‌شد. این یعنی سرور تنها ۱.۴ کیلوبایت داده ارسال می‌کرد و تا زمانی که گیرنده آن را تایید نمی‌کرد، متوقف می‌ماند.[8]

برخلاف نامش، فاز شروع کند در واقع رشد نمایی را دیکته می‌کند. به ازای هر تاییدیه (ACK) که فرستنده از کلاینت دریافت می‌کند، مقدار cwnd را یک MSS افزایش می‌دهد. از آنجا که ارسال موفقیت‌آمیز یک سگمنت منجر به یک ACK می‌شود، فرستنده سپس می‌تواند دو سگمنت ارسال کند. وقتی آن دو تایید شدند، چهار سگمنت و سپس هشت سگمنت ارسال می‌کند و عملا نرخ ارسال را در هر زمان رفت‌وبرگشت (RTT) دو برابر می‌کند.[4][5][7]

در طول فاز شروع کند، مقدار داده‌های ارسالی در هر رفت‌وبرگشت دو برابر می‌شود.

در استاندارد RFC 5681 سازمان IETF (مشخصات سال ۲۰۰۹ که کنترل ازدحام TCP را به‌روز کرد) آمده است: «الگوریتم شروع کند زمانی استفاده می‌شود که cwnd < ssthresh باشد، در حالی که الگوریتم اجتناب از ازدحام زمانی به کار می‌رود که cwnd > ssthresh باشد.» این آستانه که به عنوان ssthresh (آستانه شروع کند) شناخته می‌شود، مرز بین بررسی تهاجمی شبکه و مدیریت محتاطانه پهنای باند است.[1]

به محض اینکه پنجره ازدحام از مقدار ssthresh عبور کند، دو برابر شدن نمایی متوقف می‌شود. الگوریتم وارد فاز اجتناب از ازدحام می‌شود؛ جایی که پنجره به صورت خطی افزایش می‌یابد (معمولا فقط یک MSS در هر رفت‌وبرگشت کامل). این رشد خطی، حد مطلق ظرفیت شبکه را بدون ایجاد خرابی فاجعه‌بار بررسی می‌کند.[1][3][7]

به محض اینکه پنجره ازدحام از مقدار ssthresh عبور کند، دو برابر شدن نمایی متوقف می‌شود.

الگوریتم زمانی متوجه می‌شود که به سقف ظرفیت شبکه رسیده است که یک بسته داده از دست برود. در پروتکل TCP، از دست رفتن بسته (که با تاییدیه‌های تکراری یا پایان زمان انتظار مشخص می‌شود) نشانگر جهانی ازدحام است. روترهای شبکه به سادگی فضای بافر بیشتری برای نگهداری داده‌های ورودی ندارند و مجبور می‌شوند بسته‌های اضافی را دور بریزند.[3][6]

با تشخیص از دست رفتن بسته، فرستنده واکنش شدیدی نشان می‌دهد. مقدار ssthresh را به نصف کاهش می‌دهد و این حد پایین‌تر جدید را به عنوان مرز عملیاتی ایمن ثبت می‌کند. بسته به پیاده‌سازی خاص TCP، ممکن است مقدار cwnd را به مقدار اولیه برگرداند و دوباره وارد فاز شروع کند شود، یا برای حفظ یک توان عملیاتی متوسط، وارد فاز بازیابی سریع (fast recovery) شود.[1][8]

با گذشت زمان و تغییر زیرساخت اینترنت از دایال‌آپ به پهن‌باند، تعریف شروع «کند» نیز باید تکامل می‌یافت. محدودیت یک سگمنتی سال ۱۹۹۷ به یک گلوگاه جدی برای عملکرد وب تبدیل شد، زیرا اتصالات با پهنای باند بالا بی‌کار می‌ماندند تا رشد نمایی در طول چندین رفت‌وبرگشت سرعت بگیرد.[2][8]

تا سال ۲۰۰۹، استاندارد RFC 5681 به طور رسمی پنجره ازدحام اولیه مجاز را بسته به اندازه MSS به سه تا چهار سگمنت افزایش داد. این تغییر به سرورها اجازه داد تا در اولین ارسال، حدود ۴.۳ تا ۵.۸ کیلوبایت داده بفرستند و زمان لازم برای رسیدن به حداکثر توان عملیاتی در اتصالات پهن‌باند استاندارد را کاهش دهند.[1]

تعریف شروع «کند» از سال ۱۹۹۷ تاکنون ده‌برابر شده است تا با سرعت‌های پهن‌باند مدرن سازگار شود.

تلاش برای سرعت‌های اولیه بالاتر، در مقاله بسیار تاثیرگذار سال ۲۰۱۰ از Google Research با عنوان «استدلالی برای افزایش پنجره ازدحام اولیه TCP» به اوج خود رسید. مهندسان گوگل نشان دادند که افزایش پنجره اولیه به ۱۰ سگمنت (حدود ۱۴.۶ کیلوبایت) می‌تواند تاخیر بارگذاری صفحات وب را ۱۰ درصد یا بیشتر کاهش دهد، زیرا بسیاری از فایل‌های کوچک وب می‌توانند به طور کامل در همان اولین رفت‌وبرگشت تحویل داده شوند.[2]

امروزه، آن پنجره اولیه ۱۰ سگمنتی به پیش‌فرض هسته لینوکس تبدیل شده است که اکثریت قریب به اتفاق سرورهای وب در سراسر جهان را قدرت می‌بخشد. الگوریتم شروع کند همچنان میانجی نامرئی سرعت اینترنت است و تضمین می‌کند که هر اتصالی (چه به یک ترموستات هوشمند و چه به یک استریم ویدیوی 4K) ظرفیت دقیق پهنای باند خود را بدون از کار انداختن شبکه پیدا کند.[2][4][9]

پس از رسیدن به آستانه شروع کند، TCP به رشد خطی تغییر حالت می‌دهد تا حداکثر ظرفیت شبکه را با دقت بررسی کند.

بررسی عمیق دیدگاه‌ها

مهندسان پروتکل شبکه

مهندسانی که معماری هسته اینترنت را طراحی می‌کنند، شروع کند را به عنوان یک مکانیزم دفاعی ضروری در برابر فروپاشی سیستماتیک می‌بینند.

برای طراحان پروتکل در سازمان‌هایی مانند IETF و سیسکو، نگرانی اصلی تراژدی منابع مشترک است. اگر هر سروری بلافاصله با حداکثر سرعت سخت‌افزاری داده ارسال کند، روترهای میانی که ستون فقرات اینترنت را تشکیل می‌دهند، فورا بافرهای حافظه خود را تخلیه می‌کنند. این وضعیت که به عنوان بافربلوت (bufferbloat) شناخته می‌شود، منجر به از دست رفتن گسترده بسته‌ها شده و همه سرورها را مجبور می‌کند داده‌های خود را به طور همزمان دوباره ارسال کنند که این امر تنها ازدحام را بدتر می‌کند. شروع کند نه به عنوان یک جریمه عملکردی، بلکه به عنوان تنها راه ریاضی برای بررسی ایمن یک مسیر شبکه ناشناخته بدون نابود کردن آن در نظر گرفته می‌شود.

بهینه‌سازان عملکرد وب

مهندسان عملکرد، محدودیت‌های تاریخی شروع کند را به عنوان یک گلوگاه منسوخ برای پهن‌باند مدرن می‌دانند.

سازمان‌هایی که روی تاخیر کاربر نهایی تمرکز دارند، مانند گوگل و شبکه‌های تحویل محتوا (CDN) مانند KeyCDN، استدلال می‌کنند که محدودیت‌های اولیه یک یا سه سگمنتی برای مودم‌های دایال‌آپ طراحی شده بودند. در یک اتصال مدرن فیبر نوری یا 5G، انتظار برای چندین رفت‌وبرگشت جهت افزایش سرعت، پهنای باند موجود را هدر داده و رندر صفحه را به تاخیر می‌اندازد. آن‌ها با حمایت از پنجره اولیه ۱۰ سگمنتی، قصد دارند کدهای HTML، CSS و اسکریپت‌های حیاتی یک صفحه وب را به طور کامل در همان اولین فوران داده‌ها تحویل دهند و عملا جریمه شروع کند را برای فایل‌های کوچک وب دور بزنند.

پرسش‌های متداول

اگر سرعت به صورت نمایی رشد می‌کند، چرا به آن «شروع کند» می‌گویند؟

این روش تنها در مقایسه با جایگزین آن (یعنی ارسال فوری داده‌ها با حداکثر سرعت سخت‌افزاری فرستنده) «کند» است. با شروع از یک پنجره کوچک، از شبکه محافظت می‌کند، حتی اگر نرخ ارسال به سرعت دو برابر شود.

پروتکل TCP چگونه متوجه ازدحام شبکه می‌شود؟

پروتکل TCP برای تشخیص ازدحام، در درجه اول به از دست رفتن بسته‌ها (packet loss) متکی است. اگر بافر یک روتر پر شود، بسته‌ها را دور می‌ریزد که باعث می‌شود گیرنده داده‌ها را از دست بدهد و زمان‌سنج تاییدیه فرستنده منقضی شود.

آیا می‌توانم TCP slow start را غیرفعال کنم تا دانلودها سریع‌تر شوند؟

خیر، این یک بخش الزامی از پروتکل TCP است که در پشته شبکه سیستم‌عامل شما تعبیه شده است. با این حال، مدیران سرور می‌توانند اندازه پنجره ازدحام اولیه را برای بهینه‌سازی عملکرد تنظیم کنند.

چرا مهم است

هر صفحه وب، ویدیوی در حال پخش و فایل دانلودی برای تنظیم سرعت به این الگوریتم نامرئی وابسته است. درک نحوه کار آن نشان می‌دهد که چرا اینترنت‌های پرسرعت همچنان در ابتدا با بافرینگ مواجه می‌شوند و چرا پیکربندی سرور به اندازه پهنای باند خام اهمیت دارد.

منابع

پوشش منابع

9 منبع

3 دیدگاه شناسایی‌شده

مهندسان پروتکل شبکه 40%بهینه‌سازان عملکرد وب 35%آموزشی و مرجع 25%
  1. [1]RFC Editorمهندسان پروتکل شبکه

    RFC 5681: TCP Congestion Control

    مطالعه در RFC Editor
  2. [2]Google Researchبهینه‌سازان عملکرد وب

    An Argument for Increasing TCP's Initial Congestion Window

    مطالعه در Google Research
  3. [3]Ciscoمهندسان پروتکل شبکه

    Chapter: Congestion Avoidance Overview

    مطالعه در Cisco
  4. [4]MDN Web Docsبهینه‌سازان عملکرد وب

    TCP slow start - Glossary

    مطالعه در MDN Web Docs
  5. [5]KeyCDN Supportبهینه‌سازان عملکرد وب

    What Is TCP Slow Start

    مطالعه در KeyCDN Support
  6. [6]Purdue e-Pubsمهندسان پروتکل شبکه

    TCP Congestion Control: Overview and Survey Of Ongoing Research

    مطالعه در Purdue e-Pubs
  7. [7]GeeksforGeeksآموزشی و مرجع

    TCP Congestion Control

    مطالعه در GeeksforGeeks
  8. [8]RFC Editorمهندسان پروتکل شبکه

    RFC 2001: TCP Slow Start, Congestion Avoidance, Fast Retransmit, and Fast Recovery Algorithms

    مطالعه در RFC Editor
  9. [9]تیم سردبیری کوهستانآموزشی و مرجع

    تحلیل تیم سردبیری کوهستان

    مطالعه در تیم سردبیری کوهستان

نظرات

همیشه در جریان باشید

هر زاویه. هر روز.

دریافت راهنماها اخبار همراه با پوشش کامل منابع و تحلیل دیدگاه‌ها، مستقیم در صندوق ورودی شما.