Flow control در ارتباطات داده ای، کنترل جریان یک فرآیند مدیریت نرخ انتقال بین دو گره (دو عضو در یک شبکه) برای جلوگیری از ارسال از طرف فرستنده به دریافت کننده است. کنترل جریان مکانیزمی را برای دریافت کننده جهت کنترل سرعت انتقال فراهم می کند؛ بنابراین گره دریافت کننده دچار سرریزی داده از طرف گره ارسال کننده نمی شود.
کنترل جریان باید از کنترل ازدحام متمایز شود که برای کنترل جریانی از داده زمانیکه ازدحام به طور واقعی رخ داده استفاده می شود. کنترل جریان می تواند بر اساس اینکه آیا دریافت کننده بازخورد را برای فرستنده ارسال کند یا نه دسته بندی شود.
کنترل جریان موضوع مهمی است زیرا این امکان برای کامپیوتر فرستنده وجود دارد که اطلاعات را با نرخ سریعتر از توان دریافت و پردازش کامپیوتر مقصد انتقال دهد. این امر زمانی اتفاق می افتد که کامپیوترهای دریافت کننده بار ترافیکی سنگینی در مقایسه با کامپیوتر فرستنده داشته باشد یا اگر کامپیوترهای دریافت کننده توان پردازشی کمتری نسبت به کامپیوتر فرستنده داشته باشند.
stop and wait
این روش ساده ترین شکل کنترل جریان است. در این روش پیام به چندین فریم شکسته می شود و دریافت کننده آمادگی خود را برای دریافت هربسته داده اعلام می کند. فرستنده برای هر رسید تأیید ACK (Acknowledgement) بعد از ارسال هر فریم به مدت زمان مشخصی منتظر خواهد ماند. ACK به منظور اطمینان از اینکه دریافت کننده فریم را به درستی دریافت کرده تولید و فرستاده می شود. فریم بعدی تنها زمانی فرستاده خواهد شد که ACK فریم قبلی دریافت شده باشد.ترتیب این عملیات به شرح زیر خواهد بود:
اگر فریم یا ACK در زمان انتقال از بین برود توسط فرستنده دوباره ارسال خواهد شد. این فرآیند انتقال مجدد به نام ARQ (Automatic Repeat Request) معروف است.مشکل روش stop and wait این است که فقط یک فریم در هر بار می تواند انتقال داده شود که اغلب باعث ناکارآمد شدن کانال انتقال می شود چون تا زمانیکه ما ACK را دریافت نکنیم فرستنده قادر به انتقال بسته جدید نخواهد بود. در طول این زمان هم کانال و هم فرستنده بیکار و بدون فعالیت هستند.
Sliding window
روشی برای کنترل جریان که در آن یک گیرنده به فرستنده اجازه ارسال داده را می دهد تا یک پنجره پر شود. هنگامی که پنجره پر شد، فرستنده باید انتقال را متوقف کند تا زمانی که گیرنده آمادگی خود را برای یک پنجره بزرگ تر اعلام کند.از کنترل جریان پنجره کشویی در صورت محدود بودن اندازه و غیر قابل تغییر بودن آن، می توان بهترین استفاده را برد. در طی یک ارتباط معمولی بین فرستنده و گیرنده، گیرنده فضای بافر را برای فریم های n اختصاص می دهد. فرستنده می تواند ارسال کند و گیرنده می تواند فریم های n را قبول کند بدون اینکه منتظر رسید تأیید باشد.
به منظور کمک به پیگیری آن دسته از فریم هایی که به مرحله رسید تأیید رسیده اند، یک عدد ترتیب دار به آن اختصاص داده می شود. گیرنده با ارسال تأییدیه ای که شامل شماره ترتیب دار فریم بعدی مورد انتظار است، یک فریم را تأیید می کند. این تأیید اعلام می کند که گیرنده آماده است تا با دریافت تعدادی فریم، از تعداد مشخص شده شروع کند. هم فرستنده و هم گیرنده آنچه را که پنجره نامیده می شود، حفظ می کنند. اندازه پنجره از اندازه بافر کمتر یا مساوی است.
کنترل جریان Sliding window به مراتب عملکرد بهتری از کنترل جریان stop-and-wait دارد. به عنوان مثال، در یک محیط بی سیم اگر نرخ داده ها پایین باشد و سطح نویز بسیار بالا باشد، انتظار برای تصدیق ACK برای هر بسته ای که منتقل می شود خیلی امکان پذیر نیست. بنابراین، انتقال داده به صورت فله عملکرد بهتری را از نظر توان بیشتر به همراه خواهد داشت.
کنترل جریان Sliding window یک پروتکل نقطه به نقطه است که فرض می کند هیچ عامل دیگری سعی نمی کند تا زمان انتقال اطلاعات فعلی، ارتباط برقرار کند. پنجره نگهداری شده توسط فرستنده نشان می دهد که چه فریمهایی را می توان ارسال کرد. فرستنده تمام فریم های موجود در پنجره را ارسال می کند و منتظر تأیید است (برخلاف رسید تصدیق بعد از هر فریم). سپس فرستنده پنجره را به شماره دنباله مربوطه تغییر می دهد، بنابراین نشان می دهد که فریم های داخل پنجره شروع شده از شماره دنباله فعلی می تواند ارسال شود.
کنترل جریان انتقال
کنترل جریان انتقال ممکن است در این موارد اتفاق بیفتد:
ممکن است نرخ انتقال به دلیل نیاز شبکه یا DTE کنترل شود. کنترل جریان انتقال می تواند به طور مستقل در دو جهت انتقال داده ها اتفاق بیفتد، بنابراین اجازه می دهد نرخ انتقال در یک جهت با نرخ انتقال در جهت دیگر متفاوت باشد. کنترل جریان انتقال می تواند به صورت:
انجام کنترل جریان می تواند به حالت:
در RS232 مشترک دو خط کنترل وجود دارد:
کنترل جریان سخت افزار نوعاً توسط DTE یا «پایان کارفرما» کنترل می شود. همان طور که اجرای اولیه یا وارد کردن خط آن برای دستور به طرف دیگر انجام می شود:
نرم افزار کنترل جریان
در طرف مخالف، XON و XOFF معمولاً به نرم افزار کنترل جریان گفته می شود.
کنترل جریان حلقه باز
کنترل جریان حلقه باز مکانیزمی است که توسط نداشتن بازخورد بین گیرنده و فرستنده مشخص می شود. این وسیله کنترل ساده به طور گسترده ای مورد استفاده قرار می گیرد. تخصیص منابع باید به صورت «رزرو از قبل» یا «گام به گام» باشد.کنترل جریان حلقه باز دارای مشکلات ذاتی در بالا بردن بهره وری از منابع شبکه است. تخصیص منابع در قسمت تنظیم ارتباط به وسیله CAC ساخته می شود و این اختصاص با استفاده از اطلاعاتی ساخته می شود که «اطلاعات قدیمی» در طول عمر ارتباط است. گاهی اوقات اختصاص بیش از حد منابع و رزرو شده ها وجود دارد اما ظرفیت های استفاده نشده هدر رفته می مانند.
کنترل جریان حلقه بسته
کنترل جریان حلقه بسته مکانیزمی است که توسط توانایی شبکه برای گزارش دهی ازدحام معلق شبکه به فرستنده شناخته می شود. سپس این اطلاعات می تواند توسط فرستنده در جهات مختلف به کار گرفته شود تا فعالیت های خود را با شرایط موجود شبکه وفق دهد. کنترل جریان حلقه بسته توسط ABR استفاده می شود. کنترل جریان ارسال که در بالا توضیح داده شد نمونه ای از کنترل جریان حلقه بسته می باشد.