الگوریتم Nagle برای ارتباطات شبکه TCP

الگوریتم Nagle ، به نام مهندس جان نول، به منظور کاهش تراکم شبکه ناشی از "مشکلات بسته کوچک" با برنامه های TCP طراحی شده است . پیاده سازی یونیکس با استفاده از الگوریتم Nagle در دهه 1980 شروع شد و امروزه ویژگی استاندارد TCP باقی می ماند.

چگونه الگوریتم Nagle کار می کند

الگوریتم Nagle پردازش داده ها را در قسمت ارسال برنامه های TCP با یک روش ناخوشایند انجام می دهد . این پیام های کوچک را تشخیص می دهد و آنها را قبل از فرستادن داده ها از طریق سیم به بسته های TCP بزرگتر جمع می کند و از این طریق اجتناب از تولید تعداد بی شماری از بسته های کوچک می شود. مشخصات فنی الگوریتم Nagle در سال 1984 به عنوان RFC 896 منتشر شد. تصمیمات برای اطلاعات زیادی برای جمعآوری و مدت زمان انتظار در میان ارسالها برای عملکرد کلی آنها بسیار مهم است.

Nagiling می تواند به طور موثر استفاده از پهنای باند اتصال شبکه به هزینه اضافه تاخیر ( تاخیر ). یک مثال در RFC 896 شرح داده شده است مزایای پهنای باند بالقوه و دلیل ایجاد آن را نشان می دهد:

برنامه های کاربردی از استفاده از الگوریتم Nagle با گزینه برنامه نویسی سوکت TCP_NODELAY استفاده می کنند . ویندوز، لینوکس و سیستم های جاوا به طور معمول Nagle را به طور پیش فرض فعال می کند، بنابراین برنامه های نوشته شده برای این محیط ها باید هنگام انتخاب الگوریتم خاموش، TCP_NODELAY را مشخص کنند.

محدودیت ها

الگوریتم Nagle تنها با TCP قابل استفاده است. پروتکل های دیگر از جمله UDP از آن پشتیبانی نمی کند.

برنامه های کاربردی TCP که نیاز به پاسخ سریع شبکه، مانند تماس تلفنی اینترنتی یا بازی تیرانداز اول شخص دارند، ممکن است هنگامی که Nagle فعال شود، کار خوبی نداشته باشد. تاخیر زمانی ایجاد می شود که الگوریتم زمان اضافی را برای جمع آوری قطعات کوچکتر از داده با هم می تواند به طور چشمگیری چشمگیر چشمگیر در یک صفحه یا جریان صوتی دیجیتال ایجاد کند. این برنامه ها معمولا Nagle را غیرفعال می کنند.

این الگوریتم در ابتدا در زمانی توسعه یافت که شبکه های کامپیوتری پهنای باند کمتری نسبت به امروز داشته باشند. به عنوان مثال در بالا توضیح داده شد بر اساس تجارب جان نگل در فدراسیون هوا فضا در اوایل دهه 1980 بود، جایی که تقلب در شبکه های دوردست آهسته و پر بار، بسیار حساس بود. موقعیت های به طور فزاینده ای کمتری وجود دارد که برنامه های شبکه امروزه می توانند از الگوریتم خود بهره مند شوند.