الگوریتم Nagle که به نام مهندس جان ناگل نامگذاری شده است، برای کاهش تراکم شبکه ناشی از مشکلات کوچک بسته در برنامه های TCP طراحی شده است. پیادهسازی یونیکس با استفاده از الگوریتم Nagle در دهه 1980 آغاز شد و امروزه یکی از ویژگیهای استاندارد TCP باقی مانده است.
چگونه الگوریتم ناگل کار می کند
الگوریتم Nagle داده ها را در سمت ارسال برنامه های TCP با روشی به نام nagling پردازش می کند. پیامهای کوچک را شناسایی میکند و آن پیامها را قبل از ارسال دادهها از طریق سیم در بستههای بزرگتر TCP جمعآوری میکند. این فرآیند از تولید تعداد غیر ضروری بسته های کوچک جلوگیری می کند.
مشخصات فنی الگوریتم Nagle در سال 1984 با عنوان RFC 896 منتشر شد. تصمیمگیری در مورد مقدار داده جمعآوری و مدت زمان انتظار بین ارسالها برای عملکرد کلی آن بسیار مهم است.
فواید ناگلینگ
Nagling می تواند به طور موثر از پهنای باند اتصال شبکه به بهای اضافه کردن تأخیر یا تأخیر استفاده کند. مثالی که در RFC 896 توضیح داده شده است مزایای بالقوه پهنای باند و دلیل ایجاد آن را نشان می دهد:
- اگر یک برنامه TCP که ضربات صفحه کلید را قطع می کند، بخواهد هر کاراکتر در حال تایپ را با گیرنده ارتباط برقرار کند، می تواند یک سری پیام تولید کند که هر کدام حاوی 1 بایت داده است.
- قبل از ارسال این پیامها در سراسر شبکه، هر کدام باید با اطلاعات هدر TCP بستهبندی شوند که توسط TCP/IP مورد نیاز است. اندازه هر سرصفحه بین 20 تا 60 بایت است.
- بدون غر زدن، این برنامه کاربردی نمونه پیامهای شبکه متشکل از ۹۵ درصد یا بیشتر اطلاعات سرصفحه (حداقل ۲۰ بایت از ۲۱ بایت) و ۵ درصد یا کمتر دادههای واقعی را از صفحهکلید فرستنده تولید میکند.با استفاده از الگوریتم Nagle، میتوان همان دادهها را با استفاده از پیامهای کمتر تحویل داد و در نتیجه پهنای باند صرفهجویی زیادی داشت.
برنامه ها استفاده خود از الگوریتم Nagle را با گزینه برنامه نویسی سوکت TCP_NODELA کنترل می کنند. سیستم های ویندوز، لینوکس و جاوا معمولاً Nagle را به طور پیش فرض فعال می کنند. بنابراین، برنامههایی که برای آن محیطها نوشته شدهاند باید TCP_NODELAY را برای خاموش کردن الگوریتم مشخص کنند.
محدودیت
برنامههایی که به پاسخ سریع شبکه نیاز دارند، مانند تماسهای ویدیویی و بازیهای آنلاین، ممکن است وقتی Nagle فعال باشد، به خوبی کار نکنند. تأخیرهای ایجاد شده در حالی که الگوریتم برای جمعآوری تکههای کوچکتر داده به زمان بیشتری نیاز دارد، میتواند باعث تأخیر قابلتوجه بصری روی صفحه یا جریان صوتی دیجیتال شود. چنین برنامه هایی معمولاً Nagle را غیرفعال می کنند.
این الگوریتم در ابتدا در زمانی توسعه یافت که شبکه های کامپیوتری از پهنای باند کمتری نسبت به امروز پشتیبانی می کردند.مثالی که در بالا توضیح داده شد بر اساس تجربیات جان ناگل در فورد هوافضا در اوایل دهه 1980 بود، جایی که مبادلات آزاردهنده روی شبکه آهسته، پر بار و مسافت طولانی فورد منطقی بود. امروزه موقعیتهای کمتری وجود دارد که برنامههای کاربردی شبکه میتوانند از الگوریتم او سود ببرند.
الگوریتم Nagle فقط با TCP قابل استفاده است. پروتکل های دیگر، مانند UDP، از آن پشتیبانی نمی کنند.