در پروتکل TCP به منظور کنترل جریان داده ها از بافر استفاده میشود و داده های قبل از ارسال به برنامه ی کاربردی لایه ی بالاتر بافر شده و به صورت دستهای تحویل داده خواهند شد. گاهی ممکن است که برنامه ی کاربردی اقدام به دریافت داده های بافر شده ی خود در مهلت مقرر نکرده و بافر پر شود.
در چنین حالتی، نرم افزار TCP قادر به دریافت و ذخیره ی دادهها در بافرش نخواهد بود. به همین دلیل، در فیلد پنجره ی دریافت از هر بسته ی TCP که برای طرف مقابل ارسال میشود، حجم فضای آزاد بافر اعلام خواهد شد تا نرم افزار TCP آن طرف ارسال داده ی خود را با فضای بافر موجود هماهنگ نماید. به این معنی که بسته ای بزرگتر از فضای بافر اعلام شده ارسال نکند. زیرا در غیر این صورت آن بسته پذیرفته نخواهد شد.
به نوعی میتوان گفت که عمل کنترل جریان به منظور جلوگیری از غرق شدن یک گیرنده ی کند زیر بمباران بسته های TCP ارسالی از یک فرستنده ی سریع مورد استفاده قرار میگیرد. شکل زیر نمایش دهنده ی مثالی از مبادله ی اطلاعات بافر دریافت در پروتکل TCP میباشد.
پنجره ی ازدحام
حال فرض شود که سیستمهای انتهایی گیرنده و فرستنده هر دو سریع هستند و پنجرهی هر دو آنها به قدر کافی جای خالی دارد ولی “زیرساخت شبکه” به هر دلیل دچار ازدحام شده و قادر به حمل بسته ها با سرعتی که تولید میشوند نیست در چنین شرایطی “پنجره ی ازدحام(Congestion Window)” به منظور کنترل نرخ تولید بسته در فرستنده یا گیرنده مورد استفاده قرار میگیرد.
الگوریتمهای بکار رفته در پروتکل TCP فرض را بر این گذاشته اند که عدم وصول بسته در گیرنده و انقضای مهلت دریافت ACK به دلیل بروز ازدحام و حذف عمدی بسته در یکی از مسیریابهای بین راه بوده است. در واقع، TCP بر مهلتهای زمانی به دقت نظارت میکند.
بدین ترتیب، علاوه بر پنجره یا بافر دریافت در دو طرف ارتباط، یک پنجره ی دیگر تحت عنوان “پنجره ی ازدحام” یاcongestion window در هر دو سیستم انتهایی نگهداری میشود و حداکثر تعداد بایتهایی را مشخص میکند که فرستنده میتواند به صورت همزمان ارسال کند. تعداد بایتهایی که فرستنده مجاز به ارسال آنها است با توجه به حداقل اندازه ی این دو پنجره مشخص میشود (حداکثر تعداد بایتهای قابل ارسال برابر با اندازه ی کوچکتر در بین این دو پنجره است). فرایند کنترل ازدحام بدین صورت است که پس از اتمام عمل دست تکانی سه مرحلهای، فرستنده اندازه ی پنجره ی ازدحام خود را برابر با حداکثر اندازهی مجاز برای یک قطعه ی تی سی پی ( Maximum Segment Size یا MSS ) قرار میدهد.
بدین ترتیب حداکثر یک قطعه با اندازه ی حداکثر ارسال میشود. در صورتی که پیام تصدیق ( acknowledgement ) بسته ی ارسالی توسط فرستنده دریافت شود، اندازه ی پنجره ی ازدحام برابر با دو برابر اندازه ی فعلی یعنی برابر با 2 MSS میگردد. بدین معنی که فرستنده میتواند 2 بسته با حداکثر اندازه را به صورت همزمان ارسال نماید. مادامی که پس از ارسال هر قطعه دریافت آن تصدیق شود، اندازه ی پنجره ی ازدحام دو برابر خواهد شد.
اندازه ی پنجره ی ازدحام آنقدر زیاد میشود تا آنکه پس از ارسال قطعات، یا وصول آنها تصدیق نشود یا آنکه نرخ ارسال به اندازه ی بافر گیرنده برسد. به این الگوریتم اصطلاحاً الگوریتم”شروع آهسته” Slow Start گفته میشود.
علاوه بر دو پنجره ی ذکر شده، یک پارامتر سوم به نام ” آستانه” یا Threshold نیز توسط پروتکل TCP مورد استفاده قرار میگیرد. در صورتی که پس از ارسال چند قطعه، مهلت تصدیق یکی از آنها منقضی شود، پارامتر آستانه به نصف مقدار پنجره ی ازدحام تنظیم شده و مقدار پنجره ی ازدحام مجددا به مقدار طول حداکثر یک قطعه ی TCP برمیگردد.
حال مجدداً الگوریتم شروع آهسته آغاز به کار میکند با این تفاوت نسبت به الگوریتم قبل که رشد نمایی به محض رسیدن به مقدار آستانه متوقف میشود و پس از آن، ارسال موفق یک قطعه منجر به افزایش اندازه ی پنجرهی ازدحام به اندازهی حداکثر یک قطعه ی TCP یا MSS میشود. به عنوان مثالی از فرایند ذکر شده، میتوان به شکل زیر توجه نمود. در نهایت لازم به ذکر است که دریافت یک بسته ی ICMP Source Quench و تحویل آن به TCP نیز به مثابه انقضای مهلت زمانی است.